From be43b20eaf35ea202835f1cc438e5e8e88e7a9c3 Mon Sep 17 00:00:00 2001 From: Marcus Chang Date: Thu, 11 Jan 2018 13:38:54 -0800 Subject: [PATCH 001/133] Increase clock tolerance in Flash HAL test The current 0.1% clock tolerance is too small for certain platforms which natural variance is larger than this. This commit increases the tolerance to 0.5% instead. Sample output from time_cpu_cycles called repeatedly in init, before running any flash tests: [1515706585.63][CONN][RXD] diff: 49316 [1515706585.69][CONN][RXD] diff: 49256 [1515706585.75][CONN][RXD] diff: 49286 [1515706585.81][CONN][RXD] diff: 49256 [1515706585.87][CONN][RXD] diff: 49225 [1515706585.94][CONN][RXD] diff: 49286 [1515706585.99][CONN][RXD] diff: 49317 [1515706586.06][CONN][RXD] diff: 49255 [1515706586.12][CONN][RXD] diff: 49286 [1515706586.18][CONN][RXD] diff: 49285 [1515706586.24][CONN][RXD] diff: 49286 [1515706586.31][CONN][RXD] diff: 49347 [1515706586.36][CONN][RXD] diff: 49347 [1515706586.43][CONN][RXD] diff: 49286 [1515706586.49][CONN][RXD] diff: 49286 [1515706586.55][CONN][RXD] diff: 49256 [1515706586.61][CONN][RXD] diff: 49286 [1515706586.68][CONN][RXD] diff: 49346 [1515706586.74][CONN][RXD] diff: 49347 [1515706586.80][CONN][RXD] diff: 49256 Notice the outliers will cause intermittent CI failures. --- TESTS/mbed_hal/flash/functional_tests/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TESTS/mbed_hal/flash/functional_tests/main.cpp b/TESTS/mbed_hal/flash/functional_tests/main.cpp index 156899410a..0170d2255e 100644 --- a/TESTS/mbed_hal/flash/functional_tests/main.cpp +++ b/TESTS/mbed_hal/flash/functional_tests/main.cpp @@ -28,7 +28,7 @@ using namespace utest::v1; #define TEST_CYCLES 1000000 -#define ALLOWED_DRIFT_PPM 1000 //0.1% +#define ALLOWED_DRIFT_PPM 5000 //0.5% /* return values to be checked are documented at: From 70c0af19b9cd753fe1fe3469647cfee38787dfc1 Mon Sep 17 00:00:00 2001 From: Senthil Ramakrishnan Date: Fri, 5 Jan 2018 17:39:44 -0600 Subject: [PATCH 002/133] ESP8266 test config and tcp_echo test fix for ESP8266 --- TESTS/netsocket/tcp_echo/main.cpp | 19 +++++++----- tools/test_configs/ESP8266Interface.json | 37 ++++++++++++++++++++++++ tools/test_configs/config_paths.json | 3 +- tools/test_configs/target_configs.json | 2 +- 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 tools/test_configs/ESP8266Interface.json diff --git a/TESTS/netsocket/tcp_echo/main.cpp b/TESTS/netsocket/tcp_echo/main.cpp index c195cda4df..13776ebc10 100644 --- a/TESTS/netsocket/tcp_echo/main.cpp +++ b/TESTS/netsocket/tcp_echo/main.cpp @@ -28,13 +28,13 @@ using namespace utest::v1; -#ifndef MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE -#define MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE 256 +#ifndef MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE +#define MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE 256 #endif namespace { - char tx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; - char rx_buffer[MBED_CFG_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; + char tx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; + char rx_buffer[MBED_CONF_APP_TCP_CLIENT_ECHO_BUFFER_SIZE] = {0}; } void prep_buffer(char *tx_buffer, size_t tx_size) { @@ -44,7 +44,7 @@ void prep_buffer(char *tx_buffer, size_t tx_size) { } void test_tcp_echo() { - + int n = 0; NetworkInterface* net = MBED_CONF_APP_OBJECT_CONSTRUCTION; int err = MBED_CONF_APP_CONNECT_STATEMENT; @@ -86,7 +86,12 @@ void test_tcp_echo() { prep_buffer(tx_buffer, sizeof(tx_buffer)); #if defined(MBED_CONF_APP_TCP_ECHO_PREFIX) - sock.recv(rx_buffer, sizeof(MBED_CONF_APP_TCP_ECHO_PREFIX)); + n = sock.recv(rx_buffer, sizeof(MBED_CONF_APP_TCP_ECHO_PREFIX)); + if (n >= 0) { + printf("recv-ed prefix: %d bytes - %.*s \n", n, n, rx_buffer); + } else { + printf("Network error in receiving prefix: %d\n", n); + } #endif /* MBED_CONF_APP_TCP_ECHO_PREFIX */ const int ret = sock.send(tx_buffer, sizeof(tx_buffer)); if (ret >= 0) { @@ -95,7 +100,7 @@ void test_tcp_echo() { printf("Network error %d\n", ret); } - int n = sock.recv(rx_buffer, sizeof(rx_buffer)); + n = sock.recv(rx_buffer, sizeof(rx_buffer)); if (n >= 0) { printf("recv %d bytes - %.*s \n", n, n, rx_buffer); } else { diff --git a/tools/test_configs/ESP8266Interface.json b/tools/test_configs/ESP8266Interface.json new file mode 100644 index 0000000000..eba1c0cb4a --- /dev/null +++ b/tools/test_configs/ESP8266Interface.json @@ -0,0 +1,37 @@ +{ + "config": { + "header-file": { + "help" : "String for including your driver header file", + "value" : "\"ESP8266Interface.h\"" + }, + "object-construction" : { + "value" : "new ESP8266Interface( D1, D0, false )" + }, + "connect-statement" : { + "help" : "Must use 'net' variable name, replace WIFI_SSID, WIFI_PASSWORD, WIFI_SECURITY, WIFI_CHANNEL with your WiFi settings", + "value" : "((ESP8266Interface *)net)->connect(WIFI_SSID, WIFI_PASSWORD, WIFI_SECURITY, WIFI_CHANNEL)" + }, + "echo-server-addr" : { + "help" : "IP address of echo server", + "value" : "\"195.34.89.241\"" + }, + "echo-server-port" : { + "help" : "Port of echo server", + "value" : "7" + }, + "tcp-echo-prefix" : { + "help" : "Some servers send a prefix before echoed message", + "value" : "\"u-blox AG TCP/UDP test service\\n\"" + }, + "tcp-client-echo-buffer-size" : { + "help" : "Number of bytes to be send to echo server", + "value" : "200" + }, + "ESP8266-TX": { + "value":"D1" + }, + "ESP8266-RX": { + "value":"D0" + } + } +} diff --git a/tools/test_configs/config_paths.json b/tools/test_configs/config_paths.json index 3b85ad608e..17937fa28f 100644 --- a/tools/test_configs/config_paths.json +++ b/tools/test_configs/config_paths.json @@ -4,5 +4,6 @@ "HEAPBLOCKDEVICE_AND_ETHERNET": "HeapBlockDeviceAndEthernetInterface.json", "ODIN_WIFI" : "OdinInterface.json", "ODIN_ETHERNET" : "Odin_EthernetInterface.json", - "REALTEK_WIFI" : "RealtekInterface.json" + "REALTEK_WIFI" : "RealtekInterface.json", + "ESP8266_WIFI" : "ESP8266Interface.json" } diff --git a/tools/test_configs/target_configs.json b/tools/test_configs/target_configs.json index a48e6e16fe..c25c546faa 100644 --- a/tools/test_configs/target_configs.json +++ b/tools/test_configs/target_configs.json @@ -9,7 +9,7 @@ }, "K64F": { "default_test_configuration": "HEAPBLOCKDEVICE_AND_ETHERNET", - "test_configurations": ["HEAPBLOCKDEVICE_AND_ETHERNET"] + "test_configurations": ["HEAPBLOCKDEVICE_AND_ETHERNET", "ESP8266_WIFI", "ETHERNET"] }, "NUCLEO_F429ZI": { "default_test_configuration": "HEAPBLOCKDEVICE_AND_ETHERNET", From a22d968996c1b87a97527e5e743a8e0be74e7e50 Mon Sep 17 00:00:00 2001 From: Senthil Ramakrishnan Date: Mon, 8 Jan 2018 14:14:01 -0600 Subject: [PATCH 003/133] Fix tcp_hello_world test to receive all the data from http response --- TESTS/netsocket/tcp_hello_world/main.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/TESTS/netsocket/tcp_hello_world/main.cpp b/TESTS/netsocket/tcp_hello_world/main.cpp index 155e5fca29..b6e36dd538 100644 --- a/TESTS/netsocket/tcp_hello_world/main.cpp +++ b/TESTS/netsocket/tcp_hello_world/main.cpp @@ -76,9 +76,15 @@ void test_tcp_hello_world() { sock.send(buffer, strlen(buffer)); // Server will respond with HTTP GET's success code - const int ret = sock.recv(buffer, sizeof(buffer) - 1); - buffer[ret] = '\0'; + int ret = 0; + int bytes_recvd = 0; + do { + ret += bytes_recvd; + bytes_recvd = sock.recv(buffer+ret, sizeof(buffer) - 1 - ret); + }while(bytes_recvd > 0); + buffer[ret] = '\0'; + // Find 200 OK HTTP status in reply bool found_200_ok = find_substring(buffer, buffer + ret, HTTP_OK_STR, HTTP_OK_STR + strlen(HTTP_OK_STR)); // Find "Hello World!" string in reply From cbe539d1d8051f4cb199eb05ad8e5ac310e4b5ce Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Thu, 11 Jan 2018 14:28:17 -0600 Subject: [PATCH 004/133] Fix: Sector/Size overflow from uint32_t FATFilesystem declares sector count and size as uint32_t and block device class arguments are addr and size which is uint64_t While passing arguments to program/read/write API's of block device, multiplication of uint32_t*uint32_t was not typecasted properly to uint64_t which resulted in MSB truncation. Eg. If block 0x800000 is accessed with block size 0x200, addr to be passed (0x800000*0x200)0x100000000, but actual address passed was 0x0 which resulted in over-writting the root directory, and hence corrupted filesystem --- features/filesystem/fat/FATFileSystem.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/features/filesystem/fat/FATFileSystem.cpp b/features/filesystem/fat/FATFileSystem.cpp index 152cc96b33..d7c9309bb9 100644 --- a/features/filesystem/fat/FATFileSystem.cpp +++ b/features/filesystem/fat/FATFileSystem.cpp @@ -196,7 +196,9 @@ DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count) { debug_if(FFS_DBG, "disk_read(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv); DWORD ssize = disk_get_sector_size(pdrv); - int err = _ffs[pdrv]->read(buff, sector*ssize, count*ssize); + bd_addr_t addr = (bd_addr_t)sector*ssize; + bd_size_t size = (bd_size_t)count*ssize; + int err = _ffs[pdrv]->read(buff, addr, size); return err ? RES_PARERR : RES_OK; } @@ -204,12 +206,14 @@ DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count) { debug_if(FFS_DBG, "disk_write(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv); DWORD ssize = disk_get_sector_size(pdrv); - int err = _ffs[pdrv]->erase(sector*ssize, count*ssize); + bd_addr_t addr = (bd_addr_t)sector*ssize; + bd_size_t size = (bd_size_t)count*ssize; + int err = _ffs[pdrv]->erase(addr, size); if (err) { return RES_PARERR; } - err = _ffs[pdrv]->program(buff, sector*ssize, count*ssize); + err = _ffs[pdrv]->program(buff, addr, size); if (err) { return RES_PARERR; } @@ -250,7 +254,9 @@ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) } else { DWORD *sectors = (DWORD*)buff; DWORD ssize = disk_get_sector_size(pdrv); - int err = _ffs[pdrv]->trim(sectors[0]*ssize, (sectors[1]-sectors[0]+1)*ssize); + bd_addr_t addr = (bd_addr_t)sectors[0]*ssize; + bd_size_t size = (bd_size_t)(sectors[1]-sectors[0]+1)*ssize; + int err = _ffs[pdrv]->trim(addr, size); return err ? RES_PARERR : RES_OK; } } From d1a75ecff1451d70c5f55b9e72d07c7eb96d519e Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Mon, 8 Jan 2018 13:24:15 +0100 Subject: [PATCH 005/133] DISCO_F407VG : alignment with other STM32 - clock source is now a user choice - IAR tool chain is available --- .../TARGET_DISCO_F407VG/PinNames.h | 14 +- .../TARGET_DISCO_F407VG/system_clock.c | 58 +- .../TOOLCHAIN_IAR/startup_stm32f407xx.S | 636 ++++++++++++++++++ .../device/TOOLCHAIN_IAR/stm32f407xx.icf | 32 + targets/targets.json | 10 +- 5 files changed, 715 insertions(+), 35 deletions(-) create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/startup_stm32f407xx.S create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/stm32f407xx.icf diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h index 1968bebf0f..0c542e3b91 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h @@ -197,13 +197,13 @@ typedef enum { ADC_VBAT = 0xF2, // Generic signals namings - LED1 = PD_13, - LED2 = PD_12, - LED3 = PD_13, - LED4 = PD_12, - LED5 = PD_14, - LED6 = PD_15, - LED_RED = LED1, + LED1 = PD_13, // LD3 as LD1 is not a user LED + LED2 = PD_12, // LD4 as LD2 is not a user LED + LED3 = PD_13, // orange + LED4 = PD_12, // green + LED5 = PD_14, // red + LED6 = PD_15, // blue + LED_RED = LED5, USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/system_clock.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/system_clock.c index 5610e67950..5a042fb752 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/system_clock.c @@ -17,25 +17,20 @@ /** * This file configures the system clock as follows: *----------------------------------------------------------------------------- - * System clock source | 1- PLL_HSE_EXTC | 3- PLL_HSI - * | (external 8 MHz clock) | (internal 16 MHz) - * | 2- PLL_HSE_XTAL | - * | (external 8 MHz xtal) | + * System clock source | 1- USE_PLL_HSE_EXTC (external 8 MHz clock) + * | 2- USE_PLL_HSE_XTAL (external 8 MHz xtal) + * | 3- USE_PLL_HSI (internal 16 MHz) *----------------------------------------------------------------------------- - * SYSCLK(MHz) | 168 | 168 - *----------------------------------------------------------------------------- - * AHBCLK (MHz) | 168 | 168 - *----------------------------------------------------------------------------- - * APB1CLK (MHz) | 42 | 42 - *----------------------------------------------------------------------------- - * APB2CLK (MHz) | 84 | 84 - *----------------------------------------------------------------------------- - * USB capable (48 MHz precise clock) | YES | NO + * SYSCLK(MHz) | 168 + * AHBCLK (MHz) | 168 + * APB1CLK (MHz) | 42 + * APB2CLK (MHz) | 84 + * USB capable | YES *----------------------------------------------------------------------------- **/ #include "stm32f4xx.h" - +#include "mbed_assert.h" /*!< Uncomment the following line if you need to relocate your vector Table in Internal SRAM. */ @@ -44,16 +39,20 @@ This value must be a multiple of 0x200. */ -/* Select the clock sources (other than HSI) to start with (0=OFF, 1=ON) */ -#define USE_PLL_HSE_EXTC (1) /* Use external clock */ -#define USE_PLL_HSE_XTAL (1) /* Use external xtal */ +// clock source is selected with CLOCK_SOURCE in json config +#define USE_PLL_HSE_EXTC 0x8 // Use external clock (ST Link MCO) +#define USE_PLL_HSE_XTAL 0x4 // Use external xtal (X3 on board - not provided by default) +#define USE_PLL_HSI 0x2 // Use HSI internal clock -#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0) +#if ( ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) ) uint8_t SetSysClock_PLL_HSE(uint8_t bypass); -#endif +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) */ +#if ((CLOCK_SOURCE) & USE_PLL_HSI) uint8_t SetSysClock_PLL_HSI(void); +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSI) */ + /** * @brief Setup the microcontroller system @@ -110,20 +109,23 @@ void SystemInit(void) */ void SetSysClock(void) { +#if ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) /* 1- Try to start with HSE and external clock */ -#if USE_PLL_HSE_EXTC != 0 if (SetSysClock_PLL_HSE(1) == 0) #endif { +#if ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) /* 2- If fail try to start with HSE and external xtal */ -#if USE_PLL_HSE_XTAL != 0 if (SetSysClock_PLL_HSE(0) == 0) #endif { +#if ((CLOCK_SOURCE) & USE_PLL_HSI) /* 3- If fail start with HSI clock */ - if (SetSysClock_PLL_HSI() == 0) { + if (SetSysClock_PLL_HSI() == 0) +#endif + { while(1) { - // [TODO] Put something here to tell the user that a problem occured... + MBED_ASSERT(1); } } } @@ -133,14 +135,14 @@ void SetSysClock(void) //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_1); // 84 MHz } -#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0) +#if ( ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) ) /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ uint8_t SetSysClock_PLL_HSE(uint8_t bypass) { - RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; /* The voltage scaling allows optimizing the power consumption when the device is clocked below the maximum system frequency, to update the voltage scaling value @@ -186,15 +188,16 @@ uint8_t SetSysClock_PLL_HSE(uint8_t bypass) return 1; // OK } -#endif +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) */ +#if ((CLOCK_SOURCE) & USE_PLL_HSI) /******************************************************************************/ /* PLL (clocked by HSI) used as System clock source */ /******************************************************************************/ uint8_t SetSysClock_PLL_HSI(void) { - RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; /* The voltage scaling allows optimizing the power consumption when the device is clocked below the maximum system frequency, to update the voltage scaling value @@ -232,3 +235,4 @@ uint8_t SetSysClock_PLL_HSI(void) return 1; // OK } +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSI) */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/startup_stm32f407xx.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/startup_stm32f407xx.S new file mode 100644 index 0000000000..57738bbdc3 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/startup_stm32f407xx.S @@ -0,0 +1,636 @@ +;/******************** (C) COPYRIGHT 2017 STMicroelectronics ******************** +;* File Name : startup_stm32f407xx.s +;* Author : MCD Application Team +;* Description : STM32F407xx devices vector table for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == _iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* - Branches to main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;* +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FSMC_IRQHandler ; FSMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD 0 ; Reserved + DCD HASH_RNG_IRQHandler ; Hash and RNG + DCD FPU_IRQHandler ; FPU + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMP_STAMP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMP_STAMP_IRQHandler + B TAMP_STAMP_IRQHandler + + PUBWEAK RTC_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_WKUP_IRQHandler + B RTC_WKUP_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Stream0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream0_IRQHandler + B DMA1_Stream0_IRQHandler + + PUBWEAK DMA1_Stream1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream1_IRQHandler + B DMA1_Stream1_IRQHandler + + PUBWEAK DMA1_Stream2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream2_IRQHandler + B DMA1_Stream2_IRQHandler + + PUBWEAK DMA1_Stream3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream3_IRQHandler + B DMA1_Stream3_IRQHandler + + PUBWEAK DMA1_Stream4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream4_IRQHandler + B DMA1_Stream4_IRQHandler + + PUBWEAK DMA1_Stream5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream5_IRQHandler + B DMA1_Stream5_IRQHandler + + PUBWEAK DMA1_Stream6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream6_IRQHandler + B DMA1_Stream6_IRQHandler + + PUBWEAK ADC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC_IRQHandler + B ADC_IRQHandler + + PUBWEAK CAN1_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_TX_IRQHandler + B CAN1_TX_IRQHandler + + PUBWEAK CAN1_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX0_IRQHandler + B CAN1_RX0_IRQHandler + + PUBWEAK CAN1_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_RX1_IRQHandler + B CAN1_RX1_IRQHandler + + PUBWEAK CAN1_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN1_SCE_IRQHandler + B CAN1_SCE_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM9_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM9_IRQHandler + B TIM1_BRK_TIM9_IRQHandler + + PUBWEAK TIM1_UP_TIM10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM10_IRQHandler + B TIM1_UP_TIM10_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM11_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM11_IRQHandler + B TIM1_TRG_COM_TIM11_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK USART3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART3_IRQHandler + B USART3_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTC_Alarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_Alarm_IRQHandler + B RTC_Alarm_IRQHandler + + PUBWEAK OTG_FS_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_WKUP_IRQHandler + B OTG_FS_WKUP_IRQHandler + + PUBWEAK TIM8_BRK_TIM12_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_BRK_TIM12_IRQHandler + B TIM8_BRK_TIM12_IRQHandler + + PUBWEAK TIM8_UP_TIM13_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_UP_TIM13_IRQHandler + B TIM8_UP_TIM13_IRQHandler + + PUBWEAK TIM8_TRG_COM_TIM14_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_TRG_COM_TIM14_IRQHandler + B TIM8_TRG_COM_TIM14_IRQHandler + + PUBWEAK TIM8_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM8_CC_IRQHandler + B TIM8_CC_IRQHandler + + PUBWEAK DMA1_Stream7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream7_IRQHandler + B DMA1_Stream7_IRQHandler + + PUBWEAK FSMC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FSMC_IRQHandler + B FSMC_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART4_IRQHandler + B UART4_IRQHandler + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +UART5_IRQHandler + B UART5_IRQHandler + + PUBWEAK TIM6_DAC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM6_DAC_IRQHandler + B TIM6_DAC_IRQHandler + + PUBWEAK TIM7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM7_IRQHandler + B TIM7_IRQHandler + + PUBWEAK DMA2_Stream0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream0_IRQHandler + B DMA2_Stream0_IRQHandler + + PUBWEAK DMA2_Stream1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream1_IRQHandler + B DMA2_Stream1_IRQHandler + + PUBWEAK DMA2_Stream2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream2_IRQHandler + B DMA2_Stream2_IRQHandler + + PUBWEAK DMA2_Stream3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream3_IRQHandler + B DMA2_Stream3_IRQHandler + + PUBWEAK DMA2_Stream4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream4_IRQHandler + B DMA2_Stream4_IRQHandler + + PUBWEAK ETH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ETH_IRQHandler + B ETH_IRQHandler + + PUBWEAK ETH_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ETH_WKUP_IRQHandler + B ETH_WKUP_IRQHandler + + PUBWEAK CAN2_TX_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_TX_IRQHandler + B CAN2_TX_IRQHandler + + PUBWEAK CAN2_RX0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_RX0_IRQHandler + B CAN2_RX0_IRQHandler + + PUBWEAK CAN2_RX1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_RX1_IRQHandler + B CAN2_RX1_IRQHandler + + PUBWEAK CAN2_SCE_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +CAN2_SCE_IRQHandler + B CAN2_SCE_IRQHandler + + PUBWEAK OTG_FS_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_IRQHandler + B OTG_FS_IRQHandler + + PUBWEAK DMA2_Stream5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream5_IRQHandler + B DMA2_Stream5_IRQHandler + + PUBWEAK DMA2_Stream6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream6_IRQHandler + B DMA2_Stream6_IRQHandler + + PUBWEAK DMA2_Stream7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream7_IRQHandler + B DMA2_Stream7_IRQHandler + + PUBWEAK USART6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART6_IRQHandler + B USART6_IRQHandler + + PUBWEAK I2C3_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C3_EV_IRQHandler + B I2C3_EV_IRQHandler + + PUBWEAK I2C3_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C3_ER_IRQHandler + B I2C3_ER_IRQHandler + + PUBWEAK OTG_HS_EP1_OUT_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_HS_EP1_OUT_IRQHandler + B OTG_HS_EP1_OUT_IRQHandler + + PUBWEAK OTG_HS_EP1_IN_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_HS_EP1_IN_IRQHandler + B OTG_HS_EP1_IN_IRQHandler + + PUBWEAK OTG_HS_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_HS_WKUP_IRQHandler + B OTG_HS_WKUP_IRQHandler + + PUBWEAK OTG_HS_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_HS_IRQHandler + B OTG_HS_IRQHandler + + PUBWEAK DCMI_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DCMI_IRQHandler + B DCMI_IRQHandler + + PUBWEAK HASH_RNG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +HASH_RNG_IRQHandler + B HASH_RNG_IRQHandler + + PUBWEAK FPU_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FPU_IRQHandler + B FPU_IRQHandler + + END +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/stm32f407xx.icf b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/stm32f407xx.icf new file mode 100644 index 0000000000..a45f159055 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_IAR/stm32f407xx.icf @@ -0,0 +1,32 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x080FFFFF; +define symbol __NVIC_start__ = 0x20000000; +define symbol __NVIC_end__ = 0x20000187; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000188; +define symbol __ICFEDIT_region_RAM_end__ = 0x2001FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x7000; +define symbol __ICFEDIT_size_heap__ = 0x8000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block HEAP, block CSTACK }; diff --git a/targets/targets.json b/targets/targets.json index 6adc2b076f..5cf3ce2580 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1550,10 +1550,18 @@ "inherits": ["FAMILY_STM32"], "core": "Cortex-M4F", "extra_labels_add": ["STM32F4", "STM32F407", "STM32F407xG", "STM32F407VG"], - "supported_toolchains": ["ARM", "uARM", "GCC_ARM"], + "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], + "config": { + "clock_source": { + "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL | USE_PLL_HSI", + "value": "USE_PLL_HSE_XTAL|USE_PLL_HSI", + "macro_name": "CLOCK_SOURCE" + } + }, "macros_add": ["USB_STM_HAL"], "overrides": {"lse_available": 0}, "device_has_add": ["ANALOGOUT"], + "release_versions": ["2", "5"], "device_name": "STM32F407VG" }, "DISCO_F429ZI": { From b2ef8fc667bdc773e2eea152502410919eec462c Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 15 Dec 2017 14:45:11 +0100 Subject: [PATCH 006/133] STM32F2: Add Flash API support --- .../TARGET_NUCLEO_F207ZG/device/flash_data.h | 54 ++++ targets/TARGET_STM/TARGET_STM32F2/flash_api.c | 268 ++++++++++++++++++ targets/TARGET_STM/TARGET_STM32F2/objects.h | 7 + targets/targets.json | 2 +- 4 files changed, 330 insertions(+), 1 deletion(-) create mode 100644 targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/flash_data.h create mode 100644 targets/TARGET_STM/TARGET_STM32F2/flash_api.c diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/flash_data.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/flash_data.h new file mode 100644 index 0000000000..f39e40d693 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/device/flash_data.h @@ -0,0 +1,54 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2017, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#ifndef MBED_FLASH_DATA_H +#define MBED_FLASH_DATA_H + +#include + +#if DEVICE_FLASH + +#define FLASH_SIZE ((uint32_t)0x100000) + +/* Base address of the Flash sectors */ +#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) /* Base @ of Sector 0, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08004000) /* Base @ of Sector 1, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08008000) /* Base @ of Sector 2, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x0800C000) /* Base @ of Sector 3, 16 Kbytes */ +#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08010000) /* Base @ of Sector 4, 64 Kbytes */ +#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08020000) /* Base @ of Sector 5, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08040000) /* Base @ of Sector 6, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x08060000) /* Base @ of Sector 7, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_8 ((uint32_t)0x08080000) /* Base @ of Sector 8, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_9 ((uint32_t)0x080A0000) /* Base @ of Sector 9, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_10 ((uint32_t)0x080C0000) /* Base @ of Sector 10, 128 Kbytes */ +#define ADDR_FLASH_SECTOR_11 ((uint32_t)0x080E0000) /* Base @ of Sector 11, 128 Kbytes */ + +#endif +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F2/flash_api.c b/targets/TARGET_STM/TARGET_STM32F2/flash_api.c new file mode 100644 index 0000000000..e4953e7d38 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F2/flash_api.c @@ -0,0 +1,268 @@ +/* mbed Microcontroller Library + * Copyright (c) 2017 ARM Limited + * + * 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. + */ + + #if DEVICE_FLASH + +#include "flash_api.h" +#include "flash_data.h" +#include "platform/mbed_critical.h" + +static uint32_t GetSector(uint32_t Address); +static uint32_t GetSectorSize(uint32_t Sector); + +/** Initialize the flash peripheral and the flash_t object + * + * @param obj The flash object + * @return 0 for success, -1 for error + */ +int32_t flash_init(flash_t *obj) +{ + return 0; +} + +/** Uninitialize the flash peripheral and the flash_t object + * + * @param obj The flash object + * @return 0 for success, -1 for error + */ +int32_t flash_free(flash_t *obj) +{ + return 0; +} + +static int32_t flash_unlock(void) +{ + /* Allow Access to Flash control registers and user Falsh */ + if (HAL_FLASH_Unlock()) { + return -1; + } else { + return 0; + } +} + +static int32_t flash_lock(void) +{ + /* Disable the Flash option control register access (recommended to protect + the option Bytes against possible unwanted operations) */ + if (HAL_FLASH_Lock()) { + return -1; + } else { + return 0; + } +} + +/** Erase one sector starting at defined address + * + * The address should be at sector boundary. This function does not do any check for address alignments + * @param obj The flash object + * @param address The sector starting address + * @return 0 for success, -1 for error + */ +int32_t flash_erase_sector(flash_t *obj, uint32_t address) +{ + static FLASH_EraseInitTypeDef EraseInitStruct; + uint32_t FirstSector; + uint32_t SectorError = 0; + int32_t status = 0; + + if ((address >= (FLASH_BASE + FLASH_SIZE)) || (address < FLASH_BASE)) { + return -1; + } + + if (flash_unlock() != HAL_OK) { + return -1; + } + + /* Get the 1st sector to erase */ + FirstSector = GetSector(address); + + /* Fill EraseInit structure*/ + EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS; + EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; + EraseInitStruct.Sector = FirstSector; + EraseInitStruct.NbSectors = 1; + + if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK) { + status = -1; + } + + flash_lock(); + + return status; +} + +/** Program one page starting at defined address + * + * The page should be at page boundary, should not cross multiple sectors. + * This function does not do any check for address alignments or if size + * is aligned to a page size. + * @param obj The flash object + * @param address The sector starting address + * @param data The data buffer to be programmed + * @param size The number of bytes to program + * @return 0 for success, -1 for error + */ +int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, uint32_t size) +{ + int32_t status = 0; + + if ((address >= (FLASH_BASE + FLASH_SIZE)) || (address < FLASH_BASE)) { + return -1; + } + + if (flash_unlock() != HAL_OK) { + return -1; + } + + /* Note: If an erase operation in Flash memory also concerns data in the data or instruction cache, + you have to make sure that these data are rewritten before they are accessed during code + execution. If this cannot be done safely, it is recommended to flush the caches by setting the + DCRST and ICRST bits in the FLASH_CR register. */ + __HAL_FLASH_DATA_CACHE_DISABLE(); + __HAL_FLASH_INSTRUCTION_CACHE_DISABLE(); + + __HAL_FLASH_DATA_CACHE_RESET(); + __HAL_FLASH_INSTRUCTION_CACHE_RESET(); + + __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); + __HAL_FLASH_DATA_CACHE_ENABLE(); + + while ((size > 0) && (status == 0)) { + if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, address, (uint64_t)*data) != HAL_OK) { + status = -1; + } else { + size--; + address++; + data++; + } + } + + flash_lock(); + + return status; +} + +/** Get sector size + * + * @param obj The flash object + * @param address The sector starting address + * @return The size of a sector (in our case considering 1 sector = 1 page) + */ +uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address) +{ + if ((address >= (FLASH_BASE + FLASH_SIZE)) || (address < FLASH_BASE)) { + return MBED_FLASH_INVALID_SIZE; + } else { + return (GetSectorSize(GetSector(address))); + } +} + +/** Get page size + * + * @param obj The flash object + * @param address The page starting address + * @return The size of a page (in our case the minimum programmable size) + */ +uint32_t flash_get_page_size(const flash_t *obj) +{ + // Flash of STM32F2 devices can be programed 1 byte at a time + return 1; +} + +/** Get start address for the flash region + * + * @param obj The flash object + * @return The start address for the flash region + */ +uint32_t flash_get_start_address(const flash_t *obj) +{ + return FLASH_BASE; +} + +/** Get the flash region size + * + * @param obj The flash object + * @return The flash region size + */ +uint32_t flash_get_size(const flash_t *obj) +{ + return FLASH_SIZE; +} + +/** + * @brief Gets the sector of a given address + * @param None + * @retval The sector of a given address + */ +static uint32_t GetSector(uint32_t address) +{ + uint32_t sector = 0; + uint32_t tmp = address - ADDR_FLASH_SECTOR_0; + /* This function supports 1Mb and 2Mb flash sizes */ +#if defined(ADDR_FLASH_SECTOR_16) + if (address & 0x100000) { // handle 2nd bank + /* Sector will be at least 12 */ + sector = FLASH_SECTOR_12; + tmp -= 0x100000; + address -= 0x100000; + } +#endif + if (address < ADDR_FLASH_SECTOR_4) { // 16k sectorsize + sector += tmp >>14; + } +#if defined(ADDR_FLASH_SECTOR_5) + else if (address < ADDR_FLASH_SECTOR_5) { //64k sector size + sector += FLASH_SECTOR_4; + } else { + sector += 4 + (tmp >>17); + } +#else + // In case ADDR_FLASH_SECTOR_5 is not defined, sector 4 is the last one. + else { //64k sector size + sector += FLASH_SECTOR_4; + } +#endif + return sector; +} + +/** + * @brief Gets sector Size + * @param None + * @retval The size of a given sector + */ +static uint32_t GetSectorSize(uint32_t Sector) +{ + uint32_t sectorsize = 0x00; +#if defined(FLASH_SECTOR_16) + if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\ + (Sector == FLASH_SECTOR_3) || (Sector == FLASH_SECTOR_12) || (Sector == FLASH_SECTOR_13) ||\ + (Sector == FLASH_SECTOR_14) || (Sector == FLASH_SECTOR_15)) { + sectorsize = 16 * 1024; + } else if((Sector == FLASH_SECTOR_4) || (Sector == FLASH_SECTOR_16)) { +#else +if((Sector == FLASH_SECTOR_0) || (Sector == FLASH_SECTOR_1) || (Sector == FLASH_SECTOR_2) ||\ + (Sector == FLASH_SECTOR_3)) { + sectorsize = 16 * 1024; + } else if(Sector == FLASH_SECTOR_4) { +#endif + sectorsize = 64 * 1024; + } else { + sectorsize = 128 * 1024; + } + return sectorsize; +} + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F2/objects.h b/targets/TARGET_STM/TARGET_STM32F2/objects.h index a961a63a44..7359e18a6c 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F2/objects.h @@ -145,6 +145,13 @@ struct can_s { }; #endif +#if DEVICE_FLASH +struct flash_s { + /* nothing to be stored for now */ + uint32_t dummy; +}; +#endif + #define GPIO_IP_WITHOUT_BRR #include "gpio_object.h" diff --git a/targets/targets.json b/targets/targets.json index 5cf3ce2580..e75f1f59fb 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -903,7 +903,7 @@ }, "detect_code": ["0835"], "macros_add": ["USBHOST_OTHER"], - "device_has_add": ["ANALOGOUT", "CAN", "SERIAL_ASYNCH", "SERIAL_FC"], + "device_has_add": ["ANALOGOUT", "CAN", "SERIAL_ASYNCH", "SERIAL_FC", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name": "STM32F207ZG" From 6c3a1cb6e9869f3826a9612a3b5df9138b2c4f19 Mon Sep 17 00:00:00 2001 From: bcostm Date: Mon, 18 Dec 2017 15:38:35 +0100 Subject: [PATCH 007/133] STM32F2: Remove flash functions doc --- targets/TARGET_STM/TARGET_STM32F2/flash_api.c | 76 ++++--------------- 1 file changed, 13 insertions(+), 63 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F2/flash_api.c b/targets/TARGET_STM/TARGET_STM32F2/flash_api.c index e4953e7d38..321647cf09 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/flash_api.c +++ b/targets/TARGET_STM/TARGET_STM32F2/flash_api.c @@ -23,26 +23,6 @@ static uint32_t GetSector(uint32_t Address); static uint32_t GetSectorSize(uint32_t Sector); -/** Initialize the flash peripheral and the flash_t object - * - * @param obj The flash object - * @return 0 for success, -1 for error - */ -int32_t flash_init(flash_t *obj) -{ - return 0; -} - -/** Uninitialize the flash peripheral and the flash_t object - * - * @param obj The flash object - * @return 0 for success, -1 for error - */ -int32_t flash_free(flash_t *obj) -{ - return 0; -} - static int32_t flash_unlock(void) { /* Allow Access to Flash control registers and user Falsh */ @@ -64,13 +44,16 @@ static int32_t flash_lock(void) } } -/** Erase one sector starting at defined address - * - * The address should be at sector boundary. This function does not do any check for address alignments - * @param obj The flash object - * @param address The sector starting address - * @return 0 for success, -1 for error - */ +int32_t flash_init(flash_t *obj) +{ + return 0; +} + +int32_t flash_free(flash_t *obj) +{ + return 0; +} + int32_t flash_erase_sector(flash_t *obj, uint32_t address) { static FLASH_EraseInitTypeDef EraseInitStruct; @@ -104,17 +87,6 @@ int32_t flash_erase_sector(flash_t *obj, uint32_t address) return status; } -/** Program one page starting at defined address - * - * The page should be at page boundary, should not cross multiple sectors. - * This function does not do any check for address alignments or if size - * is aligned to a page size. - * @param obj The flash object - * @param address The sector starting address - * @param data The data buffer to be programmed - * @param size The number of bytes to program - * @return 0 for success, -1 for error - */ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, uint32_t size) { int32_t status = 0; @@ -155,13 +127,7 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data, return status; } -/** Get sector size - * - * @param obj The flash object - * @param address The sector starting address - * @return The size of a sector (in our case considering 1 sector = 1 page) - */ -uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address) +uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address) { if ((address >= (FLASH_BASE + FLASH_SIZE)) || (address < FLASH_BASE)) { return MBED_FLASH_INVALID_SIZE; @@ -170,34 +136,18 @@ uint32_t flash_get_sector_size(const flash_t *obj, uint32_t address) } } -/** Get page size - * - * @param obj The flash object - * @param address The page starting address - * @return The size of a page (in our case the minimum programmable size) - */ uint32_t flash_get_page_size(const flash_t *obj) { // Flash of STM32F2 devices can be programed 1 byte at a time return 1; } -/** Get start address for the flash region - * - * @param obj The flash object - * @return The start address for the flash region - */ -uint32_t flash_get_start_address(const flash_t *obj) +uint32_t flash_get_start_address(const flash_t *obj) { return FLASH_BASE; } -/** Get the flash region size - * - * @param obj The flash object - * @return The flash region size - */ -uint32_t flash_get_size(const flash_t *obj) +uint32_t flash_get_size(const flash_t *obj) { return FLASH_SIZE; } From ddeea847c6ea1547d7036eea302fa5bc8a485b00 Mon Sep 17 00:00:00 2001 From: Bartek Szatkowski Date: Wed, 27 Dec 2017 14:46:00 +0000 Subject: [PATCH 008/133] Add notes about ISR safety to RTOS doxygen --- rtos/ConditionVariable.h | 17 +++++++++++- rtos/EventFlags.h | 21 ++++++++++++++- rtos/Mail.h | 19 +++++++++++++- rtos/MemoryPool.h | 15 +++++++++-- rtos/Mutex.h | 22 +++++++++++++++- rtos/Queue.h | 18 +++++++++++-- rtos/RtosTimer.h | 14 ++++++++++ rtos/Semaphore.h | 12 +++++++++ rtos/Thread.h | 57 +++++++++++++++++++++++++++++++++++++--- 9 files changed, 184 insertions(+), 11 deletions(-) diff --git a/rtos/ConditionVariable.h b/rtos/ConditionVariable.h index dd091ec3d4..6debad61a3 100644 --- a/rtos/ConditionVariable.h +++ b/rtos/ConditionVariable.h @@ -118,7 +118,10 @@ struct Waiter; */ class ConditionVariable : private mbed::NonCopyable { public: - /** Create and Initialize a ConditionVariable object */ + /** Create and Initialize a ConditionVariable object + * + * @note This function may be called from ISR context. + */ ConditionVariable(Mutex &mutex); /** Wait for a notification @@ -142,6 +145,8 @@ public: * * mutex.unlock(); * @endcode + * + * @note This function cannot be called from ISR context. */ void wait(); @@ -176,21 +181,31 @@ public: * * mutex.unlock(); * @endcode + * + * @note This function cannot be called from ISR context. */ bool wait_for(uint32_t millisec); /** Notify one waiter on this condition variable that a condition changed. * * @note - The thread calling this function must be the owner of the ConditionVariable's mutex + * + * @note This function may be called from ISR context. */ void notify_one(); /** Notify all waiters on this condition variable that a condition changed. * * @note - The thread calling this function must be the owner of the ConditionVariable's mutex + * + * @note This function may be called from ISR context. */ void notify_all(); + /** ConditionVariable destructor + * + * @note This function may be called from ISR context. + */ ~ConditionVariable(); protected: diff --git a/rtos/EventFlags.h b/rtos/EventFlags.h index 5beb5e5ef1..291b7112d5 100644 --- a/rtos/EventFlags.h +++ b/rtos/EventFlags.h @@ -46,29 +46,40 @@ namespace rtos { */ class EventFlags : private mbed::NonCopyable { public: - /** Create and Initialize a EventFlags object */ + /** Create and Initialize a EventFlags object + * + * @note This function cannot be called from ISR context. + */ EventFlags(); /** Create and Initialize a EventFlags object @param name name to be used for this EventFlags. It has to stay allocated for the lifetime of the thread. + + @note This function cannot be called from ISR context. */ EventFlags(const char *name); /** Set the specified Event Flags. @param flags specifies the flags that shall be set. @return event flags after setting or error code if highest bit set (@a osFlagsError). + + @note This function may be called from ISR context. */ uint32_t set(uint32_t flags); /** Clear the specified Event Flags. @param flags specifies the flags that shall be cleared. (default: 0x7fffffff - all flags) @return event flags before clearing or error code if highest bit set (@a osFlagsError). + + @note This function may be called from ISR context. */ uint32_t clear(uint32_t flags = 0x7fffffff); /** Get the currently set Event Flags. @return set event flags. + + @note This function may be called from ISR context. */ uint32_t get() const; @@ -77,6 +88,8 @@ public: @param timeout timeout value or 0 in case of no time-out. (default: osWaitForever) @param clear specifies wether to clear the flags after waiting for them. (default: true) @return event flags before clearing or error code if highest bit set (@a osFlagsError). + + @note This function may be called from ISR context if the timeout parameter is set to 0. */ uint32_t wait_all(uint32_t flags = 0, uint32_t timeout = osWaitForever, bool clear = true); @@ -85,9 +98,15 @@ public: @param timeout timeout value or 0 in case of no time-out. (default: osWaitForever) @param clear specifies wether to clear the flags after waiting for them. (default: true) @return event flags before clearing or error code if highest bit set (@a osFlagsError). + + @note This function may be called from ISR context if the timeout parameter is set to 0. */ uint32_t wait_any(uint32_t flags = 0, uint32_t timeout = osWaitForever, bool clear = true); + /** Event flags destructor + + @note This function cannot be called from ISR context. + */ ~EventFlags(); private: diff --git a/rtos/Mail.h b/rtos/Mail.h index c9ae7f372f..7c1ebd88af 100644 --- a/rtos/Mail.h +++ b/rtos/Mail.h @@ -55,12 +55,17 @@ namespace rtos { template class Mail : private mbed::NonCopyable > { public: - /** Create and Initialise Mail queue. */ + /** Create and Initialise Mail queue. + * + * @note This function cannot be called from ISR context. + */ Mail() { }; /** Check if the mail queue is empty * * @return True if the mail queue is empty, false if not + * + * @note This function may be called from ISR context. */ bool empty() const { return _queue.empty(); @@ -69,6 +74,8 @@ public: /** Check if the mail queue is full * * @return True if the mail queue is full, false if not + * + * @note This function may be called from ISR context. */ bool full() const { return _queue.full(); @@ -77,6 +84,8 @@ public: /** Allocate a memory block of type T @param millisec timeout value or 0 in case of no time-out. (default: 0). @return pointer to memory block that can be filled with mail or NULL in case error. + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ T* alloc(uint32_t millisec=0) { return _pool.alloc(); @@ -85,6 +94,8 @@ public: /** Allocate a memory block of type T and set memory block to zero. @param millisec timeout value or 0 in case of no time-out. (default: 0). @return pointer to memory block that can be filled with mail or NULL in case error. + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ T* calloc(uint32_t millisec=0) { return _pool.calloc(); @@ -93,6 +104,8 @@ public: /** Put a mail in the queue. @param mptr memory block previously allocated with Mail::alloc or Mail::calloc. @return status code that indicates the execution status of the function. + + @note This function may be called from ISR context. */ osStatus put(T *mptr) { return _queue.put(mptr); @@ -101,6 +114,8 @@ public: /** Get a mail from a queue. @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return event that contains mail information or error code. + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ osEvent get(uint32_t millisec=osWaitForever) { osEvent evt = _queue.get(millisec); @@ -113,6 +128,8 @@ public: /** Free a memory block from a mail. @param mptr pointer to the memory block that was obtained with Mail::get. @return status code that indicates the execution status of the function. + + @note This function may be called from ISR context. */ osStatus free(T *mptr) { return _pool.free(mptr); diff --git a/rtos/MemoryPool.h b/rtos/MemoryPool.h index d76a99e794..a145a0cdbb 100644 --- a/rtos/MemoryPool.h +++ b/rtos/MemoryPool.h @@ -50,7 +50,10 @@ template class MemoryPool : private mbed::NonCopyable > { MBED_STATIC_ASSERT(pool_sz > 0, "Invalid memory pool size. Must be greater than 0."); public: - /** Create and Initialize a memory pool. */ + /** Create and Initialize a memory pool. + * + * @note This function cannot be called from ISR context. + */ MemoryPool() { memset(_pool_mem, 0, sizeof(_pool_mem)); memset(&_obj_mem, 0, sizeof(_obj_mem)); @@ -63,13 +66,18 @@ public: MBED_ASSERT(_id); } - /** Destroy a memory pool */ + /** Destroy a memory pool + * + * @note This function cannot be called from ISR context. + */ ~MemoryPool() { osMemoryPoolDelete(_id); } /** Allocate a memory block of type T from a memory pool. @return address of the allocated memory block or NULL in case of no memory available. + + @note This function may be called from ISR context. */ T* alloc(void) { return (T*)osMemoryPoolAlloc(_id, 0); @@ -77,6 +85,8 @@ public: /** Allocate a memory block of type T from a memory pool and set memory block to zero. @return address of the allocated memory block or NULL in case of no memory available. + + @note This function may be called from ISR context. */ T* calloc(void) { T *item = (T*)osMemoryPoolAlloc(_id, 0); @@ -92,6 +102,7 @@ public: is NULL or invalid, or osErrorResource if given memory block is in an invalid memory pool state. + @note This function may be called from ISR context. */ osStatus free(T *block) { return osMemoryPoolFree(_id, (void*)block); diff --git a/rtos/Mutex.h b/rtos/Mutex.h index 1b9e22a27f..a453ff5be9 100644 --- a/rtos/Mutex.h +++ b/rtos/Mutex.h @@ -40,18 +40,26 @@ namespace rtos { /** The Mutex class is used to synchronize the execution of threads. This is for example used to protect access to a shared resource. + @note Member functions of this class cannot be used in ISR context. If you require Mutex functionality within + ISR handler consider using @a Semaphore. + @note Memory considerations: The mutex control structures will be created on current thread's stack, both for the mbed OS and underlying RTOS objects (static or dynamic RTOS memory pools are not being used). */ class Mutex : private mbed::NonCopyable { public: - /** Create and Initialize a Mutex object */ + /** Create and Initialize a Mutex object + * + * @note This function cannot be called from ISR context. + */ Mutex(); /** Create and Initialize a Mutex object @param name name to be used for this mutex. It has to stay allocated for the lifetime of the thread. + + @note This function cannot be called from ISR context. */ Mutex(const char *name); @@ -63,11 +71,15 @@ public: @a osErrorParameter internal error. @a osErrorResource the mutex could not be obtained when no timeout was specified. @a osErrorISR this function cannot be called from the interrupt service routine. + + @note This function cannot be called from ISR context. */ osStatus lock(uint32_t millisec=osWaitForever); /** Try to lock the mutex, and return immediately @return true if the mutex was acquired, false otherwise. + + @note This function cannot be called from ISR context. */ bool trylock(); @@ -77,14 +89,22 @@ public: @a osErrorParameter internal error. @a osErrorResource the mutex was not locked or the current thread wasn't the owner. @a osErrorISR this function cannot be called from the interrupt service routine. + + @note This function cannot be called from ISR context. */ osStatus unlock(); /** Get the owner the this mutex @return the current owner of this mutex. + + @note This function cannot be called from ISR context. */ osThreadId get_owner(); + /** Mutex destructor + * + * @note This function cannot be called from ISR context. + */ ~Mutex(); private: diff --git a/rtos/Queue.h b/rtos/Queue.h index 67a04653db..d07d384e5d 100644 --- a/rtos/Queue.h +++ b/rtos/Queue.h @@ -52,7 +52,10 @@ namespace rtos { template class Queue : private mbed::NonCopyable > { public: - /** Create and initialize a message Queue. */ + /** Create and initialize a message Queue. + * + * @note This function cannot be called from ISR context. + */ Queue() { memset(&_obj_mem, 0, sizeof(_obj_mem)); osMessageQueueAttr_t attr = { 0 }; @@ -63,7 +66,10 @@ public: _id = osMessageQueueNew(queue_sz, sizeof(T*), &attr); MBED_ASSERT(_id); } - + /** Queue destructor + * + * @note This function cannot be called from ISR context. + */ ~Queue() { osMessageQueueDelete(_id); } @@ -71,6 +77,8 @@ public: /** Check if the queue is empty * * @return True if the queue is empty, false if not + * + * @note This function may be called from ISR context. */ bool empty() const { return osMessageQueueGetCount(_id) == 0; @@ -79,6 +87,8 @@ public: /** Check if the queue is full * * @return True if the queue is full, false if not + * + * @note This function may be called from ISR context. */ bool full() const { return osMessageQueueGetSpace(_id) == 0; @@ -93,6 +103,8 @@ public: @a osErrorTimeout the message could not be put into the queue in the given time. @a osErrorResource not enough space in the queue. @a osErrorParameter internal error or non-zero timeout specified in an ISR. + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ osStatus put(T* data, uint32_t millisec=0, uint8_t prio=0) { return osMessageQueuePut(_id, &data, prio, millisec); @@ -106,6 +118,8 @@ public: @a osOK no message is available in the queue and no timeout was specified. @a osEventTimeout no message has arrived during the given timeout period. @a osErrorParameter a parameter is invalid or outside of a permitted range. + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ osEvent get(uint32_t millisec=osWaitForever) { osEvent event; diff --git a/rtos/RtosTimer.h b/rtos/RtosTimer.h index c5e6276468..fd4a9396cb 100644 --- a/rtos/RtosTimer.h +++ b/rtos/RtosTimer.h @@ -93,6 +93,8 @@ public: @deprecated Replaced with RtosTimer(Callback, os_timer_type) @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details + + @note This function cannot be called from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Replaced with RtosTimer(Callback, os_timer_type)") @@ -107,6 +109,8 @@ public: @param type osTimerOnce for one-shot or osTimerPeriodic for periodic behaviour. (default: osTimerPeriodic) @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details + + @note This function cannot be called from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.2", "The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details") @@ -123,6 +127,8 @@ public: RtosTimer(callback(obj, method), os_timer_type). @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details + + @note This function cannot be called from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -140,6 +146,8 @@ public: @a osErrorISR @a stop cannot be called from interrupt service routines. @a osErrorParameter internal error. @a osErrorResource the timer is not running. + + @note This function cannot be called from ISR context. */ osStatus stop(void); @@ -150,9 +158,15 @@ public: @a osErrorISR @a start cannot be called from interrupt service routines. @a osErrorParameter internal error or incorrect parameter value. @a osErrorResource internal error (the timer is in an invalid timer state). + + @note This function cannot be called from ISR context. */ osStatus start(uint32_t millisec); + /** RtosTimer destructor + * + * @note This function cannot be called from ISR context. + */ ~RtosTimer(); private: diff --git a/rtos/Semaphore.h b/rtos/Semaphore.h index 88b479c5e4..a374bccf21 100644 --- a/rtos/Semaphore.h +++ b/rtos/Semaphore.h @@ -46,18 +46,24 @@ class Semaphore : private mbed::NonCopyable { public: /** Create and Initialize a Semaphore object used for managing resources. @param count number of available resources; maximum index value is (count-1). (default: 0). + + @note This function cannot be called from ISR context. */ Semaphore(int32_t count=0); /** Create and Initialize a Semaphore object used for managing resources. @param count number of available resources @param max_count maximum number of available resources + + @note This function cannot be called from ISR context. */ Semaphore(int32_t count, uint16_t max_count); /** Wait until a Semaphore resource becomes available. @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return number of available tokens, before taking one; or -1 in case of incorrect parameters + + @note This function may be called from ISR context if the millisec parameter is set to 0. */ int32_t wait(uint32_t millisec=osWaitForever); @@ -66,9 +72,15 @@ public: @a osOK the token has been correctly released. @a osErrorResource the maximum token count has been reached. @a osErrorParameter internal error. + + @note This function may be called from ISR context. */ osStatus release(void); + /** Semaphore destructor + * + * @note This function cannot be called from ISR context. + */ ~Semaphore(); private: diff --git a/rtos/Thread.h b/rtos/Thread.h index d67ad3acf8..dd3957e8de 100644 --- a/rtos/Thread.h +++ b/rtos/Thread.h @@ -80,6 +80,8 @@ public: @param stack_size stack size (in bytes) requirements for the thread function. (default: OS_STACK_SIZE). @param stack_mem pointer to the stack area to be used by this thread (default: NULL). @param name name to be used for this thread. It has to stay allocated for the lifetime of the thread (default: NULL) + + @note This function cannot be called from ISR context. */ Thread(osPriority priority=osPriorityNormal, uint32_t stack_size=OS_STACK_SIZE, @@ -103,6 +105,8 @@ public: error("oh no!"); } @endcode + + @note This function cannot be called from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Thread-spawning constructors hide errors. " @@ -131,6 +135,8 @@ public: error("oh no!"); } @endcode + + @note This function cannot be called from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -161,6 +167,8 @@ public: error("oh no!"); } @endcode + + @note This function cannot be called from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -192,6 +200,8 @@ public: error("oh no!"); } @endcode + + @note This function cannot be called from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Thread-spawning constructors hide errors. " @@ -208,6 +218,8 @@ public: @param task function to be executed by this thread. @return status code that indicates the execution status of the function. @note a thread can only be started once + + @note This function cannot be called from ISR context. */ osStatus start(mbed::Callback task); @@ -217,6 +229,8 @@ public: @return status code that indicates the execution status of the function. @deprecated The start function does not support cv-qualifiers. Replaced by start(callback(obj, method)). + + @note This function cannot be called from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -229,28 +243,38 @@ public: /** Wait for thread to terminate @return status code that indicates the execution status of the function. @note not callable from interrupt + + @note This function cannot be called from ISR context. */ osStatus join(); /** Terminate execution of a thread and remove it from Active Threads @return status code that indicates the execution status of the function. + + @note This function cannot be called from ISR context. */ osStatus terminate(); /** Set priority of an active thread @param priority new priority value for the thread function. @return status code that indicates the execution status of the function. + + @note This function cannot be called from ISR context. */ osStatus set_priority(osPriority priority); /** Get priority of an active thread @return current priority value of the thread function. + + @note This function cannot be called from ISR context. */ osPriority get_priority(); /** Set the specified Thread Flags for the thread. @param signals specifies the signal flags of the thread that should be set. @return signal flags after setting or osFlagsError in case of incorrect parameters. + + @note This function may be called from ISR context. */ int32_t signal_set(int32_t signals); @@ -279,37 +303,51 @@ public: /** State of this Thread @return the State of this Thread + + @note This function cannot be called from ISR context. */ State get_state(); /** Get the total stack memory size for this Thread @return the total stack memory size in bytes + + @note This function cannot be called from ISR context. */ uint32_t stack_size(); /** Get the currently unused stack memory for this Thread @return the currently unused stack memory in bytes + + @note This function cannot be called from ISR context. */ uint32_t free_stack(); /** Get the currently used stack memory for this Thread @return the currently used stack memory in bytes + + @note This function cannot be called from ISR context. */ uint32_t used_stack(); /** Get the maximum stack memory usage to date for this Thread @return the maximum stack memory usage to date in bytes + + @note This function cannot be called from ISR context. */ uint32_t max_stack(); /** Get thread name @return thread name or NULL if the name was not set. + + @note This function may be called from ISR context. */ const char *get_name(); /** Clears the specified Thread Flags of the currently running thread. @param signals specifies the signal flags of the thread that should be cleared. @return signal flags before clearing or osFlagsError in case of incorrect parameters. + + @note This function cannot be called from ISR context. */ static int32_t signal_clr(int32_t signals); @@ -317,38 +355,51 @@ public: @param signals wait until all specified signal flags are set or 0 for any single signal flag. @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return event flag information or error code. @note if @a millisec is set to 0 and flag is no set the event carries osOK value. - @note not callable from interrupt + + @note This function cannot be called from ISR context. */ static osEvent signal_wait(int32_t signals, uint32_t millisec=osWaitForever); /** Wait for a specified time period in millisec: @param millisec time delay value @return status code that indicates the execution status of the function. - @note not callable from interrupt + + @note This function cannot be called from ISR context. */ static osStatus wait(uint32_t millisec); /** Pass control to next thread that is in state READY. @return status code that indicates the execution status of the function. - @note not callable from interrupt + + @note This function cannot be called from ISR context. */ static osStatus yield(); /** Get the thread id of the current running thread. @return thread ID for reference by other functions or NULL in case of error. + + @note This function may be called from ISR context. */ static osThreadId gettid(); /** Attach a function to be called by the RTOS idle task @param fptr pointer to the function to be called + + @note This function may be called from ISR context. */ static void attach_idle_hook(void (*fptr)(void)); /** Attach a function to be called when a task is killed @param fptr pointer to the function to be called + + @note This function may be called from ISR context. */ static void attach_terminate_hook(void (*fptr)(osThreadId id)); + /** Thread destructor + * + * @note This function cannot be called from ISR context. + */ virtual ~Thread(); private: From ad14bfde4e90966bc1e967a69d4e2e07406befe9 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:36:24 -0600 Subject: [PATCH 009/133] Copy edit ConditionVariable.h Copy edit docs changes for active voice. --- rtos/ConditionVariable.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rtos/ConditionVariable.h b/rtos/ConditionVariable.h index 6debad61a3..c69722d897 100644 --- a/rtos/ConditionVariable.h +++ b/rtos/ConditionVariable.h @@ -120,7 +120,7 @@ class ConditionVariable : private mbed::NonCopyable { public: /** Create and Initialize a ConditionVariable object * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ ConditionVariable(Mutex &mutex); @@ -146,7 +146,7 @@ public: * mutex.unlock(); * @endcode * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ void wait(); @@ -182,7 +182,7 @@ public: * mutex.unlock(); * @endcode * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ bool wait_for(uint32_t millisec); @@ -204,7 +204,7 @@ public: /** ConditionVariable destructor * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ ~ConditionVariable(); From 9c5536112e9639c27ed80bcf2e01fe28e0eefc16 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:38:48 -0600 Subject: [PATCH 010/133] Copy edit EventFlags.h Copy edit file for active voice and agreement. --- rtos/EventFlags.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rtos/EventFlags.h b/rtos/EventFlags.h index 291b7112d5..0571ec7b85 100644 --- a/rtos/EventFlags.h +++ b/rtos/EventFlags.h @@ -46,9 +46,9 @@ namespace rtos { */ class EventFlags : private mbed::NonCopyable { public: - /** Create and Initialize a EventFlags object + /** Create and Initialize an EventFlags object * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ EventFlags(); @@ -56,7 +56,7 @@ public: @param name name to be used for this EventFlags. It has to stay allocated for the lifetime of the thread. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ EventFlags(const char *name); @@ -72,14 +72,14 @@ public: @param flags specifies the flags that shall be cleared. (default: 0x7fffffff - all flags) @return event flags before clearing or error code if highest bit set (@a osFlagsError). - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ uint32_t clear(uint32_t flags = 0x7fffffff); /** Get the currently set Event Flags. @return set event flags. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ uint32_t get() const; @@ -89,7 +89,7 @@ public: @param clear specifies wether to clear the flags after waiting for them. (default: true) @return event flags before clearing or error code if highest bit set (@a osFlagsError). - @note This function may be called from ISR context if the timeout parameter is set to 0. + @note You may call this function from ISR context if the timeout parameter is set to 0. */ uint32_t wait_all(uint32_t flags = 0, uint32_t timeout = osWaitForever, bool clear = true); @@ -105,7 +105,7 @@ public: /** Event flags destructor - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ ~EventFlags(); From bdc21ed97851b7d3e0722c6e9e0beb32f354fba3 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:41:37 -0600 Subject: [PATCH 011/133] Copy edit Mail.h Copy edit file for active voice and American English. --- rtos/Mail.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rtos/Mail.h b/rtos/Mail.h index 7c1ebd88af..c0fdc76fc4 100644 --- a/rtos/Mail.h +++ b/rtos/Mail.h @@ -55,9 +55,9 @@ namespace rtos { template class Mail : private mbed::NonCopyable > { public: - /** Create and Initialise Mail queue. + /** Create and Initialize Mail queue. * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ Mail() { }; @@ -65,7 +65,7 @@ public: * * @return True if the mail queue is empty, false if not * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ bool empty() const { return _queue.empty(); @@ -75,7 +75,7 @@ public: * * @return True if the mail queue is full, false if not * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ bool full() const { return _queue.full(); @@ -85,7 +85,7 @@ public: @param millisec timeout value or 0 in case of no time-out. (default: 0). @return pointer to memory block that can be filled with mail or NULL in case error. - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ T* alloc(uint32_t millisec=0) { return _pool.alloc(); @@ -95,7 +95,7 @@ public: @param millisec timeout value or 0 in case of no time-out. (default: 0). @return pointer to memory block that can be filled with mail or NULL in case error. - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ T* calloc(uint32_t millisec=0) { return _pool.calloc(); @@ -105,7 +105,7 @@ public: @param mptr memory block previously allocated with Mail::alloc or Mail::calloc. @return status code that indicates the execution status of the function. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ osStatus put(T *mptr) { return _queue.put(mptr); @@ -115,7 +115,7 @@ public: @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return event that contains mail information or error code. - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ osEvent get(uint32_t millisec=osWaitForever) { osEvent evt = _queue.get(millisec); @@ -129,7 +129,7 @@ public: @param mptr pointer to the memory block that was obtained with Mail::get. @return status code that indicates the execution status of the function. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ osStatus free(T *mptr) { return _pool.free(mptr); From 9dfa3bda4bb6bc80ee9506c9ca325c6284359b34 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:43:45 -0600 Subject: [PATCH 012/133] Copy edit MemoryPool.h Copy edit file for active voice. --- rtos/MemoryPool.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rtos/MemoryPool.h b/rtos/MemoryPool.h index a145a0cdbb..bfcd392ecc 100644 --- a/rtos/MemoryPool.h +++ b/rtos/MemoryPool.h @@ -52,7 +52,7 @@ class MemoryPool : private mbed::NonCopyable > { public: /** Create and Initialize a memory pool. * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ MemoryPool() { memset(_pool_mem, 0, sizeof(_pool_mem)); @@ -68,7 +68,7 @@ public: /** Destroy a memory pool * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ ~MemoryPool() { osMemoryPoolDelete(_id); @@ -77,7 +77,7 @@ public: /** Allocate a memory block of type T from a memory pool. @return address of the allocated memory block or NULL in case of no memory available. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ T* alloc(void) { return (T*)osMemoryPoolAlloc(_id, 0); @@ -86,7 +86,7 @@ public: /** Allocate a memory block of type T from a memory pool and set memory block to zero. @return address of the allocated memory block or NULL in case of no memory available. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ T* calloc(void) { T *item = (T*)osMemoryPoolAlloc(_id, 0); @@ -102,7 +102,7 @@ public: is NULL or invalid, or osErrorResource if given memory block is in an invalid memory pool state. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ osStatus free(T *block) { return osMemoryPoolFree(_id, (void*)block); From b6a1662790db29ac5078cc1c48538c961dba5f6d Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:46:08 -0600 Subject: [PATCH 013/133] Copy edit Mutex.h Copy edit file for active voice. --- rtos/Mutex.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rtos/Mutex.h b/rtos/Mutex.h index a453ff5be9..4273d14722 100644 --- a/rtos/Mutex.h +++ b/rtos/Mutex.h @@ -40,8 +40,8 @@ namespace rtos { /** The Mutex class is used to synchronize the execution of threads. This is for example used to protect access to a shared resource. - @note Member functions of this class cannot be used in ISR context. If you require Mutex functionality within - ISR handler consider using @a Semaphore. + @note You cannot use member functions of this class in ISR context. If you require Mutex functionality within + ISR handler, consider using @a Semaphore. @note Memory considerations: The mutex control structures will be created on current thread's stack, both for the mbed OS @@ -51,7 +51,7 @@ class Mutex : private mbed::NonCopyable { public: /** Create and Initialize a Mutex object * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ Mutex(); @@ -59,7 +59,7 @@ public: @param name name to be used for this mutex. It has to stay allocated for the lifetime of the thread. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ Mutex(const char *name); @@ -72,7 +72,7 @@ public: @a osErrorResource the mutex could not be obtained when no timeout was specified. @a osErrorISR this function cannot be called from the interrupt service routine. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus lock(uint32_t millisec=osWaitForever); @@ -97,13 +97,13 @@ public: /** Get the owner the this mutex @return the current owner of this mutex. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osThreadId get_owner(); /** Mutex destructor * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ ~Mutex(); From 06b8b8ccffc0634b5cd0415bb5c97d73e15c4d3e Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:48:11 -0600 Subject: [PATCH 014/133] Copy edit Queue.h Copy edit file for active voice. --- rtos/Queue.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rtos/Queue.h b/rtos/Queue.h index d07d384e5d..0190c047f8 100644 --- a/rtos/Queue.h +++ b/rtos/Queue.h @@ -54,7 +54,7 @@ class Queue : private mbed::NonCopyable > { public: /** Create and initialize a message Queue. * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ Queue() { memset(&_obj_mem, 0, sizeof(_obj_mem)); @@ -68,7 +68,7 @@ public: } /** Queue destructor * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ ~Queue() { osMessageQueueDelete(_id); @@ -78,7 +78,7 @@ public: * * @return True if the queue is empty, false if not * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ bool empty() const { return osMessageQueueGetCount(_id) == 0; @@ -88,7 +88,7 @@ public: * * @return True if the queue is full, false if not * - * @note This function may be called from ISR context. + * @note You may call this function from ISR context. */ bool full() const { return osMessageQueueGetSpace(_id) == 0; @@ -104,7 +104,7 @@ public: @a osErrorResource not enough space in the queue. @a osErrorParameter internal error or non-zero timeout specified in an ISR. - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ osStatus put(T* data, uint32_t millisec=0, uint8_t prio=0) { return osMessageQueuePut(_id, &data, prio, millisec); @@ -119,7 +119,7 @@ public: @a osEventTimeout no message has arrived during the given timeout period. @a osErrorParameter a parameter is invalid or outside of a permitted range. - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ osEvent get(uint32_t millisec=osWaitForever) { osEvent event; From 6d77c7fc8e71426b22b78eaf84d46a758c48a2a0 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:50:38 -0600 Subject: [PATCH 015/133] Copy edit RtosTimer.h Copy edit file for active voice. --- rtos/RtosTimer.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rtos/RtosTimer.h b/rtos/RtosTimer.h index fd4a9396cb..27e0c5aeee 100644 --- a/rtos/RtosTimer.h +++ b/rtos/RtosTimer.h @@ -94,7 +94,7 @@ public: @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Replaced with RtosTimer(Callback, os_timer_type)") @@ -110,7 +110,7 @@ public: @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.2", "The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details") @@ -128,7 +128,7 @@ public: @deprecated The RtosTimer has been superseded by the EventQueue. See RtosTimer.h for more details - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -147,7 +147,7 @@ public: @a osErrorParameter internal error. @a osErrorResource the timer is not running. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus stop(void); @@ -159,13 +159,13 @@ public: @a osErrorParameter internal error or incorrect parameter value. @a osErrorResource internal error (the timer is in an invalid timer state). - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus start(uint32_t millisec); /** RtosTimer destructor * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ ~RtosTimer(); From 5e289cba3b94d59e9baa251cb91b42a02b3e5bc6 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 17:52:40 -0600 Subject: [PATCH 016/133] Copy edit Semaphore.h Copy edit file for active voice. --- rtos/Semaphore.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rtos/Semaphore.h b/rtos/Semaphore.h index a374bccf21..e8fc22205a 100644 --- a/rtos/Semaphore.h +++ b/rtos/Semaphore.h @@ -47,7 +47,7 @@ public: /** Create and Initialize a Semaphore object used for managing resources. @param count number of available resources; maximum index value is (count-1). (default: 0). - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ Semaphore(int32_t count=0); @@ -55,7 +55,7 @@ public: @param count number of available resources @param max_count maximum number of available resources - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ Semaphore(int32_t count, uint16_t max_count); @@ -63,7 +63,7 @@ public: @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return number of available tokens, before taking one; or -1 in case of incorrect parameters - @note This function may be called from ISR context if the millisec parameter is set to 0. + @note You may call this function from ISR context if the millisec parameter is set to 0. */ int32_t wait(uint32_t millisec=osWaitForever); @@ -73,13 +73,13 @@ public: @a osErrorResource the maximum token count has been reached. @a osErrorParameter internal error. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ osStatus release(void); /** Semaphore destructor * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ ~Semaphore(); From 09f6c63219876491f56c28623471a0b849f41c70 Mon Sep 17 00:00:00 2001 From: Amanda Butler Date: Mon, 8 Jan 2018 18:01:02 -0600 Subject: [PATCH 017/133] Copy edit Thread.h Copy edit file for active voice. --- rtos/Thread.h | 52 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/rtos/Thread.h b/rtos/Thread.h index dd3957e8de..9f82ec0ed0 100644 --- a/rtos/Thread.h +++ b/rtos/Thread.h @@ -81,7 +81,7 @@ public: @param stack_mem pointer to the stack area to be used by this thread (default: NULL). @param name name to be used for this thread. It has to stay allocated for the lifetime of the thread (default: NULL) - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ Thread(osPriority priority=osPriorityNormal, uint32_t stack_size=OS_STACK_SIZE, @@ -106,7 +106,7 @@ public: } @endcode - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Thread-spawning constructors hide errors. " @@ -136,7 +136,7 @@ public: } @endcode - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -168,7 +168,7 @@ public: } @endcode - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -201,7 +201,7 @@ public: } @endcode - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ MBED_DEPRECATED_SINCE("mbed-os-5.1", "Thread-spawning constructors hide errors. " @@ -219,7 +219,7 @@ public: @return status code that indicates the execution status of the function. @note a thread can only be started once - @note This function cannot be called from ISR context. + @note You cannot call this function ISR context. */ osStatus start(mbed::Callback task); @@ -230,7 +230,7 @@ public: @deprecated The start function does not support cv-qualifiers. Replaced by start(callback(obj, method)). - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ template MBED_DEPRECATED_SINCE("mbed-os-5.1", @@ -244,14 +244,14 @@ public: @return status code that indicates the execution status of the function. @note not callable from interrupt - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus join(); /** Terminate execution of a thread and remove it from Active Threads @return status code that indicates the execution status of the function. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus terminate(); @@ -259,14 +259,14 @@ public: @param priority new priority value for the thread function. @return status code that indicates the execution status of the function. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osStatus set_priority(osPriority priority); /** Get priority of an active thread @return current priority value of the thread function. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ osPriority get_priority(); @@ -274,7 +274,7 @@ public: @param signals specifies the signal flags of the thread that should be set. @return signal flags after setting or osFlagsError in case of incorrect parameters. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ int32_t signal_set(int32_t signals); @@ -304,42 +304,42 @@ public: /** State of this Thread @return the State of this Thread - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ State get_state(); /** Get the total stack memory size for this Thread @return the total stack memory size in bytes - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ uint32_t stack_size(); /** Get the currently unused stack memory for this Thread @return the currently unused stack memory in bytes - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ uint32_t free_stack(); /** Get the currently used stack memory for this Thread @return the currently used stack memory in bytes - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ uint32_t used_stack(); /** Get the maximum stack memory usage to date for this Thread @return the maximum stack memory usage to date in bytes - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ uint32_t max_stack(); /** Get thread name @return thread name or NULL if the name was not set. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ const char *get_name(); @@ -347,7 +347,7 @@ public: @param signals specifies the signal flags of the thread that should be cleared. @return signal flags before clearing or osFlagsError in case of incorrect parameters. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ static int32_t signal_clr(int32_t signals); @@ -356,7 +356,7 @@ public: @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever). @return event flag information or error code. @note if @a millisec is set to 0 and flag is no set the event carries osOK value. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ static osEvent signal_wait(int32_t signals, uint32_t millisec=osWaitForever); @@ -364,41 +364,41 @@ public: @param millisec time delay value @return status code that indicates the execution status of the function. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ static osStatus wait(uint32_t millisec); /** Pass control to next thread that is in state READY. @return status code that indicates the execution status of the function. - @note This function cannot be called from ISR context. + @note You cannot call this function from ISR context. */ static osStatus yield(); /** Get the thread id of the current running thread. @return thread ID for reference by other functions or NULL in case of error. - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ static osThreadId gettid(); /** Attach a function to be called by the RTOS idle task @param fptr pointer to the function to be called - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ static void attach_idle_hook(void (*fptr)(void)); /** Attach a function to be called when a task is killed @param fptr pointer to the function to be called - @note This function may be called from ISR context. + @note You may call this function from ISR context. */ static void attach_terminate_hook(void (*fptr)(osThreadId id)); /** Thread destructor * - * @note This function cannot be called from ISR context. + * @note You cannot call this function from ISR context. */ virtual ~Thread(); From 72c648ae62834db9109823de08d24f34b8fbb418 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Tue, 9 Jan 2018 14:10:14 +0100 Subject: [PATCH 018/133] STM32 LOWPOWERTIMER : introduce LPTIM feature STM32L0, L4, F7 and few F4 chip are supporting LPTIM feature. We propose to allow user to use LPTIM for MBED LowPowerTimer API instead of using RTC wakeup timers. By default, all targets that are supporting this feature have been configured. --- targets/TARGET_STM/lp_ticker.c | 256 ++++++++++++++++++++++++++++++- targets/TARGET_STM/rtc_api.c | 17 +- targets/TARGET_STM/rtc_api_hal.h | 5 + targets/TARGET_STM/sleep.c | 4 - targets/targets.json | 83 +++++++++- 5 files changed, 350 insertions(+), 15 deletions(-) diff --git a/targets/TARGET_STM/lp_ticker.c b/targets/TARGET_STM/lp_ticker.c index dfe84aff75..3404994aa7 100644 --- a/targets/TARGET_STM/lp_ticker.c +++ b/targets/TARGET_STM/lp_ticker.c @@ -27,12 +27,264 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************* */ -#include "device.h" #if DEVICE_LOWPOWERTIMER #include "rtc_api_hal.h" +#if MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM + +LPTIM_HandleTypeDef LptimHandle; + +volatile uint32_t lp_SlaveCounter = 0; +volatile uint32_t lp_oc_int_part = 0; +volatile uint16_t lp_TickPeriod_us; +volatile uint8_t lp_Fired = 0; + +static void LPTIM1_IRQHandler(void); +static void (*irq_handler)(void); + + +void lp_ticker_init(void) +{ + /* Check if LPTIM is already configured */ +#if (TARGET_STM32L0) + if (READ_BIT(RCC->APB1ENR, RCC_APB1ENR_LPTIM1EN) != RESET) { + return; + } +#else + if (__HAL_RCC_LPTIM1_IS_CLK_ENABLED()) { + return; + } +#endif + + RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct = {0}; + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + +#if MBED_CONF_TARGET_LSE_AVAILABLE + + /* Enable LSE clock */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + + /* Select the LSE clock as LPTIM peripheral clock */ + RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; +#if (TARGET_STM32L0) + RCC_PeriphCLKInitStruct.LptimClockSelection = RCC_LPTIM1CLKSOURCE_LSE; +#else + RCC_PeriphCLKInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE; +#endif + +#else /* MBED_CONF_TARGET_LSE_AVAILABLE */ + + /* Enable LSI clock */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI; + RCC_OscInitStruct.LSIState = RCC_LSI_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; + + /* Select the LSI clock as LPTIM peripheral clock */ + RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; +#if (TARGET_STM32L0) + RCC_PeriphCLKInitStruct.LptimClockSelection = RCC_LPTIM1CLKSOURCE_LSI; +#else + RCC_PeriphCLKInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSI; +#endif + +#endif /* MBED_CONF_TARGET_LSE_AVAILABLE */ + + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + error("HAL_RCC_OscConfig ERROR\n"); + return; + } + + if (HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct) != HAL_OK) { + error("HAL_RCCEx_PeriphCLKConfig ERROR\n"); + return; + } + + __HAL_RCC_LPTIM1_CLK_ENABLE(); + __HAL_RCC_LPTIM1_FORCE_RESET(); + __HAL_RCC_LPTIM1_RELEASE_RESET(); + + /* Initialize the LPTIM peripheral */ + LptimHandle.Instance = LPTIM1; + LptimHandle.State = HAL_LPTIM_STATE_RESET; + LptimHandle.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; + + /* Prescaler impact: + tick period = Prescaler division factor / LPTIM clock + Example with LPTIM clock = 32768 Hz LSE + Prescaler = LPTIM_PRESCALER_DIV1 => lp_TickPeriod_us = 31us => 2s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV2 => lp_TickPeriod_us = 61us => 4s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV4 => lp_TickPeriod_us = 122us => 8s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV8 => lp_TickPeriod_us = 244us => 16s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV16 => lp_TickPeriod_us = 488us => 32s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV32 => lp_TickPeriod_us = 976us => 64s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV64 => lp_TickPeriod_us = 1.9ms => 128s with 16b timer + Prescaler = LPTIM_PRESCALER_DIV128 => lp_TickPeriod_us = 3.9ms => 256s with 16b timer + */ + LptimHandle.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV2; + lp_TickPeriod_us = 2 * 1000000 / RTC_CLOCK; + + LptimHandle.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; + LptimHandle.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; + LptimHandle.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; + LptimHandle.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; +#if (TARGET_STM32L4) + LptimHandle.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO; + LptimHandle.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO; +#endif /* TARGET_STM32L4 */ + + if (HAL_LPTIM_Init(&LptimHandle) != HAL_OK) { + error("HAL_LPTIM_Init ERROR\n"); + return; + } + + NVIC_SetVector(LPTIM1_IRQn, (uint32_t)LPTIM1_IRQHandler); + NVIC_EnableIRQ(LPTIM1_IRQn); + +#if !(TARGET_STM32L4) + /* EXTI lines are not configured by default */ + __HAL_LPTIM_WAKEUPTIMER_EXTI_ENABLE_IT(); + __HAL_LPTIM_WAKEUPTIMER_EXTI_ENABLE_RISING_EDGE(); +#endif + + __HAL_LPTIM_ENABLE_IT(&LptimHandle, LPTIM_IT_ARRM); + __HAL_LPTIM_ENABLE_IT(&LptimHandle, LPTIM_IT_CMPM); + __HAL_LPTIM_ENABLE_IT(&LptimHandle, LPTIM_IT_CMPOK); + HAL_LPTIM_Counter_Start(&LptimHandle, 0xFFFF); +} + +static void LPTIM1_IRQHandler(void) +{ + LptimHandle.Instance = LPTIM1; + + if (lp_Fired) { + lp_Fired = 0; + if (irq_handler) { + irq_handler(); + } + } + + /* Compare match interrupt */ + if (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPM) != RESET) { + if (__HAL_LPTIM_GET_IT_SOURCE(&LptimHandle, LPTIM_IT_CMPM) != RESET) { + /* Clear Compare match flag */ + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_CMPM); + + if (lp_oc_int_part > 0) { + lp_oc_int_part--; + } else { + if (irq_handler) { + irq_handler(); + } + } + } + } + + /* Compare write interrupt */ + if (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK) != RESET) { + if (__HAL_LPTIM_GET_IT_SOURCE(&LptimHandle, LPTIM_IT_CMPOK) != RESET) { + /* Clear Compare write flag */ + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK); + } + } + + /* Autoreload match interrupt */ + if (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_ARRM) != RESET) { + if (__HAL_LPTIM_GET_IT_SOURCE(&LptimHandle, LPTIM_IT_ARRM) != RESET) { + /* Clear Autoreload match flag */ + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_ARRM); + lp_SlaveCounter++; + } + } + +#if !(TARGET_STM32L4) + __HAL_LPTIM_WAKEUPTIMER_EXTI_CLEAR_FLAG(); +#endif +} + + +uint32_t lp_ticker_read_TickCounter(void) +{ + uint16_t cntH_old, cntH, cntL; + + LptimHandle.Instance = LPTIM1; + + /* same algo as us_ticker_read in us_ticker_16b.c */ + do { + cntH_old = lp_SlaveCounter; + if (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_ARRM) == SET) { + cntH_old += 1; + } + cntL = LPTIM1->CNT; + cntH = lp_SlaveCounter; + if (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_ARRM) == SET) { + cntH += 1; + } + } while (cntH_old != cntH); + uint32_t lp_time = (uint32_t)(cntH << 16 | cntL); + return lp_time; +} + +uint32_t lp_ticker_read(void) +{ + lp_ticker_init(); + return lp_ticker_read_TickCounter() * (uint32_t)lp_TickPeriod_us; +} + +void lp_ticker_set_interrupt(timestamp_t timestamp) +{ + // Disable IRQs + core_util_critical_section_enter(); + + uint32_t timestamp_TickCounter = timestamp / (uint32_t)lp_TickPeriod_us; + + LptimHandle.Instance = LPTIM1; + irq_handler = (void (*)(void))lp_ticker_irq_handler; + + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK); + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_CMPM); + __HAL_LPTIM_COMPARE_SET(&LptimHandle, timestamp_TickCounter & 0xFFFF); + + /* CMPOK is set by hardware to inform application that the APB bus write operation to the LPTIM_CMP register has been successfully completed */ + while (__HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPOK) == RESET) { + } + + /* same algo as us_ticker_set_interrupt in us_ticker_16b.c */ + uint32_t current_time_TickCounter = lp_ticker_read_TickCounter(); + uint32_t delta = timestamp_TickCounter - current_time_TickCounter; + lp_oc_int_part = (delta - 1) >> 16; + if ( ((delta - 1) & 0xFFFF) >= 0x8000 && + __HAL_LPTIM_GET_FLAG(&LptimHandle, LPTIM_FLAG_CMPM) == SET ) { + ++lp_oc_int_part; + } + + // Enable IRQs + core_util_critical_section_exit(); +} + +void lp_ticker_fire_interrupt(void) +{ + lp_Fired = 1; + NVIC_SetPendingIRQ(LPTIM1_IRQn); +} + +void lp_ticker_disable_interrupt(void) +{ + LptimHandle.Instance = LPTIM1; + __HAL_LPTIM_DISABLE_IT(&LptimHandle, LPTIM_IT_CMPM); +} + +void lp_ticker_clear_interrupt(void) +{ + LptimHandle.Instance = LPTIM1; + __HAL_LPTIM_CLEAR_FLAG(&LptimHandle, LPTIM_FLAG_CMPM); +} + +#else /* MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM */ + void lp_ticker_init(void) { rtc_init(); @@ -74,4 +326,6 @@ void lp_ticker_clear_interrupt(void) NVIC_ClearPendingIRQ(RTC_WKUP_IRQn); } +#endif /* MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM */ + #endif /* DEVICE_LOWPOWERTIMER */ diff --git a/targets/TARGET_STM/rtc_api.c b/targets/TARGET_STM/rtc_api.c index 0f851a2e52..9e91753c86 100644 --- a/targets/TARGET_STM/rtc_api.c +++ b/targets/TARGET_STM/rtc_api.c @@ -31,15 +31,14 @@ #if DEVICE_RTC #include "rtc_api_hal.h" -#include "mbed_error.h" #include "mbed_mktime.h" static RTC_HandleTypeDef RtcHandle; -#if DEVICE_LOWPOWERTIMER +#if DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM static void (*irq_handler)(void); static void RTC_IRQHandler(void); -#endif +#endif /* DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM */ void rtc_init(void) { @@ -55,7 +54,7 @@ void rtc_init(void) } #if MBED_CONF_TARGET_LSE_AVAILABLE - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured! RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSIState = RCC_LSI_OFF; @@ -78,7 +77,7 @@ void rtc_init(void) __HAL_RCC_BACKUPRESET_RELEASE(); // Enable LSI clock - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Mandatory, otherwise the PLL is reconfigured! RCC_OscInitStruct.LSEState = RCC_LSE_OFF; RCC_OscInitStruct.LSIState = RCC_LSI_ON; @@ -108,7 +107,7 @@ void rtc_init(void) RtcHandle.Init.HourFormat = RTC_HOURFORMAT_24; /* PREDIV_A : 7-bit asynchronous prescaler */ -#if DEVICE_LOWPOWERTIMER +#if DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM /* PREDIV_A is set to a small value to improve the SubSeconds resolution */ /* with a 32768Hz clock, PREDIV_A=7 gives a precision of 244us */ RtcHandle.Init.AsynchPrediv = 7; @@ -294,7 +293,7 @@ void rtc_synchronize(void) } } -#if DEVICE_LOWPOWERTIMER +#if DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM static void RTC_IRQHandler(void) { @@ -342,7 +341,7 @@ void rtc_set_wake_up_timer(uint32_t delta) NVIC_EnableIRQ(RTC_WKUP_IRQn); RtcHandle.Instance = RTC; - if (HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, 0xFFFF & WakeUpCounter, WakeUpClock[DivIndex-1]) != HAL_OK) { + if (HAL_RTCEx_SetWakeUpTimer_IT(&RtcHandle, 0xFFFF & WakeUpCounter, WakeUpClock[DivIndex - 1]) != HAL_OK) { error("rtc_set_wake_up_timer init error (%d)\n", DivIndex); } } @@ -353,6 +352,6 @@ void rtc_deactivate_wake_up_timer(void) HAL_RTCEx_DeactivateWakeUpTimer(&RtcHandle); } -#endif /* DEVICE_LOWPOWERTIMER */ +#endif /* DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM */ #endif /* DEVICE_RTC */ diff --git a/targets/TARGET_STM/rtc_api_hal.h b/targets/TARGET_STM/rtc_api_hal.h index ca948ca36b..5013b3bbeb 100644 --- a/targets/TARGET_STM/rtc_api_hal.h +++ b/targets/TARGET_STM/rtc_api_hal.h @@ -35,6 +35,11 @@ #include "rtc_api.h" #include "ticker_api.h" #include "lp_ticker_api.h" +#include "us_ticker_api.h" +#include "hal_tick.h" +#include "mbed_critical.h" +#include "mbed_error.h" +#include "mbed_debug.h" #ifdef __cplusplus extern "C" { diff --git a/targets/TARGET_STM/sleep.c b/targets/TARGET_STM/sleep.c index fb232ec8b7..b4e36c892d 100644 --- a/targets/TARGET_STM/sleep.c +++ b/targets/TARGET_STM/sleep.c @@ -29,12 +29,8 @@ */ #if DEVICE_SLEEP -#include "cmsis.h" -#include "us_ticker_api.h" #include "sleep_api.h" #include "rtc_api_hal.h" -#include "hal_tick.h" -#include "mbed_critical.h" extern void HAL_SuspendTick(void); extern void HAL_ResumeTick(void); diff --git a/targets/targets.json b/targets/targets.json index e75f1f59fb..699c928905 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1025,6 +1025,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0744"], @@ -1084,6 +1088,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0743"], @@ -1244,6 +1252,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "macros_add": ["USBHOST_OTHER"], @@ -1268,6 +1280,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "macros_add": ["TRANSACTION_QUEUE_SIZE_SPI=2", "USBHOST_OTHER", "MBEDTLS_CONFIG_HW_SUPPORT"], @@ -1292,6 +1308,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "supported_form_factors": ["ARDUINO"], @@ -1314,6 +1334,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0780"], @@ -1333,6 +1357,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0790"], @@ -1351,6 +1379,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0715"], @@ -1369,6 +1401,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0760"], @@ -1403,6 +1439,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0770"], @@ -1421,9 +1461,13 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, - "detect_code": ["0770"], + "detect_code": ["0779"], "device_has_add": ["ANALOGOUT", "LOWPOWERTIMER", "SERIAL_FC", "SERIAL_ASYNCH", "CAN", "TRNG", "FLASH"], "release_versions": ["2", "5"], "device_name": "STM32L433RC", @@ -1439,6 +1483,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0765"], @@ -1476,6 +1524,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0827"], @@ -1614,6 +1666,11 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSE_EXTC|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 + } }, "overrides": {"lse_available": 0}, @@ -1632,6 +1689,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0833"], @@ -1653,6 +1714,10 @@ "usb_speed": { "help": "Select the USB speed/connector (0=FullSpeed, 1=HighSpeed)", "value": "1" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0815"], @@ -1672,6 +1737,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL | USE_PLL_HSI", "value": "USE_PLL_HSE_XTAL|USE_PLL_HSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0817"], @@ -1690,6 +1759,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "supported_form_factors": ["ARDUINO"], @@ -1709,6 +1782,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0820"], @@ -3538,6 +3615,10 @@ "help": "Mask value : USE_PLL_HSE_EXTC (need HW patch) | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI | USE_PLL_MSI", "value": "USE_PLL_MSI", "macro_name": "CLOCK_SOURCE" + }, + "lowpowertimer_lptim": { + "help": "This target supports LPTIM. Set value 1 to use LPTIM for LOWPOWERTIMER, or 0 to use RTC wakeup timer", + "value": 1 } }, "detect_code": ["0823"], From 44bf90b7164b1f990d405005bc0b25ce17c6abd6 Mon Sep 17 00:00:00 2001 From: Tero Heinonen Date: Tue, 19 Dec 2017 15:41:59 +0200 Subject: [PATCH 019/133] mesh-api documentation removed All documentation is now in Handbook --- .../FEATURE_NANOSTACK/mbed-mesh-api/README.md | 141 ------------------ 1 file changed, 141 deletions(-) delete mode 100644 features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/README.md diff --git a/features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/README.md b/features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/README.md deleted file mode 100644 index eb50e73fb9..0000000000 --- a/features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/README.md +++ /dev/null @@ -1,141 +0,0 @@ -# mbed mesh API - -ARM mbed mesh API allows the client to use the IPv6 mesh network. - -The client can use the `LoWPANNDInterface` or `ThreadInterface` object for connecting to the mesh network and when successfully connected, the client can create a socket by using the [mbed C++ socket API](https://developer.mbed.org/teams/NetworkSocketAPI/code/NetworkSocketAPI/docs/tip/) to start communication with a remote peer. - -For ethernet `NanostackEthernetInterface` is provided. - -## Supported mesh networking modes - -Currently, 6LoWPAN-ND (neighbour discovery) and Thread bootstrap modes are supported. - -## Module Configuration - -This module supports static configuration via **mbed configuration system** by using the `mbed_app.json` file. The application needs to create the configuration file if it wants to use other than default settings. - -An example of the configuration file: - -``` -{ - "target_overrides": { - "*": { - "target.features_add": ["IPV6"], - "mbed-mesh-api.6lowpan-nd-channel": 12, - "mbed-mesh-api.6lowpan-nd-channel-mask": "(1<<12)", - "mbed-mesh-api.heap-size": 10000 - } - } -} -``` - -### Configurable parameters in section mbed-mesh-api - -| Parameter name | Value | Description | -| --------------- | ------------- | ----------- | -| heap-size | number [0-0xfffe] | Nanostack's internal heap size | -| use-malloc-for-heap | `false` or `true` | Use `malloc()` for reserving the internal heap. Default: `false` | - -### Thread related configuration parameters - -| Parameter name | Value | Description | -| --------------- | ------------- | ----------- | -| thread-pskd | string [6-255 chars] | Human-scaled commissioning credentials. | -| thread-use-static-link-config | boolean | True: Use the below link config, False: Use commissioning, ignore the below link config. | -| thread-device-type | enum from mesh_device_type_t | Supported device operating modes: MESH_DEVICE_TYPE_THREAD_ROUTER, MESH_DEVICE_TYPE_THREAD_SLEEPY_END_DEVICE, MESH_DEVICE_TYPE_THREAD_MINIMAL_END_DEVICE | -| thread-config-channel-mask | number [0-0x07fff800] | Channel mask, 0x07fff800 scans all channels. | -| thread-config-channel-page | number [0, 2]| Channel page, 0 for 2,4 GHz and 2 for sub-GHz radios. | -| thread-config-channel | number [0-27] | RF channel to use. | -| thread-config-panid | number [0-0xFFFF] | Network identifier. | -| thread-config-network-name | string [1-16] | -| thread-config-commissioning-dataset-timestamp | [0-0xFFFFFFFFFFFFFFFF] | [48 bit timestamp seconds]-[15 bit timestamp ticks]-[U bit] | -|thread-config-extended-panid | byte array [8] | Extended PAN ID | -| thread-master-key | byte array [16]| Network master key. | -| thread-config-ml-prefix | byte array [8] | Mesh local prefix. | -| thread-config-pskc | byte array [16] | Pre-Shared Key for the Commissioner. | -| thread-security-policy | number [0-0xFF] | Commissioning security policy bits | - -### 6LoWPAN related configuration parameters - -| Parameter name | Type | Description | -| --------------- | ---------| ----------- | -| 6lowpan-nd-channel-mask | number [0-0x07fff800] | Channel mask, bit-mask of channels to use | -| 6lowpan-nd-channel-page | number [0, 2] | 0 for 2,4 GHz and 2 for sub-GHz radios | -| 6lowpan-nd-channel | number [0-27] | RF channel to use when `channel_mask` is not defined | -| 6lowpan-nd-panid-filter | number [0-0xffff] | Beacon PAN ID filter, 0xffff means no filtering | -| 6lowpan-nd-security-mode | "NONE" or "PSK" | To use either no security, or Pre shared network key | -| 6lowpan-nd-psk-key-id | number | PSK key id when PSK is enabled | -| 6lowpan-nd-psk-key | byte array [16] | Pre shared network key | -| 6lowpan-nd-sec-level | number [1-7] | Network security level. Use default `5` | -| 6lowpan-nd-device-type | "NET_6LOWPAN_ROUTER" or "NET_6LOWPAN_HOST" | Device mode. Router is routing packets from other device, creating a mesh network. | - -## Usage notes - -This module should not be used directly by the applications. The applications should use the `LoWPANNDInterface`, `ThreadInterface` or `NanostackEthernetInterface` directly. - -When using Ethernet interface, there is no configuration options available. It is using dynamic mode to learn the IPv6 prefix from the network. No static configuration is supported. - -### Network connection states - -After the initialization, the network state is `MESH_DISCONNECTED`. After a successful connection, the state changes to `MESH_CONNECTED` and when disconnected from the network the state is changed back to `MESH_DISCONNECTED`. - -In case of connection errors, the state is changed to some of the connection error states. In an error state, there is no need to make a `disconnect` request and the client is allowed to attempt connecting again. - -## Getting started - -See the example application [mbed-os-example-mesh-minimal](https://github.com/ARMmbed/mbed-os-example-mesh-minimal) for usage. - -## Usage example for 6LoWPAN ND mode - -Create a network interface and driver objects. - -``` -LoWPANNDInterface mesh; -NanostackRfPhyNcs36510 rf_phy; -``` - -Initialize interface with given PHY driver. - -``` -mesh.initialize(&rf_phy); -``` - -Then connect to network: - -``` - if (mesh.connect()) { - printf("Connection failed!\r\n"); - return -1; - } - - printf("connected. IP = %s\r\n", mesh.get_ip_address()); -``` - -## Usage example for 6LoWPAN Thread mode - -Basically the same as for ND, but the network interface uses different class: - -``` -ThreadInterface mesh; -mesh.connect(); -``` - -## Usage example with Ethernet - -API is still the same, you just need to provide a driver that implements `NanostackEthernetPhy` API. - -``` -NanostackEthernetInterface eth; -NanostackEthernetPhyK64F phy; - -int main() { - eth.initialize(&phy); - - if (eth.connect()) { - printf("Connection failed!\r\n"); - return -1; - } - - printf("connected. IP = %s\r\n", eth.get_ip_address()); -} -``` From 544d6b5d888c075505dfcf0292010f3e2a85369d Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Thu, 30 Nov 2017 10:03:20 -0600 Subject: [PATCH 020/133] Clarify TCPSocket::recv() and UDPSocket::recvfrom() documentation. --- features/netsocket/TCPSocket.h | 4 +++- features/netsocket/UDPSocket.h | 15 ++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/features/netsocket/TCPSocket.h b/features/netsocket/TCPSocket.h index 7b12ba3a9e..39c547d7af 100644 --- a/features/netsocket/TCPSocket.h +++ b/features/netsocket/TCPSocket.h @@ -111,7 +111,9 @@ public: * @param data Destination buffer for data received from the host * @param size Size of the buffer in bytes * @return Number of received bytes on success, negative error - * code on failure + * code on failure. If no data is available to be received + * and the peer has performed an orderly shutdown, + * recv() returns 0. */ nsapi_size_or_error_t recv(void *data, nsapi_size_t size); diff --git a/features/netsocket/UDPSocket.h b/features/netsocket/UDPSocket.h index 02f39e9ed6..a4570fa80e 100644 --- a/features/netsocket/UDPSocket.h +++ b/features/netsocket/UDPSocket.h @@ -94,17 +94,18 @@ public: nsapi_size_or_error_t sendto(const SocketAddress &address, const void *data, nsapi_size_t size); - /** Receive a packet over a UDP socket + /** Receive a datagram over a UDP socket * - * Receives data and stores the source address in address if address - * is not NULL. Returns the number of bytes received into the buffer. + * Receives a datagram and stores the source address in address if address + * is not NULL. Returns the number of bytes written into the buffer. If the + * datagram is larger than the buffer, the excess data is silently discarded. * - * By default, recvfrom blocks until data is sent. If socket is set to - * non-blocking or times out, NSAPI_ERROR_WOULD_BLOCK is returned - * immediately. + * By default, recvfrom blocks until a datagram is received. If socket is set to + * non-blocking or times out with no datagram, NSAPI_ERROR_WOULD_BLOCK + * is returned. * * @param address Destination for the source address or NULL - * @param data Destination buffer for data received from the host + * @param data Destination buffer for datagram received from the host * @param size Size of the buffer in bytes * @return Number of received bytes on success, negative error * code on failure From ae5a5862f184891fcbe2fdd1d3a2d0bf67fd2e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tero=20J=C3=A4=C3=A4sk=C3=B6?= Date: Wed, 8 Nov 2017 13:12:00 +0200 Subject: [PATCH 021/133] platform: make C++ allocation wrappers log the correct caller address The C++ "operator new" and "operator delete" (and their array variants) were logging the the caller address wrong. In practice if one used "operator new", the logged caller address pointed to mbed_retarget.cpp, not to the client. Fix this by exposing the alloc wrappers to the the retarget. Note: this fixes only the ARMCC variants, as the GCC ones have different different API and implementation. --- platform/mbed_alloc_wrappers.cpp | 16 +++++++++-- platform/mbed_retarget.cpp | 49 ++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/platform/mbed_alloc_wrappers.cpp b/platform/mbed_alloc_wrappers.cpp index accfe26b5d..eeb78411ba 100644 --- a/platform/mbed_alloc_wrappers.cpp +++ b/platform/mbed_alloc_wrappers.cpp @@ -245,9 +245,16 @@ extern "C" { void *SUPER_REALLOC(void *ptr, size_t size); void *SUPER_CALLOC(size_t nmemb, size_t size); void SUPER_FREE(void *ptr); + void *malloc_wrapper(size_t size, void* caller); + void free_wrapper(void *ptr, void* caller); } + extern "C" void* SUB_MALLOC(size_t size) { + return malloc_wrapper(size, MBED_CALLER_ADDR()); +} + +extern "C" void* malloc_wrapper(size_t size, void* caller) { void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -272,12 +279,13 @@ extern "C" void* SUB_MALLOC(size_t size) { ptr = SUPER_MALLOC(size); #endif // #ifdef MBED_HEAP_STATS_ENABLED #ifdef MBED_MEM_TRACING_ENABLED - mbed_mem_trace_malloc(ptr, size, MBED_CALLER_ADDR()); + mbed_mem_trace_malloc(ptr, size, caller); mbed_mem_trace_unlock(); #endif // #ifdef MBED_MEM_TRACING_ENABLED return ptr; } + extern "C" void* SUB_REALLOC(void *ptr, size_t size) { void *new_ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED @@ -337,6 +345,10 @@ extern "C" void *SUB_CALLOC(size_t nmemb, size_t size) { } extern "C" void SUB_FREE(void *ptr) { + free_wrapper(ptr, MBED_CALLER_ADDR()); +} + +extern "C" void free_wrapper(void *ptr, void* caller) { #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif @@ -354,7 +366,7 @@ extern "C" void SUB_FREE(void *ptr) { SUPER_FREE(ptr); #endif // #ifdef MBED_HEAP_STATS_ENABLED #ifdef MBED_MEM_TRACING_ENABLED - mbed_mem_trace_free(ptr, MBED_CALLER_ADDR()); + mbed_mem_trace_free(ptr, caller); mbed_mem_trace_unlock(); #endif // #ifdef MBED_MEM_TRACING_ENABLED } diff --git a/platform/mbed_retarget.cpp b/platform/mbed_retarget.cpp index 2be38c6fa1..11fcfa6989 100644 --- a/platform/mbed_retarget.cpp +++ b/platform/mbed_retarget.cpp @@ -1022,6 +1022,53 @@ extern "C" void __cxa_guard_abort(int *guard_object_p) #endif +#if defined(MBED_MEM_TRACING_ENABLED) && (defined(__CC_ARM) || defined(__ICCARM__)) + +// If the memory tracing is enabled, the wrappers in mbed_alloc_wrappers.cpp +// provide the implementation for these. Note: this needs to use the wrappers +// instead of malloc()/free() as the caller address would point to wrappers, +// not the caller of "new" or "delete". +extern "C" void* malloc_wrapper(size_t size, const void* caller); +extern "C" void free_wrapper(void *ptr, const void* caller); + +void *operator new(std::size_t count) +{ + void *buffer = malloc_wrapper(count, MBED_CALLER_ADDR()); + if (NULL == buffer) { + error("Operator new out of memory\r\n"); + } + return buffer; +} + +void *operator new[](std::size_t count) +{ + void *buffer = malloc_wrapper(count, MBED_CALLER_ADDR()); + if (NULL == buffer) { + error("Operator new[] out of memory\r\n"); + } + return buffer; +} + +void *operator new(std::size_t count, const std::nothrow_t& tag) +{ + return malloc_wrapper(count, MBED_CALLER_ADDR()); +} + +void *operator new[](std::size_t count, const std::nothrow_t& tag) +{ + return malloc_wrapper(count, MBED_CALLER_ADDR()); +} + +void operator delete(void *ptr) +{ + free_wrapper(ptr, MBED_CALLER_ADDR()); +} +void operator delete[](void *ptr) +{ + free_wrapper(ptr, MBED_CALLER_ADDR()); +} + +#else void *operator new(std::size_t count) { void *buffer = malloc(count); @@ -1059,6 +1106,8 @@ void operator delete[](void *ptr) free(ptr); } +#endif + /* @brief standard c library clock() function. * * This function returns the number of clock ticks elapsed since the start of the program. From e86a2b090f5113417fa17a3d433e183328ae004c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tero=20J=C3=A4=C3=A4sk=C3=B6?= Date: Fri, 24 Nov 2017 16:08:28 +0200 Subject: [PATCH 022/133] platform: Fix C++ allocation wrappers for GCC compilation Fix the caller address logging on the GCC compilation too. Previously the code logged the caller address as C++ wrapper, not the actual caller of the C++ operator new or delete. --- platform/mbed_alloc_wrappers.cpp | 14 ++++++++-- platform/mbed_retarget.cpp | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/platform/mbed_alloc_wrappers.cpp b/platform/mbed_alloc_wrappers.cpp index eeb78411ba..58f153c70d 100644 --- a/platform/mbed_alloc_wrappers.cpp +++ b/platform/mbed_alloc_wrappers.cpp @@ -81,12 +81,18 @@ extern "C" { void * __real__realloc_r(struct _reent * r, void * ptr, size_t size); void __real__free_r(struct _reent * r, void * ptr); void* __real__calloc_r(struct _reent * r, size_t nmemb, size_t size); + void* malloc_wrapper(struct _reent * r, size_t size, void * caller); + void free_wrapper(struct _reent * r, void * ptr, void* caller); } // TODO: memory tracing doesn't work with uVisor enabled. #if !defined(FEATURE_UVISOR) extern "C" void * __wrap__malloc_r(struct _reent * r, size_t size) { + return malloc_wrapper(r, size, MBED_CALLER_ADDR()); +} + +extern "C" void * malloc_wrapper(struct _reent * r, size_t size, void * caller) { void *ptr = NULL; #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); @@ -111,7 +117,7 @@ extern "C" void * __wrap__malloc_r(struct _reent * r, size_t size) { ptr = __real__malloc_r(r, size); #endif // #ifdef MBED_HEAP_STATS_ENABLED #ifdef MBED_MEM_TRACING_ENABLED - mbed_mem_trace_malloc(ptr, size, MBED_CALLER_ADDR()); + mbed_mem_trace_malloc(ptr, size, caller); mbed_mem_trace_unlock(); #endif // #ifdef MBED_MEM_TRACING_ENABLED return ptr; @@ -160,6 +166,10 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size) } extern "C" void __wrap__free_r(struct _reent * r, void * ptr) { + free_wrapper(r, ptr, MBED_CALLER_ADDR()); +} + +extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller) { #ifdef MBED_MEM_TRACING_ENABLED mbed_mem_trace_lock(); #endif @@ -177,7 +187,7 @@ extern "C" void __wrap__free_r(struct _reent * r, void * ptr) { __real__free_r(r, ptr); #endif // #ifdef MBED_HEAP_STATS_ENABLED #ifdef MBED_MEM_TRACING_ENABLED - mbed_mem_trace_free(ptr, MBED_CALLER_ADDR()); + mbed_mem_trace_free(ptr, caller); mbed_mem_trace_unlock(); #endif // #ifdef MBED_MEM_TRACING_ENABLED } diff --git a/platform/mbed_retarget.cpp b/platform/mbed_retarget.cpp index 11fcfa6989..8d3dbe3936 100644 --- a/platform/mbed_retarget.cpp +++ b/platform/mbed_retarget.cpp @@ -1068,7 +1068,53 @@ void operator delete[](void *ptr) free_wrapper(ptr, MBED_CALLER_ADDR()); } +#elif defined(MBED_MEM_TRACING_ENABLED) && defined(__GNUC__) + +#include + +extern "C" void* malloc_wrapper(struct _reent * r, size_t size, void * caller); +extern "C" void free_wrapper(struct _reent * r, void * ptr, void * caller); + +void *operator new(std::size_t count) +{ + void *buffer = malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); + if (NULL == buffer) { + error("Operator new out of memory\r\n"); + } + return buffer; +} + +void *operator new[](std::size_t count) +{ + void *buffer = malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); + if (NULL == buffer) { + error("Operator new[] out of memory\r\n"); + } + return buffer; +} + +void *operator new(std::size_t count, const std::nothrow_t& tag) +{ + return malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); +} + +void *operator new[](std::size_t count, const std::nothrow_t& tag) +{ + return malloc_wrapper(_REENT, count, MBED_CALLER_ADDR()); +} + +void operator delete(void *ptr) +{ + free_wrapper(_REENT, ptr, MBED_CALLER_ADDR()); +} + +void operator delete[](void *ptr) +{ + free_wrapper(_REENT, ptr, MBED_CALLER_ADDR()); +} + #else + void *operator new(std::size_t count) { void *buffer = malloc(count); From 6ca58de840e5bdc1e556d2884c6ae963af88b999 Mon Sep 17 00:00:00 2001 From: Daniel Schuler Date: Mon, 18 Dec 2017 18:19:31 -0800 Subject: [PATCH 023/133] Add presentation format descriptor support for NRF52 --- .../source/btle/custom/custom_helper.cpp | 7 +++++ .../source/btle/custom/custom_helper.h | 2 ++ .../TARGET_NRF5/source/nRF5xGattServer.cpp | 26 +++++++++++++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.cpp b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.cpp index 2a8e600c0a..bc46d3d58d 100644 --- a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.cpp +++ b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.cpp @@ -210,6 +210,8 @@ error_t custom_add_in_characteristic(uint16_t service_handle, bool has_variable_len, const uint8_t *userDescriptionDescriptorValuePtr, uint16_t userDescriptionDescriptorValueLen, + const uint8_t *presentationFormatDescriptorValuePtr, + uint16_t presentationFormatDescriptorValueLen, bool readAuthorization, bool writeAuthorization, ble_gatts_char_handles_t *p_char_handle) @@ -238,6 +240,11 @@ error_t custom_add_in_characteristic(uint16_t service_handle, char_md.char_user_desc_max_size = userDescriptionDescriptorValueLen; char_md.char_user_desc_size = userDescriptionDescriptorValueLen; } + if ((presentationFormatDescriptorValueLen > 0) && (presentationFormatDescriptorValuePtr != NULL)) { + ASSERT_TRUE( sizeof(ble_gatts_char_pf_t) == sizeof(GattCharacteristic::PresentationFormat_t), ERROR_INVALID_PARAM ); + ASSERT_TRUE( presentationFormatDescriptorValueLen == sizeof(GattCharacteristic::PresentationFormat_t), ERROR_INVALID_PARAM ); + char_md.p_char_pf = const_cast(reinterpret_cast(presentationFormatDescriptorValuePtr)); + } /* Attribute declaration */ ble_gatts_attr_md_t attr_md = {0}; diff --git a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.h b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.h index af47fb9852..93480b873b 100644 --- a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.h +++ b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/btle/custom/custom_helper.h @@ -52,6 +52,8 @@ error_t custom_add_in_characteristic(uint16_t service_handle, bool has_variable_len, const uint8_t *userDescriptionDescriptorValuePtr, uint16_t userDescriptionDescriptorValueLen, + const uint8_t *presentationFormatDescriptorValuePtr, + uint16_t presentationFormatDescriptorValueLen, bool readAuthorization, bool writeAuthorization, ble_gatts_char_handles_t *p_char_handle); diff --git a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/nRF5xGattServer.cpp b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/nRF5xGattServer.cpp index 5ab02d702b..8bcdd7d07a 100644 --- a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/nRF5xGattServer.cpp +++ b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_NRF5/source/nRF5xGattServer.cpp @@ -131,6 +131,7 @@ ble_error_t nRF5xGattServer::addService(GattService &service) } GattCharacteristic *p_char = service.getCharacteristic(i); GattAttribute *p_description_descriptor = NULL; + GattAttribute *p_presentation_format_descriptor = NULL; /* Skip any incompletely defined, read-only characteristics. */ if ((p_char->getValueAttribute().getValuePtr() == NULL) && @@ -141,11 +142,13 @@ ble_error_t nRF5xGattServer::addService(GattService &service) nordicUUID = custom_convert_to_nordic_uuid(p_char->getValueAttribute().getUUID()); - /* The user-description descriptor is a special case which needs to be - * handled at the time of adding the characteristic. The following block - * is meant to discover its presence. */ + /* The user-description and presentation-format descriptors are special cases + * that need to be handled at the time of adding each characteristic. The + * following block is meant to discover their presence. */ const uint8_t *userDescriptionDescriptorValuePtr = NULL; uint16_t userDescriptionDescriptorValueLen = 0; + const uint8_t *presentationFormatDescriptorValuePtr = NULL; + uint16_t presentationFormatDescriptorValueLen = 0; for (uint8_t j = 0; j < p_char->getDescriptorCount(); j++) { GattAttribute *p_desc = p_char->getDescriptor(j); if (p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_USER_DESC) { @@ -153,6 +156,11 @@ ble_error_t nRF5xGattServer::addService(GattService &service) userDescriptionDescriptorValuePtr = p_desc->getValuePtr(); userDescriptionDescriptorValueLen = p_desc->getLength(); } + if (p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT) { + p_presentation_format_descriptor = p_desc; + presentationFormatDescriptorValuePtr = p_desc->getValuePtr(); + presentationFormatDescriptorValueLen = p_desc->getLength(); + } } ASSERT_TRUE ( ERROR_NONE == @@ -166,6 +174,8 @@ ble_error_t nRF5xGattServer::addService(GattService &service) p_char->getValueAttribute().hasVariableLength(), userDescriptionDescriptorValuePtr, userDescriptionDescriptorValueLen, + presentationFormatDescriptorValuePtr, + presentationFormatDescriptorValueLen, p_char->isReadAuthorizationEnabled(), p_char->isWriteAuthorizationEnabled(), &nrfCharacteristicHandles[characteristicCount]), @@ -179,6 +189,10 @@ ble_error_t nRF5xGattServer::addService(GattService &service) nrfCharacteristicHandles[characteristicCount].user_desc_handle ); } + if (p_presentation_format_descriptor) { + // The handle is not available from the SoftDevice + p_presentation_format_descriptor->setHandle(GattAttribute::INVALID_HANDLE); + } characteristicCount++; /* Add optional descriptors if any */ @@ -188,8 +202,10 @@ ble_error_t nRF5xGattServer::addService(GattService &service) } GattAttribute *p_desc = p_char->getDescriptor(j); - /* skip the user-description-descriptor here; this has already been handled when adding the characteristic (above). */ - if (p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_USER_DESC) { + /* skip the user-description or presentation-format descriptor here; + * they have already been handled when adding the characteristic (above). */ + if (p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_USER_DESC + || p_desc->getUUID() == BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT) { continue; } From 3ca6c55feb306964a7141fe5dd112ce8e6a4d65b Mon Sep 17 00:00:00 2001 From: Steven Cooreman Date: Mon, 15 Jan 2018 16:13:15 +0100 Subject: [PATCH 024/133] Allow overriding of DCDC settings per target Allow custom targets to override the DCDC settings by defining EMU_DCDCINIT_STK_DEFAULT to target-specific initialization values. --- .../TARGET_EFM32PG_STK3401/device_peripherals.h | 5 +++++ .../TARGET_EFM32PG12_STK3402/device_peripherals.h | 5 +++++ .../TARGET_EFR32MG1_BRD4150/device_peripherals.h | 5 +++++ .../TARGET_TB_SENSE_1/device_peripherals.h | 5 +++++ .../TARGET_TB_SENSE_12/device_peripherals.h | 5 +++++ .../TARGET_EFM32/common/mbed_overrides.c | 8 ++++++-- 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG/TARGET_EFM32PG_STK3401/device_peripherals.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG/TARGET_EFM32PG_STK3401/device_peripherals.h index 3147299bbd..05bad32dc9 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG/TARGET_EFM32PG_STK3401/device_peripherals.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG/TARGET_EFM32PG_STK3401/device_peripherals.h @@ -54,4 +54,9 @@ cmuOscMode_Crystal, \ } #endif + +/* DCDC settings */ +#if !defined(EMU_DCDCINIT_STK_DEFAULT) +#define EMU_DCDCINIT_STK_DEFAULT EMU_DCDCINIT_DEFAULT +#endif #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG12/TARGET_EFM32PG12_STK3402/device_peripherals.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG12/TARGET_EFM32PG12_STK3402/device_peripherals.h index d9cd0fef8a..d3f9b7d58a 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG12/TARGET_EFM32PG12_STK3402/device_peripherals.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32PG12/TARGET_EFM32PG12_STK3402/device_peripherals.h @@ -54,4 +54,9 @@ cmuOscMode_Crystal, \ } #endif + +/* DCDC settings */ +#if !defined(EMU_DCDCINIT_STK_DEFAULT) +#define EMU_DCDCINIT_STK_DEFAULT EMU_DCDCINIT_DEFAULT +#endif #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_EFR32MG1_BRD4150/device_peripherals.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_EFR32MG1_BRD4150/device_peripherals.h index 13cbb9af1a..1a1c9c9f83 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_EFR32MG1_BRD4150/device_peripherals.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_EFR32MG1_BRD4150/device_peripherals.h @@ -54,4 +54,9 @@ cmuOscMode_Crystal, \ } #endif + +/* DCDC settings */ +#if !defined(EMU_DCDCINIT_STK_DEFAULT) +#define EMU_DCDCINIT_STK_DEFAULT EMU_DCDCINIT_DEFAULT +#endif #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_TB_SENSE_1/device_peripherals.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_TB_SENSE_1/device_peripherals.h index 976dce7aba..ccac629438 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_TB_SENSE_1/device_peripherals.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG1/TARGET_TB_SENSE_1/device_peripherals.h @@ -54,4 +54,9 @@ cmuOscMode_Crystal, \ } #endif + +/* DCDC settings */ +#if !defined(EMU_DCDCINIT_STK_DEFAULT) +#define EMU_DCDCINIT_STK_DEFAULT EMU_DCDCINIT_DEFAULT +#endif #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG12/TARGET_TB_SENSE_12/device_peripherals.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG12/TARGET_TB_SENSE_12/device_peripherals.h index 976dce7aba..ccac629438 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG12/TARGET_TB_SENSE_12/device_peripherals.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFR32MG12/TARGET_TB_SENSE_12/device_peripherals.h @@ -54,4 +54,9 @@ cmuOscMode_Crystal, \ } #endif + +/* DCDC settings */ +#if !defined(EMU_DCDCINIT_STK_DEFAULT) +#define EMU_DCDCINIT_STK_DEFAULT EMU_DCDCINIT_DEFAULT +#endif #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c index e3ded3571f..bc8f479a6c 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/mbed_overrides.c @@ -39,9 +39,13 @@ void mbed_sdk_init() CHIP_Init(); #if defined(_SILICON_LABS_32B_SERIES_1) - EMU_DCDCInit_TypeDef dcdcInit = EMU_DCDCINIT_DEFAULT; +#if defined(EMU_NO_DCDC) + EMU_DCDCPowerOff(); +#else + EMU_DCDCInit_TypeDef dcdcInit = EMU_DCDCINIT_STK_DEFAULT; EMU_DCDCInit(&dcdcInit); - +#endif + #if (CORE_CLOCK_SOURCE == HFXO) // Only init HFXO if not already done (e.g. by bootloader) if (CMU_ClockSelectGet(cmuClock_HF) != cmuSelect_HFXO) { From 388041afeb9e091900703e17ce01e11c0b9df24c Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Fri, 12 Jan 2018 14:44:44 -0600 Subject: [PATCH 025/133] littlefs: Fix block addr overflow deepikabhavnani did the hard work in tracking this issue down. Block addresses are not cast to the correct type until after multiplying to convert to byte addresses. This results in an overflow when the storage is larger than 4 GB. --- features/filesystem/littlefs/LittleFileSystem.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/features/filesystem/littlefs/LittleFileSystem.cpp b/features/filesystem/littlefs/LittleFileSystem.cpp index 56d799b35b..93b1b920f2 100644 --- a/features/filesystem/littlefs/LittleFileSystem.cpp +++ b/features/filesystem/littlefs/LittleFileSystem.cpp @@ -85,19 +85,19 @@ static int lfs_totype(int type) static int lfs_bd_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) { BlockDevice *bd = (BlockDevice *)c->context; - return bd->read(buffer, block*c->block_size + off, size); + return bd->read(buffer, (bd_addr_t)block*c->block_size + off, size); } static int lfs_bd_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) { BlockDevice *bd = (BlockDevice *)c->context; - return bd->program(buffer, block*c->block_size + off, size); + return bd->program(buffer, (bd_addr_t)block*c->block_size + off, size); } static int lfs_bd_erase(const struct lfs_config *c, lfs_block_t block) { BlockDevice *bd = (BlockDevice *)c->context; - return bd->erase(block*c->block_size, c->block_size); + return bd->erase((bd_addr_t)block*c->block_size, c->block_size); } static int lfs_bd_sync(const struct lfs_config *c) From 54bd620b6f631aca7105452dd70087d1ec9d786b Mon Sep 17 00:00:00 2001 From: Steven Cooreman Date: Mon, 15 Jan 2018 15:56:55 +0100 Subject: [PATCH 026/133] Fix for #5840 This commit fixes #5840. Fix verified by running mbed_hal-lp_ticker test suite with preloaded RTC counter such that it wrapped in the middle of the suite. Also removes explicit sleep blocking from the us_ticker implementation, since sleep blocking for us tickers is done at mbed HAL level now. This was causing one of the lp_ticker tests to fail. --- .../TARGET_EFM32/common/clocking.h | 15 +- .../TARGET_EFM32/lp_ticker.c | 141 +++++------------ .../TARGET_EFM32/rtc_api.c | 145 ++++++++++++++---- .../TARGET_EFM32/rtc_api_HAL.h | 22 ++- .../TARGET_EFM32/us_ticker.c | 10 -- 5 files changed, 177 insertions(+), 156 deletions(-) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/clocking.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/clocking.h index 022148984c..b9ad628edc 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/clocking.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/common/clocking.h @@ -24,6 +24,8 @@ #ifndef MBED_CLOCKING_H #define MBED_CLOCKING_H +#include "em_cmu.h" + /* Clock definitions */ #define LFXO 0 #define HFXO 1 @@ -51,8 +53,8 @@ #ifndef CORE_CLOCK_SOURCE #define CORE_CLOCK_SOURCE HFRCO #if defined(_CMU_HFRCOCTRL_BAND_MASK) -#define HFRCO_FREQUENCY_ENUM _CMU_HFRCOCTRL_BAND_21MHZ -#define HFRCO_FREQUENCY 21000000 +#define HFRCO_FREQUENCY_ENUM _CMU_HFRCOCTRL_BAND_21MHZ +#define HFRCO_FREQUENCY 21000000 #elif defined(_CMU_HFRCOCTRL_FREQRANGE_MASK) #define HFRCO_FREQUENCY_ENUM cmuHFRCOFreq_32M0Hz #define HFRCO_FREQUENCY 32000000 @@ -103,4 +105,13 @@ # endif #endif +/* Adjust this to change speed of RTC and LP ticker ticks */ +#define RTC_CLOCKDIV cmuClkDiv_8 +/* Adjust this to match RTC_CLOCKDIV as integer value */ +#define RTC_CLOCKDIV_INT 8U +/* Adjust this to match RTC_CLOCKDIV as shift for 1 second worth of ticks. + * E.g. with 32768 Hz crystal and CLOCKDIV of 8, 1 second is 4096 ticks. + * 4096 equals 1 << 12, so RTC_FREQ_SHIFT needs to be 12. */ +#define RTC_FREQ_SHIFT 12U + #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/lp_ticker.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/lp_ticker.c index 684ed188c9..9c08b32090 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/lp_ticker.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/lp_ticker.c @@ -25,14 +25,25 @@ #include "clocking.h" #if DEVICE_LOWPOWERTIMER +/******************************************************************************* + * The Silicon Labs lp_ticker implementation is mapped on top of an extended RTC + * API, since the RTC is available in the lowest energy modes. By default, the + * RTC counter is configured to run at 4kHz, giving us a quarter-ms resolution + * for the low power timer, which should be good enough for a low power use + * case. + * + * On Silicon Labs devices, the lowest width RTC implementation has a 24-bit + * counter, which gets extended with a further 32-bit software counter. This + * gives 56 bits of actual width, which with the default speed maps to + * 557462 years before the extended RTC counter wraps around. We are pretty + * certain no device is going to have that amount of uptime. + * (At max speed the wraparound is at 69730 years, which is unlikely as well) + ******************************************************************************/ + #include "rtc_api.h" #include "rtc_api_HAL.h" #include "lp_ticker_api.h" - #include "mbed_critical.h" -#if (defined RTCC_COUNT) && (RTCC_COUNT > 0) -#include "em_rtcc.h" -#endif static int rtc_reserved = 0; @@ -57,135 +68,55 @@ void lp_ticker_free() } } -#ifndef RTCC_COUNT - -/* RTC API */ - void lp_ticker_set_interrupt(timestamp_t timestamp) { - uint64_t timestamp_ticks; - uint64_t current_ticks = RTC_CounterGet(); - timestamp_t current_time = ((uint64_t)(current_ticks * 1000000) / (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)); - - /* Initialize RTC */ - lp_ticker_init(); + uint64_t rtc_compare_value; + uint64_t current_ticks = rtc_get_full(); + timestamp_t current_time = lp_ticker_read(); /* calculate offset value */ timestamp_t offset = timestamp - current_time; - if(offset > 0xEFFFFFFF) offset = 100; + + /* If the requested timestamp is too far in the future, we might not be able + * to set the interrupt accurately due to potentially having ticked between + * calculating the timestamp to set and us calculating the offset. */ + if(offset > 0xFFFF0000) offset = 100; /* map offset to RTC value */ // ticks = offset * RTC frequency div 1000000 - timestamp_ticks = ((uint64_t)offset * (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)) / 1000000; - timestamp_ticks += current_ticks; + rtc_compare_value = ((uint64_t)offset * (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)) / 1000000; - /* RTC has 24 bit resolution */ - timestamp_ticks &= 0xFFFFFF; - - /* check for RTC limitation */ - if((timestamp_ticks - RTC_CounterGet()) >= 0x800000) timestamp_ticks = RTC_CounterGet() + 2; - - /* Set callback */ - RTC_FreezeEnable(true); - RTC_CompareSet(0, (uint32_t)timestamp_ticks); - RTC_IntEnable(RTC_IF_COMP0); - RTC_FreezeEnable(false); -} - -void lp_ticker_fire_interrupt(void) -{ - RTC_IntSet(RTC_IFS_COMP0); -} - -inline void lp_ticker_disable_interrupt() -{ - RTC_IntDisable(RTC_IF_COMP0); -} - -inline void lp_ticker_clear_interrupt() -{ - RTC_IntClear(RTC_IF_COMP0); -} - -timestamp_t lp_ticker_read() -{ - lp_ticker_init(); - - uint64_t ticks_temp; - uint64_t ticks = RTC_CounterGet(); - - /* ticks = counter tick value - * timestamp = value in microseconds - * timestamp = ticks * 1.000.000 / RTC frequency - */ - - ticks_temp = (ticks * 1000000) / (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT); - return (timestamp_t) (ticks_temp & 0xFFFFFFFF); -} - -#else - -/* RTCC API */ - -void lp_ticker_set_interrupt(timestamp_t timestamp) -{ - uint64_t timestamp_ticks; - uint64_t current_ticks = RTCC_CounterGet(); - timestamp_t current_time = ((uint64_t)(current_ticks * 1000000) / (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)); - - /* Initialize RTC */ - lp_ticker_init(); - - /* calculate offset value */ - timestamp_t offset = timestamp - current_time; - if(offset > 0xEFFFFFFF) offset = 100; - - /* map offset to RTC value */ - // ticks = offset * RTC frequency div 1000000 - timestamp_ticks = ((uint64_t)offset * (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)) / 1000000; - // checking the rounding. If timeout is wanted between RTCC ticks, irq should be configured to - // trigger in the latter RTCC-tick. Otherwise ticker-api fails to send timer event to its client - if(((timestamp_ticks * 1000000) / (LOW_ENERGY_CLOCK_FREQUENCY / RTC_CLOCKDIV_INT)) < offset){ - timestamp_ticks++; + /* If RTC offset is less then 2 RTC ticks, the interrupt won't fire */ + if(rtc_compare_value < 2) { + rtc_compare_value = 2; } - timestamp_ticks += current_ticks; + rtc_compare_value += current_ticks; - /* RTCC has 32 bit resolution */ - timestamp_ticks &= 0xFFFFFFFF; - - /* check for RTCC limitation */ - if((timestamp_ticks - RTCC_CounterGet()) >= 0x80000000) timestamp_ticks = RTCC_CounterGet() + 2; - - /* init channel */ - RTCC_CCChConf_TypeDef ccchConf = RTCC_CH_INIT_COMPARE_DEFAULT; - RTCC_ChannelInit(0,&ccchConf); - /* Set callback */ - RTCC_ChannelCCVSet(0, (uint32_t)timestamp_ticks); - RTCC_IntEnable(RTCC_IF_CC0); + rtc_set_comp0_value(rtc_compare_value, true); } -void lp_ticker_fire_interrupt(void) +inline void lp_ticker_fire_interrupt(void) { - RTCC_IntSet(RTCC_IFS_CC0); + rtc_force_comp0(); } inline void lp_ticker_disable_interrupt() { - RTCC_IntDisable(RTCC_IF_CC0); + rtc_enable_comp0(false); } inline void lp_ticker_clear_interrupt() { - RTCC_IntClear(RTCC_IF_CC0); + /* No need to clear interrupt flag, since that already happens at RTC level */ } timestamp_t lp_ticker_read() { lp_ticker_init(); - + uint64_t ticks_temp; - uint64_t ticks = RTCC_CounterGet(); + uint64_t ticks = rtc_get_full(); /* ticks = counter tick value * timestamp = value in microseconds @@ -196,6 +127,4 @@ timestamp_t lp_ticker_read() return (timestamp_t) (ticks_temp & 0xFFFFFFFF); } -#endif /* RTCC */ - #endif diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api.c index 41db7d1128..81e64cbc00 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api.c @@ -37,17 +37,21 @@ #include "em_rtcc.h" #endif -static bool rtc_inited = false; -static time_t time_base = 0; -static uint32_t useflags = 0; -static uint32_t time_extend = 0; +static bool rtc_inited = false; +static bool rtc_cancelled = false; +static time_t time_base = 0; +static uint32_t useflags = 0; +static uint32_t time_extend = 0; +static uint32_t extended_comp0 = 0; -static void (*comp0_handler)(void) = NULL; - -#ifndef RTCC_COUNT +static void (*comp0_handler)(void) = NULL; +#ifndef RTCC_PRESENT /* Using RTC API */ -#define RTC_NUM_BITS (24) + +#if RTC_CLOCKDIV_INT > 16 +#error invalid prescaler value RTC_CLOCKDIV_INT, since LP ticker resolution will exceed 1ms. +#endif void RTC_IRQHandler(void) { @@ -60,24 +64,31 @@ void RTC_IRQHandler(void) } if (flags & RTC_IF_COMP0) { RTC_IntClear(RTC_IF_COMP0); - if (comp0_handler != NULL) { + if (comp0_handler != NULL && ((time_extend == extended_comp0) || (rtc_cancelled))) { + rtc_cancelled = false; comp0_handler(); } } } -uint32_t rtc_get_32bit(void) -{ - uint32_t pending = (RTC_IntGet() & RTC_IF_OF) ? 1 : 0; - return (RTC_CounterGet() + ((time_extend + pending) << RTC_NUM_BITS)); -} - uint64_t rtc_get_full(void) { uint64_t ticks = 0; - ticks += time_extend; - ticks = ticks << RTC_NUM_BITS; - ticks += RTC_CounterGet(); + + do + { + ticks = RTC_CounterGet(); + + if (RTC_IntGet() & RTC_IF_OF) { + RTC_IntClear(RTC_IF_OF); + /* RTC has overflowed in a critical section, so handle the overflow here */ + time_extend += 1; + } + + ticks += (uint64_t)time_extend << RTC_BITS; + } + while ( (ticks & RTC_MAX_VALUE) != RTC_CounterGet() ); + return ticks; } @@ -131,10 +142,38 @@ void rtc_free_real(uint32_t flags) } } -#else +void rtc_enable_comp0(bool enable) +{ + RTC_FreezeEnable(true); + if (!enable) { + RTC_IntDisable(RTC_IF_COMP0); + } else { + RTC_IntEnable(RTC_IF_COMP0); + } + RTC_FreezeEnable(false); +} +void rtc_set_comp0_value(uint64_t value, bool enable) +{ + rtc_enable_comp0(false); + + /* Set callback */ + RTC_FreezeEnable(true); + extended_comp0 = (uint32_t) (value >> RTC_BITS); + RTC_CompareSet(0, (uint32_t) (value & RTC_MAX_VALUE)); + RTC_FreezeEnable(false); + + rtc_enable_comp0(enable); +} + +void rtc_force_comp0(void) +{ + rtc_cancelled = true; + RTC_IntSet(RTC_IFS_COMP0); +} + +#else /* Using RTCC API */ -#define RTCC_NUM_BITS (32) void RTCC_IRQHandler(void) { @@ -149,23 +188,30 @@ void RTCC_IRQHandler(void) if (flags & RTCC_IF_CC0) { RTCC_IntClear(RTCC_IF_CC0); - if (comp0_handler != NULL) { + if (comp0_handler != NULL && ((time_extend == extended_comp0) || (rtc_cancelled))) { comp0_handler(); } } } -uint32_t rtc_get_32bit(void) -{ - return RTCC_CounterGet(); -} - uint64_t rtc_get_full(void) { uint64_t ticks = 0; - ticks += time_extend; - ticks = ticks << RTCC_NUM_BITS; - ticks += RTCC_CounterGet(); + + do + { + ticks = RTCC_CounterGet(); + + if (RTCC_IntGet() & RTCC_IF_OF) { + RTCC_IntClear(RTCC_IF_OF); + /* RTCC has overflowed in critical section, so handle the rollover here */ + time_extend += 1; + } + + ticks += (uint64_t)time_extend << RTC_BITS; + } + while ( (ticks & RTC_MAX_VALUE) != RTCC_CounterGet() ); + return ticks; } @@ -184,10 +230,18 @@ void rtc_init_real(uint32_t flags) init.enable = 1; init.precntWrapOnCCV0 = false; init.cntWrapOnCCV1 = false; -#if RTC_CLOCKDIV_INT == 8 +#if RTC_CLOCKDIV_INT == 1 + init.presc = rtccCntPresc_1; +#elif RTC_CLOCKDIV_INT == 2 + init.presc = rtccCntPresc_2; +#elif RTC_CLOCKDIV_INT == 4 + init.presc = rtccCntPresc_4; +#elif RTC_CLOCKDIV_INT == 8 init.presc = rtccCntPresc_8; +#elif RTC_CLOCKDIV_INT == 16 + init.presc = rtccCntPresc_16; #else -#error invalid prescaler value RTC_CLOCKDIV_INT +#error invalid prescaler value RTC_CLOCKDIV_INT, since LP ticker resolution will exceed 1ms. #endif /* Enable Interrupt from RTC */ @@ -220,6 +274,35 @@ void rtc_free_real(uint32_t flags) } } +void rtc_enable_comp0(bool enable) +{ + if(!enable) { + RTCC_IntDisable(RTCC_IF_CC0); + } else { + RTCC_IntEnable(RTCC_IF_CC0); + } +} + +void rtc_set_comp0_value(uint64_t value, bool enable) +{ + rtc_enable_comp0(false); + + /* init channel */ + RTCC_CCChConf_TypeDef ccchConf = RTCC_CH_INIT_COMPARE_DEFAULT; + RTCC_ChannelInit(0,&ccchConf); + /* Set callback */ + extended_comp0 = (uint32_t) (value >> RTC_BITS); + RTCC_ChannelCCVSet(0, (uint32_t) (value & RTC_MAX_VALUE)); + + rtc_enable_comp0(enable); +} + +void rtc_force_comp0(void) +{ + rtc_cancelled = true; + RTCC_IntSet(RTCC_IFS_CC0); +} + #endif /* RTCC_COUNT */ void rtc_set_comp0_handler(uint32_t handler) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api_HAL.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api_HAL.h index a265e13e47..702c42ccd7 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api_HAL.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/rtc_api_HAL.h @@ -26,15 +26,18 @@ #include #include "rtc_api.h" -#include "em_rtc.h" +#include "clocking.h" -#define RTC_CLOCKDIV cmuClkDiv_8 -#define RTC_CLOCKDIV_INT 8 -#define RTC_FREQ_SHIFT 12 +#define RTC_INIT_LPTIMER (1U << 1) +#define RTC_INIT_RTC (1U << 0) - -#define RTC_INIT_LPTIMER (1 << 1) -#define RTC_INIT_RTC (1 << 0) +#if defined(RTCC_PRESENT) +#define RTC_BITS (32U) +#define RTC_MAX_VALUE (0xFFFFFFFFUL) +#elif defined(RTC_PRESENT) +#define RTC_BITS (24U) +#define RTC_MAX_VALUE (0xFFFFFFUL) +#endif #ifdef __cplusplus extern "C" { @@ -42,6 +45,11 @@ extern "C" { /* Purpose of this file: extend rtc_api.h to include EFM-specific stuff*/ void rtc_set_comp0_handler(uint32_t handler); +void rtc_enable_comp0(bool enable); +void rtc_set_comp0_value(uint64_t value, bool enable); +void rtc_force_comp0(void); + +uint64_t rtc_get_full(void); void rtc_init_real(uint32_t flags); void rtc_free_real(uint32_t flags); diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/us_ticker.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/us_ticker.c index 93d5772bc6..74ac081768 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/us_ticker.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/us_ticker.c @@ -25,11 +25,9 @@ #include "us_ticker_api.h" #include "device.h" #include "mbed_assert.h" -#include "mbed_sleep.h" #include "em_cmu.h" #include "em_timer.h" #include "clocking.h" -#include "sleep_api.h" /** * Timer functions for microsecond ticker. @@ -158,10 +156,6 @@ void us_ticker_set_interrupt(timestamp_t timestamp) uint32_t goal = timestamp; uint32_t trigger; - if((US_TICKER_TIMER->IEN & TIMER_IEN_CC0) == 0) { - //Timer was disabled, but is going to be enabled. Set sleep mode. - sleep_manager_lock_deep_sleep(); - } TIMER_IntDisable(US_TICKER_TIMER, TIMER_IEN_CC0); /* convert us delta value back to timer ticks */ @@ -215,10 +209,6 @@ void us_ticker_fire_interrupt(void) void us_ticker_disable_interrupt(void) { - if((US_TICKER_TIMER->IEN & TIMER_IEN_CC0) != 0) { - //Timer was enabled, but is going to get disabled. Clear sleepmode. - sleep_manager_unlock_deep_sleep(); - } /* Disable compare channel interrupts */ TIMER_IntDisable(US_TICKER_TIMER, TIMER_IEN_CC0); } From 0b5fe8de99fa479bd87b44c835680d797bf67563 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Wed, 6 Dec 2017 13:18:14 +0100 Subject: [PATCH 027/133] STM32: update init procedure - STDIO_UART define is no more used - configuring a new serial with the same UART as STDIO is no more allowed --- targets/TARGET_STM/serial_api.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index 89914d7bae..29050a5b7c 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -42,6 +42,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) { struct serial_s *obj_s = SERIAL_S(obj); int IndexNumber = 0; + uint8_t stdio_config = 0; // Determine the UART to use (UART_1, UART_2, ...) UARTName uart_tx = (UARTName)pinmap_peripheral(tx, PinMap_UART_TX); @@ -51,6 +52,15 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) obj_s->uart = (UARTName)pinmap_merge(uart_tx, uart_rx); MBED_ASSERT(obj_s->uart != (UARTName)NC); + if ((tx == STDIO_UART_TX) || (rx == STDIO_UART_RX)) { + stdio_config = 1; + } + else { + if (uart_tx == pinmap_peripheral(STDIO_UART_TX, PinMap_UART_TX)) { + error("Error: new serial object is using same UART as STDIO"); + } + } + // Enable USART clock #if defined(USART1_BASE) if (obj_s->uart == UART_1) { @@ -216,7 +226,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) // Configure UART obj_s->baudrate = 9600; // baudrate default value - if (obj_s->uart == STDIO_UART) { + if (stdio_config) { #if MBED_CONF_PLATFORM_STDIO_BAUD_RATE obj_s->baudrate = MBED_CONF_PLATFORM_STDIO_BAUD_RATE; // baudrate takes value from platform/mbed_lib.json #endif /* MBED_CONF_PLATFORM_STDIO_BAUD_RATE */ @@ -239,8 +249,8 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) init_uart(obj); /* init_uart will be called again in serial_baud function, so don't worry if init_uart returns HAL_ERROR */ - // For stdio management - if (obj_s->uart == STDIO_UART) { // STDIO_UART defined in PeripheralNames.h + // For stdio management in platform/mbed_board.c and platform/mbed_retarget.cpp + if (stdio_config) { stdio_uart_inited = 1; memcpy(&stdio_uart, obj, sizeof(serial_t)); } From 12106236e1b0e2cff659b570eaa1d35d9904b577 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 13:32:26 +0100 Subject: [PATCH 028/133] STM32F0: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_DISCO_F051R8/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F051R8/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F030R8/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F030R8/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F031K6/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F031K6/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F042K6/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F042K6/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F070RB/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F070RB/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F072RB/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F072RB/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F091RC/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F091RC/PinNames.h | 20 +++++++++++++++---- 14 files changed, 112 insertions(+), 56 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PeripheralNames.h index cd7c25c8c0..f200e31f11 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { UART_2 = (int)USART2_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PinNames.h index c7b5fd6754..d3093d1ae9 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/PinNames.h @@ -127,6 +127,18 @@ typedef enum { // D14 = PB_9, // D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // STM32F0-Discovery(STM32F051R8) connector namings PA0 = PA_0, PA1 = PA_1, @@ -188,10 +200,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PeripheralNames.h index cd46695e13..26f11f6d45 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_2 = (int)USART2_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PinNames.h index 68256c2a4d..53a0430cef 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/PinNames.h @@ -127,6 +127,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -135,10 +147,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PeripheralNames.h index 2b4906c1d2..78b420b992 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PeripheralNames.h @@ -44,10 +44,6 @@ typedef enum { UART_1 = (int)USART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PinNames.h index a5f7d1c6d3..5c43458fdc 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/PinNames.h @@ -97,15 +97,27 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, LED3 = PB_3, LED4 = PB_3, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PA_9, I2C_SDA = PA_10, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PeripheralNames.h index 40a30114c1..4ebdb23883 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_2 = (int)USART2_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE // for compilation diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PinNames.h index a148910e59..24b39a36b6 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/PinNames.h @@ -110,15 +110,27 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, LED3 = PB_3, LED4 = PB_3, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PA_9, I2C_SDA = PA_10, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PeripheralNames.h index 08f32ca262..7cdddd7a86 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PeripheralNames.h @@ -47,10 +47,6 @@ typedef enum { UART_4 = (int)USART4_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PinNames.h index 400c744a36..1e9cff29d2 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PeripheralNames.h index 52b2b82eb2..9f37e1a64b 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PeripheralNames.h @@ -51,10 +51,6 @@ typedef enum { UART_4 = (int)USART4_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PinNames.h index 400c744a36..1e9cff29d2 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h index 5acb24b75f..f2616871d5 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { UART_8 = (int)USART8_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PinNames.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PinNames.h index 3c33d81d85..b09d491482 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/PinNames.h @@ -124,6 +124,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -132,10 +144,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, From fc91827a52566c81baa3316f355be7635ca12389 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 13:42:47 +0100 Subject: [PATCH 029/133] STM32F1: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_BLUEPILL_F103C8/PeripheralNames.h | 4 ---- .../TARGET_BLUEPILL_F103C8/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_F100RB/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F100RB/PinNames.h | 15 ++++++++++++-- .../TARGET_NUCLEO_F103RB/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F103RB/PinNames.h | 20 +++++++++++++++---- 6 files changed, 45 insertions(+), 22 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PeripheralNames.h index d886153259..2b92feedda 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PinNames.h index a5849893da..cd2e2e9416 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/PinNames.h @@ -132,15 +132,27 @@ typedef enum { C14 = PC_14, C15 = PC_15, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PC_13, LED2 = PC_13, LED3 = PC_13, LED4 = PC_13, - SERIAL_TX = PA_9, - SERIAL_RX = PA_10, - USBTX = PA_9, - USBRX = PA_10, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PeripheralNames.h index 28dba655c0..803ce05731 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PinNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PinNames.h index a8a684f69c..fa65262c88 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/PinNames.h @@ -143,6 +143,17 @@ typedef enum { PB14 = PB_14, PB15 = PB_15, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif // Generic signals namings LED1 = PC_9, @@ -152,8 +163,8 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - USBTX = PA_2, - USBRX = PA_3, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PB_15, diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PeripheralNames.h index d886153259..2b92feedda 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PinNames.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PinNames.h index f3c5dd5ee2..70edef80c3 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/PinNames.h @@ -119,6 +119,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -127,10 +139,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, From 2bf52220241b05fbd3309995fb1df5e1a294cfff Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 13:46:09 +0100 Subject: [PATCH 030/133] STM32F2: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_NUCLEO_F207ZG/PinNames.h | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/PinNames.h index 6e998e8e3d..b5227168fb 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F2/TARGET_NUCLEO_F207ZG/PinNames.h @@ -227,6 +227,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, LED2 = PB_7, @@ -235,10 +247,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, - SERIAL_RX = PD_9, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = PB_5, // Conflict between D11 and RMII RX Data Valid (PA7) @@ -275,10 +287,6 @@ typedef enum { NC = (int)0xFFFFFFFF } PinName; -#define STDIO_UART_TX SERIAL_TX -#define STDIO_UART_RX SERIAL_RX -#define STDIO_UART UART_3 - #ifdef __cplusplus } #endif From 3812bdb1bcca4a6e71a5c2038a9382741a13016f Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 13:53:18 +0100 Subject: [PATCH 031/133] STM32F3: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_NUCLEO_F302R8/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F302R8/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F303K8/PeripheralNames.h | 6 +----- .../TARGET_NUCLEO_F303K8/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_F303VC/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F303VC/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F303RE/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F303RE/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F303ZE/PeripheralNames.h | 5 ----- .../TARGET_NUCLEO_F303ZE/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_F334C8/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F334C8/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F334R8/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F334R8/PinNames.h | 20 +++++++++++++++---- 14 files changed, 113 insertions(+), 58 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PeripheralNames.h index 4c9aa7c4a1..84dc52f019 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_2 = (int)SPI2_BASE, SPI_3 = (int)SPI3_BASE diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PinNames.h index d5aebd0b64..cd4bab1df2 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F302x8/TARGET_NUCLEO_F302R8/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PB_13, LED2 = PB_13, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PB_15, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PeripheralNames.h index e670237813..a7c5821bf7 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PeripheralNames.h @@ -49,13 +49,9 @@ typedef enum { typedef enum { UART_1 = (int)USART1_BASE, UART_2 = (int)USART2_BASE, - UART_3 = (int)USART3_BASE // defined for compilation issue. UART3 is not present on STM32F303K8 + UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PinNames.h index 65b8674ddf..c27ed38491 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303x8/TARGET_NUCLEO_F303K8/PinNames.h @@ -115,6 +115,18 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, @@ -123,10 +135,10 @@ typedef enum { USER_BUTTON = 0x20, // no user button on the board // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PeripheralNames.h index 834ab70364..271640d391 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { UART_5 = (int)UART5_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PinNames.h index c24d17702b..ed39a9e770 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xC/TARGET_DISCO_F303VC/PinNames.h @@ -177,6 +177,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PE_9, LED2 = PE_8, @@ -191,10 +203,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PB_15, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PeripheralNames.h index ff95fc7be8..b711ad9302 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { UART_5 = (int)UART5_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PinNames.h index 456c8b11b8..8fbd953fb1 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303RE/PinNames.h @@ -131,6 +131,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -139,10 +151,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PeripheralNames.h index 6b86154e45..02772cf554 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PeripheralNames.h @@ -55,11 +55,6 @@ typedef enum { UART_5 = (int)UART5_BASE } UARTName; -#define STDIO_UART_TX SERIAL_TX -#define STDIO_UART_RX SERIAL_RX -#define STDIO_UART UART_3 - - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PinNames.h index fb36d0c13e..e7ce2730b4 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F303xE/TARGET_NUCLEO_F303ZE/PinNames.h @@ -198,6 +198,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, LED2 = PB_7, @@ -206,10 +218,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = SERIAL_TX, // Virtual Com Port - USBRX = SERIAL_RX, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PeripheralNames.h index c646d1d65d..924634dbbf 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PeripheralNames.h @@ -52,10 +52,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PB_3 -#define STDIO_UART_RX PB_4 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PinNames.h index ea7db7d750..f5466954c1 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_DISCO_F334C8/PinNames.h @@ -113,6 +113,18 @@ typedef enum { // D14 = PB_9, // D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PB_3, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PB_4, +#endif + // Generic signals namings LED1 = PB_6, LED2 = PB_7, @@ -121,10 +133,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PB_3, - SERIAL_RX = PB_4, - USBTX = PB_3, - USBRX = PB_4, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PeripheralNames.h index efde3b3829..ea97b1188f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PeripheralNames.h @@ -52,10 +52,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PinNames.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PinNames.h index fce0ab472e..65022e77ea 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_STM32F334x8/TARGET_NUCLEO_F334R8/PinNames.h @@ -126,6 +126,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -134,10 +146,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, From 4edae1a028d2d7c838a332304c79352a6086b33c Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 13:58:39 +0100 Subject: [PATCH 032/133] STM32F7: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_DISCO_F746NG/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F746NG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F746ZG/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F746ZG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F756ZG/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F756ZG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_F767ZI/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_F767ZI/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_F769NI/PeripheralNames.h | 4 ---- .../TARGET_DISCO_F769NI/PinNames.h | 20 +++++++++++++++---- 10 files changed, 80 insertions(+), 40 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PeripheralNames.h index 9b1a41f133..0c00d43bf5 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PB_7 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PinNames.h index 8209a21c19..b096114d9d 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_DISCO_F746NG/PinNames.h @@ -246,6 +246,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PB_7, +#endif + // Generic signals namings LED1 = PI_1, // LD1 = GREEN LED2 = PI_1, @@ -254,10 +266,10 @@ typedef enum { USER_BUTTON = PI_11, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_9, // Virtual Com Port - SERIAL_RX = PB_7, // Virtual Com Port - USBTX = PA_9, // Virtual Com Port - USBRX = PB_7, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PeripheralNames.h index 6a73f9ce76..66fc3645d5 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PinNames.h index 9ef300297c..36aa261a22 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/PinNames.h @@ -189,6 +189,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, // LD1 = GREEN LED2 = PB_7, // Blue @@ -197,10 +209,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = PD_8, // Virtual Com Port - USBRX = PD_9, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PeripheralNames.h index 6a73f9ce76..66fc3645d5 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PinNames.h index 9ef300297c..36aa261a22 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F756xG/TARGET_NUCLEO_F756ZG/PinNames.h @@ -189,6 +189,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, // LD1 = GREEN LED2 = PB_7, // Blue @@ -197,10 +209,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = PD_8, // Virtual Com Port - USBRX = PD_9, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PeripheralNames.h index fc1991862d..2383be6c21 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PinNames.h index 9ef300297c..36aa261a22 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/PinNames.h @@ -189,6 +189,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, // LD1 = GREEN LED2 = PB_7, // Blue @@ -197,10 +209,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = PD_8, // Virtual Com Port - USBRX = PD_9, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PeripheralNames.h index 92e0fd8b70..2383be6c21 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PA_10 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PinNames.h index db69e9cdca..b13a5687da 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F769xI/TARGET_DISCO_F769NI/PinNames.h @@ -246,6 +246,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // Generic signals namings LED1 = PJ_13, // LD1 = RED LED2 = PJ_5, // LD2 = GREEN @@ -254,10 +266,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_9, // Virtual Com Port - SERIAL_RX = PA_10, // Virtual Com Port - USBTX = PA_9, // Virtual Com Port - USBRX = PA_10, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, From c92c7cfbc6978c8bc71366a8b2c2abb9e95d2a0d Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 14:04:36 +0100 Subject: [PATCH 033/133] STM32L0: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../PeripheralNames.h | 4 ---- .../TARGET_DISCO_L072CZ_LRWAN1/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L011K4/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L011K4/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L031K6/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L031K6/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L073RZ/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L073RZ/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_L053C8/PeripheralNames.h | 4 ---- .../TARGET_DISCO_L053C8/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L053R8/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L053R8/PinNames.h | 20 +++++++++++++++---- 12 files changed, 96 insertions(+), 48 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PeripheralNames.h index 087804bb40..79e6801366 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PeripheralNames.h @@ -52,10 +52,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PinNames.h index b037f50420..8d94482bf2 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L072CZ_LRWAN1/PinNames.h @@ -121,16 +121,28 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PB_5, // Green LED2 = PA_5, // Red LED3 = PB_6, // Blue LED4 = PB_7, // Red USER_BUTTON = PB_2, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PeripheralNames.h index 4978a8872e..52829dbb0e 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PeripheralNames.h @@ -45,10 +45,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PinNames.h index ca50932104..4b36ff0e1f 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/PinNames.h @@ -109,15 +109,27 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, LED3 = PB_3, LED4 = PB_3, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PeripheralNames.h index b2e9f9f495..0b6d2595aa 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PeripheralNames.h @@ -45,10 +45,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, } SPIName; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PinNames.h index 8302724210..76e1367ad2 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/PinNames.h @@ -105,15 +105,27 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, LED3 = PB_3, LED4 = PB_3, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PeripheralNames.h index d203852621..7b21915eca 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PeripheralNames.h @@ -52,10 +52,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PinNames.h index e78f283d6b..8f1f4cab85 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PeripheralNames.h index f6add44db2..c0393f75ee 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PA_10 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PinNames.h index d72a5b19e3..29a4c0ae3f 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_DISCO_L053C8/PinNames.h @@ -110,6 +110,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // Generic signals namings LED1 = PB_4, LED2 = PA_5, @@ -118,10 +130,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_9, - SERIAL_RX = PA_10, - USBTX = PA_9, - USBRX = PA_10, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PB_15, diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PeripheralNames.h index 0d54dc1761..c0393f75ee 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PinNames.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PinNames.h index e78f283d6b..8f1f4cab85 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_STM32L053x8/TARGET_NUCLEO_L053R8/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, From 346d4cd9862ca99618b91ed9f30a737d7d32688b Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 14:09:27 +0100 Subject: [PATCH 034/133] STM32L1: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_MOTE_L152RC/PeripheralNames.h | 4 ---- .../TARGET_MOTE_L152RC/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L152RE/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L152RE/PinNames.h | 20 +++++++++++++++---- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralNames.h index cb931d9cfb..b627a8fc10 100755 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { UART_3 = (int)USART3_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PinNames.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PinNames.h index 7949eb0588..7cf0167b21 100755 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/PinNames.h @@ -122,16 +122,28 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PB_1, LED2 = PC_3, LED3 = PB_10, LED4 = PB_10, //USER_BUTTON = PC_13, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralNames.h index 22f96fb3dd..116fcec4f5 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PeripheralNames.h @@ -52,10 +52,6 @@ typedef enum { UART_5 = (int)UART5_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PinNames.h index 3ede104dce..e03dd6e4c3 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/PinNames.h @@ -122,6 +122,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -130,10 +142,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, From cd3a35e79c9837bc219f2013e401f41a861656a3 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 14:16:17 +0100 Subject: [PATCH 035/133] STM32L4: STDIO_UART_TX and STDIO_UART_RX can be now user defined --- .../TARGET_NUCLEO_L432KC/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L432KC/PinNames.h | 20 +++++++++++++++---- .../PeripheralNames.h | 4 ---- .../TARGET_DISCO_L475VG_IOT01A/PinNames.h | 20 +++++++++++++++---- .../TARGET_DISCO_L476VG/PeripheralNames.h | 4 ---- .../TARGET_DISCO_L476VG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L476RG/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L476RG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L486RG/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L486RG/PinNames.h | 20 +++++++++++++++---- .../TARGET_NUCLEO_L496ZG/PeripheralNames.h | 4 ---- .../TARGET_NUCLEO_L496ZG/PinNames.h | 20 +++++++++++++++---- .../TARGET_STM/TARGET_STM32L4/serial_device.c | 4 +++- 13 files changed, 99 insertions(+), 49 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PeripheralNames.h index f5ee2b01ae..4c8d454ccc 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PeripheralNames.h @@ -50,10 +50,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_15 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_3 = (int)SPI3_BASE diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PinNames.h index f0f0f79cac..4f91b2a7f2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/TARGET_NUCLEO_L432KC/PinNames.h @@ -109,15 +109,27 @@ typedef enum { D12 = PB_4, D13 = PB_3, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_15, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PB_3, LED3 = PB_3, LED4 = PB_3, - SERIAL_TX = PA_2, - SERIAL_RX = PA_15, - USBTX = PA_2, - USBRX = PA_15, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_6, I2C_SDA = PB_7, SPI_MOSI = PB_5, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PeripheralNames.h index 77a1a05d9b..2a66882a1c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PB_6 -#define STDIO_UART_RX PB_7 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PinNames.h index 9c2ea68f50..42a23b3940 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/TARGET_DISCO_L475VG_IOT01A/PinNames.h @@ -205,6 +205,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PB_6, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PB_7, +#endif + // Generic signals namings LED1 = D13, // Green LED (LD1) LED2 = PB_14, // Green LED (LD2) @@ -216,10 +228,10 @@ typedef enum { BUTTON3 = USER_BUTTON, BUTTON4 = USER_BUTTON, BUTTON5 = USER_BUTTON, - SERIAL_TX = PB_6, - SERIAL_RX = PB_7, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PeripheralNames.h index 9f8ff325af..bc8f43ffa8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PD_5 -#define STDIO_UART_RX PD_6 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PinNames.h index fcb2a4148f..3e3d9966ab 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_DISCO_L476VG/PinNames.h @@ -131,6 +131,18 @@ typedef enum { ADC_VREF = 0xF1, ADC_VBAT = 0xF2, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_5, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_6, +#endif + // Generic signals namings LED1 = PE_8, // LD5 Green LED2 = PB_2, // LD4 Red @@ -149,10 +161,10 @@ typedef enum { BUTTON4 = JOYSTICK_UP, BUTTON5 = JOYSTICK_DOWN, - SERIAL_TX = PD_5, - SERIAL_RX = PD_6, - USBTX = PD_5, - USBRX = PD_6, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PeripheralNames.h index e89a97bb1e..bc8f43ffa8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PinNames.h index c78b39cfbc..11a6ce08bf 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/TARGET_NUCLEO_L476RG/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PeripheralNames.h index e89a97bb1e..bc8f43ffa8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PinNames.h index c78b39cfbc..11a6ce08bf 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/TARGET_NUCLEO_L486RG/PinNames.h @@ -123,6 +123,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PeripheralNames.h index c87dfc103e..b3a010be10 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { LPUART_1 = (int)LPUART1_BASE } UARTName; -#define STDIO_UART_TX SERIAL_TX -#define STDIO_UART_RX SERIAL_RX -#define STDIO_UART LPUART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PinNames.h index e51ea37f50..91565d925a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/TARGET_NUCLEO_L496ZG/PinNames.h @@ -245,6 +245,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PG_7, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PG_8, +#endif + // Generic signals namings LED1 = PC_7, LED2 = PB_7, @@ -254,10 +266,10 @@ typedef enum { // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PG_7, // Virtual Com Port - SERIAL_RX = PG_8, // Virtual Com Port - USBTX = PG_7, // Virtual Com Port - USBRX = PG_8, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32L4/serial_device.c b/targets/TARGET_STM/TARGET_STM32L4/serial_device.c index 916f9d45f6..1ae5e9f24f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32L4/serial_device.c @@ -34,8 +34,10 @@ #if defined (TARGET_STM32L432xC) #define UART_NUM (3) +#elif defined (TARGET_STM32L433xC) + #define UART_NUM (4) #else - #define UART_NUM (6) // max value + #define UART_NUM (6) // max value (TARGET_STM32L475xG / TARGET_STM32L476xG / TARGET_STM32L486xG / TARGET_STM32L496xG) #endif uint32_t serial_irq_ids[UART_NUM] = {0}; From 5bdeb1442450a8b8e81229852644a42e8f389459 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 7 Dec 2017 11:56:49 +0100 Subject: [PATCH 036/133] STM32F4: STDIO_UART_TX and STDIO_UART_RX can be now user defined NB for UBLOX targets: usb_rx and usb_tx config name are still available in order to not break current applications. --- .../TARGET_DISCO_F401VC/PeripheralNames.h | 4 --- .../TARGET_DISCO_F401VC/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F401RE/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F401RE/PinNames.h | 20 ++++++++--- .../TARGET_ARCH_MAX/PeripheralNames.h | 4 --- .../TARGET_ARCH_MAX/PinNames.h | 16 +++++++-- .../TARGET_DISCO_F407VG/PeripheralNames.h | 4 --- .../TARGET_DISCO_F407VG/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F410RB/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F410RB/PinNames.h | 20 ++++++++--- .../TARGET_ELMO_F411RE/PeripheralNames.h | 4 --- .../TARGET_ELMO_F411RE/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F411RE/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F411RE/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F412ZG/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F412ZG/PinNames.h | 20 ++++++++--- .../TARGET_DISCO_F413ZH/PeripheralNames.h | 4 --- .../TARGET_DISCO_F413ZH/PinNames.h | 20 ++++++++--- .../TARGET_DISCO_F429ZI/PeripheralNames.h | 4 --- .../TARGET_DISCO_F429ZI/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F429ZI/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F429ZI/PinNames.h | 20 ++++++++--- .../TARGET_UBLOX_C030/PeripheralNames.h | 4 --- .../TARGET_UBLOX_C030/PinNames.h | 16 +++++++-- .../PeripheralNames.h | 3 -- .../TARGET_MBED_CONNECT_ODIN/PinNames.h | 21 +++++++++-- .../TARGET_MTB_UBLOX_ODIN_W2/PinNames.h | 21 +++++++++-- .../TARGET_UBLOX_EVK_ODIN_W2/PinNames.h | 21 +++++++++-- .../TARGET_NUCLEO_F439ZI/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F439ZI/PinNames.h | 20 ++++++++--- .../TARGET_B96B_F446VE/PeripheralNames.h | 4 --- .../TARGET_B96B_F446VE/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F446RE/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F446RE/PinNames.h | 20 ++++++++--- .../TARGET_NUCLEO_F446ZE/PeripheralNames.h | 4 --- .../TARGET_NUCLEO_F446ZE/PinNames.h | 20 ++++++++--- .../TARGET_DISCO_F469NI/PeripheralNames.h | 4 --- .../TARGET_DISCO_F469NI/PinNames.h | 19 +++++++--- targets/targets.json | 35 +++---------------- 39 files changed, 329 insertions(+), 171 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PeripheralNames.h index 23f8aea00e..bf3ae14ca4 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PinNames.h index 3c967a8aa1..b229bc4d2b 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xC/TARGET_DISCO_F401VC/PinNames.h @@ -113,6 +113,18 @@ typedef enum { ADC_VREF = 0xF1, ADC_VBAT = 0xF2, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PD_12, LED2 = PD_13, @@ -122,10 +134,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralNames.h index 23f8aea00e..bf3ae14ca4 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h index df02114393..c89ff31a0f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h @@ -122,6 +122,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PeripheralNames.h index 5d22cf38cb..10be44289a 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PeripheralNames.h @@ -56,10 +56,6 @@ typedef enum { UART_6 = (int)USART6_BASE, } UARTName; -#define STDIO_UART_TX PC_6 -#define STDIO_UART_RX PC_7 -#define STDIO_UART UART_6 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PinNames.h index 0b4d432f6c..41d2701c46 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_ARCH_MAX/PinNames.h @@ -222,13 +222,25 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PC_6, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PC_7, +#endif + // Generic signals namings LED1 = PB_3, LED2 = PD_8, LED3 = PD_9, LED4 = PD_10, - USBTX = PC_6, /* USART6 */ - USBRX = PC_7, + USBTX = STDIO_UART_TX, /* USART6 */ + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, /* I2C1 */ I2C_SDA = PB_9, SPI_MOSI = PC_3, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PeripheralNames.h index e25c70514f..10be44289a 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PeripheralNames.h @@ -56,10 +56,6 @@ typedef enum { UART_6 = (int)USART6_BASE, } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h index 0c542e3b91..d645d3cca8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/TARGET_DISCO_F407VG/PinNames.h @@ -196,6 +196,18 @@ typedef enum { ADC_VREF = 0xF1, ADC_VBAT = 0xF2, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PD_13, // LD3 as LD1 is not a user LED LED2 = PD_12, // LD4 as LD2 is not a user LED @@ -207,10 +219,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, /* USART2 */ - SERIAL_RX = PA_3, - USBTX = PA_2, /* USART2 */ - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, /* USART2 */ + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, /* USART2 */ + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, /* I2C1 */ I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PeripheralNames.h index caa92c00d7..63cdc8161b 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PeripheralNames.h @@ -51,10 +51,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PinNames.h index da18af2592..eb97596939 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F410xB/TARGET_NUCLEO_F410RB/PinNames.h @@ -122,6 +122,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PB_15, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PeripheralNames.h index 68f0eff9d2..c03d011251 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PA_10 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, ELMO_RF_SPI2 = SPI_1, SPI_2 = (int)SPI2_BASE, ELMO_SPI1 = SPI_2, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PinNames.h index 0b7c41698d..e81c7b8479 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_ELMO_F411RE/PinNames.h @@ -125,6 +125,18 @@ typedef enum { D14 = PC_9, D15 = PA_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // Generic signals namings LED1 = PB_0, LED2 = PB_1, @@ -133,10 +145,10 @@ typedef enum { USER_BUTTON = PB_7, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_9, - SERIAL_RX = PA_10, - USBTX = PA_9, - USBRX = PA_10, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PeripheralNames.h index 9046d68c2d..697d107c41 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PinNames.h index df02114393..c89ff31a0f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/TARGET_NUCLEO_F411RE/PinNames.h @@ -122,6 +122,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PeripheralNames.h index 78bc359403..c85180daf4 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PeripheralNames.h @@ -33,10 +33,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PinNames.h index bf01717695..8298412355 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_NUCLEO_F412ZG/PinNames.h @@ -175,6 +175,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, LED2 = PB_7, @@ -184,10 +196,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, - SERIAL_RX = PD_9, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralNames.h index 26bfcfcced..a271aefdb5 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PeripheralNames.h @@ -43,10 +43,6 @@ typedef enum { UART_10 = (int)UART10_BASE } UARTName; -#define STDIO_UART_TX PG_14 -#define STDIO_UART_RX PG_9 -#define STDIO_UART UART_6 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h index 4b75ed608a..7b7f67f32f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F413xH/TARGET_DISCO_F413ZH/PinNames.h @@ -222,6 +222,18 @@ typedef enum { D14 = PB_11, D15 = PB_10, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PG_14, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PG_9, +#endif + // Generic signals namings LED1 = PC_5, // Green = LD3 on the board LED2 = PE_3, // Red = LD4 on the board @@ -230,10 +242,10 @@ typedef enum { LED_RED = LED2, USER_BUTTON = PA_0, BUTTON1 = USER_BUTTON, - SERIAL_TX = PG_14, - SERIAL_RX = PG_9, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PeripheralNames.h index fb1cdab06b..3a7aa557b6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PA_10 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PinNames.h index 00be7f8dac..24cc223867 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_DISCO_F429ZI/PinNames.h @@ -211,6 +211,18 @@ typedef enum { ADC_VREF = 0xF1, ADC_VBAT = 0xF2, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // Generic signals namings LED1 = PG_13, // Corresponds to LD3 on MB1075B LED2 = PG_14, // Corresponds to LD4 on MB1075B @@ -220,10 +232,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_9, - SERIAL_RX = PA_10, - USBTX = PA_9, - USBRX = PA_10, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, SPI_MOSI = PA_7, SPI_MISO = PA_6, SPI_SCK = PA_5, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PeripheralNames.h index 1690d9e13f..d2c2320ba5 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PinNames.h index f4f612d1e2..25c07fa737 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PinNames.h @@ -235,6 +235,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, // LD1 = GREEN LED2 = PB_7, // Blue @@ -244,10 +256,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = PD_8, // Virtual Com Port - USBRX = PD_9, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PeripheralNames.h index e818a08f30..0f0b59fcef 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PeripheralNames.h @@ -54,10 +54,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PA_9 -#define STDIO_UART_RX PA_10 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PinNames.h index 2b0656381b..aa912fba41 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F437xG/TARGET_UBLOX_C030/PinNames.h @@ -145,9 +145,21 @@ typedef enum { SPI_CLK = D13, SPI_NSS = D10, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_9, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // ST-Link - USBRX = PA_10, - USBTX = PA_9, + USBRX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, SWDIO = PA_13, SWCLK = PA_14, NTRST = PB_4, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/PeripheralNames.h index fcd76d0152..3a7aa557b6 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/PeripheralNames.h @@ -57,9 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX USBTX -#define STDIO_UART_RX USBRX - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MBED_CONNECT_ODIN/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MBED_CONNECT_ODIN/PinNames.h index ea26b94807..26e1426dfe 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MBED_CONNECT_ODIN/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MBED_CONNECT_ODIN/PinNames.h @@ -155,9 +155,26 @@ typedef enum { SPI_SCK = SPI0_SCK, SPI_CS = SPI0_CS, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#elif MBED_CONF_TARGET_USB_TX + STDIO_UART_TX = MBED_CONF_TARGET_USB_TX, +#else + STDIO_UART_TX = PA_9, +#endif + +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#elif MBED_CONF_TARGET_USB_RX + STDIO_UART_TX = MBED_CONF_TARGET_USB_RX, +#else + STDIO_UART_RX = PA_10, +#endif + // DAPLink - USBRX = MBED_CONF_TARGET_USB_RX, - USBTX = MBED_CONF_TARGET_USB_TX, + USBRX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, SWDIO = PA_15, SWCLK = PA_14, NTRST = PB_4, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MTB_UBLOX_ODIN_W2/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MTB_UBLOX_ODIN_W2/PinNames.h index ed2efe8318..788bb04f72 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MTB_UBLOX_ODIN_W2/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_MTB_UBLOX_ODIN_W2/PinNames.h @@ -179,9 +179,26 @@ typedef enum { SPI_SCK = SPI0_SCK, SPI_CS = SPI0_CS, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#elif MBED_CONF_TARGET_USB_TX + STDIO_UART_TX = MBED_CONF_TARGET_USB_TX, +#else + STDIO_UART_TX = PA_11, +#endif + +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#elif MBED_CONF_TARGET_USB_RX + STDIO_UART_TX = MBED_CONF_TARGET_USB_RX, +#else + STDIO_UART_RX = PA_13, +#endif + // DAPLink - USBRX = MBED_CONF_TARGET_USB_RX, - USBTX = MBED_CONF_TARGET_USB_TX, + USBRX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, SWDIO = PA_15, SWCLK = PA_14, NTRST = PB_4, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_UBLOX_EVK_ODIN_W2/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_UBLOX_EVK_ODIN_W2/PinNames.h index e6b09b7502..f9c8638263 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_UBLOX_EVK_ODIN_W2/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/TARGET_UBLOX_EVK_ODIN_W2/PinNames.h @@ -178,9 +178,26 @@ typedef enum { BUTTON1 = SW0, BUTTON2 = SW1, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#elif MBED_CONF_TARGET_USB_TX + STDIO_UART_TX = MBED_CONF_TARGET_USB_TX, +#else + STDIO_UART_TX = D8, +#endif + +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#elif MBED_CONF_TARGET_USB_RX + STDIO_UART_TX = MBED_CONF_TARGET_USB_RX, +#else + STDIO_UART_RX = D2, +#endif + // ST-Link - USBRX = MBED_CONF_TARGET_USB_RX, - USBTX = MBED_CONF_TARGET_USB_TX, + USBRX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, SWDIO = PA_15, SWCLK = PA_14, NTRST = PB_4, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PeripheralNames.h index 1690d9e13f..d2c2320ba5 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PinNames.h index 72c046868c..fdf2904ada 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_NUCLEO_F439ZI/PinNames.h @@ -189,6 +189,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, // LD1 = GREEN LED2 = PB_7, // Blue @@ -198,10 +210,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = PD_8, // Virtual Com Port - USBRX = PD_9, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PeripheralNames.h index d018a67cea..a1a4d9c699 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PeripheralNames.h @@ -60,10 +60,6 @@ typedef enum { DMA_2 = (int)DMA2_BASE } DMAName; -#define STDIO_UART_TX PC_10 -#define STDIO_UART_RX PC_11 -#define STDIO_UART UART_4 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PinNames.h index c311a7b2be..0435b5d875 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_B96B_F446VE/PinNames.h @@ -154,6 +154,18 @@ typedef enum { D14 = PC_12, D15 = PB_10, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PC_10, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PC_11, +#endif + // Generic signals namings LED1 = PD_10, LED2 = LED1, @@ -163,10 +175,10 @@ typedef enum { USER_BUTTON = PD_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PC_10, - SERIAL_RX = PC_11, - USBTX = SERIAL_TX, - USBRX = SERIAL_RX, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PeripheralNames.h index 46e9b94e28..0382c324ea 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PA_2 -#define STDIO_UART_RX PA_3 -#define STDIO_UART UART_2 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PinNames.h index b1a0b6ca2f..c496f8b210 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446RE/PinNames.h @@ -122,6 +122,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PA_2, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PA_3, +#endif + // Generic signals namings LED1 = PA_5, LED2 = PA_5, @@ -131,10 +143,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PA_2, - SERIAL_RX = PA_3, - USBTX = PA_2, - USBRX = PA_3, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PA_7, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PeripheralNames.h index 5245860102..0382c324ea 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PeripheralNames.h @@ -55,10 +55,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX SERIAL_TX -#define STDIO_UART_RX SERIAL_RX -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PinNames.h index 0bb0d93433..2a107f9c0f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F446xE/TARGET_NUCLEO_F446ZE/PinNames.h @@ -190,6 +190,18 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PD_8, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PD_9, +#endif + // Generic signals namings LED1 = PB_0, LED2 = PB_7, @@ -199,10 +211,10 @@ typedef enum { USER_BUTTON = PC_13, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PD_8, // Virtual Com Port - SERIAL_RX = PD_9, // Virtual Com Port - USBTX = SERIAL_TX, // Virtual Com Port - USBRX = SERIAL_RX, // Virtual Com Port + SERIAL_TX = STDIO_UART_TX, // Virtual Com Port + SERIAL_RX = STDIO_UART_RX, // Virtual Com Port + USBTX = STDIO_UART_TX, // Virtual Com Port + USBRX = STDIO_UART_RX, // Virtual Com Port I2C_SCL = D15, I2C_SDA = D14, SPI_MOSI = D11, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PeripheralNames.h index 614256717e..210319584f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PeripheralNames.h @@ -57,10 +57,6 @@ typedef enum { UART_8 = (int)UART8_BASE } UARTName; -#define STDIO_UART_TX PB_10 -#define STDIO_UART_RX PB_11 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PinNames.h index 5d9786a21b..1a73dbc2e2 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F469xI/TARGET_DISCO_F469NI/PinNames.h @@ -237,6 +237,17 @@ typedef enum { D14 = PB_9, D15 = PB_8, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + STDIO_UART_TX = PB_10, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + STDIO_UART_RX = PB_11, +#endif // Generic signals namings LED1 = PG_6, @@ -248,10 +259,10 @@ typedef enum { USER_BUTTON = PA_0, // Standardized button names BUTTON1 = USER_BUTTON, - SERIAL_TX = PB_10, - SERIAL_RX = PB_11, - USBTX = PB_10, - USBRX = PB_11, + SERIAL_TX = STDIO_UART_TX, + SERIAL_RX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, I2C_SCL = PB_8, I2C_SDA = PB_9, SPI_MOSI = PB_15, diff --git a/targets/targets.json b/targets/targets.json index 699c928905..24a4359bdd 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1903,18 +1903,13 @@ "supported_form_factors": ["ARDUINO"], "release_versions": ["5"], "config": { - "usb_tx": { + "stdio_uart_tx": { "help": "Value: D8(default) or D1", "value": "D8" }, - "usb_rx": { + "stdio_uart_rx": { "help": "Value: D2(default) or D0", "value": "D2" - }, - "stdio_uart": { - "help": "Value: UART_1(default) or UART_3", - "value": "UART_1", - "macro_name": "STDIO_UART" } } }, @@ -1922,39 +1917,19 @@ "inherits": ["MODULE_UBLOX_ODIN_W2"], "release_versions": ["5"], "config": { - "usb_tx": { + "stdio_uart_tx": { "help": "Value: PA_9(default) or PD_8", "value": "PA_9" }, - "usb_rx": { + "stdio_uart_rx": { "help": "Value: PA_10(default) or PD_9", "value": "PA_10" - }, - "stdio_uart": { - "help": "Value: UART_1(default) or UART_3", - "value": "UART_1", - "macro_name": "STDIO_UART" } } }, "MTB_UBLOX_ODIN_W2": { "inherits": ["MODULE_UBLOX_ODIN_W2"], - "release_versions": ["5"], - "config": { - "usb_tx": { - "help": "Value PA_11", - "value": "PA_11" - }, - "usb_rx": { - "help": "Value PA_13", - "value": "PA_13" - }, - "stdio_uart": { - "help": "Value: UART_1", - "value": "UART_1", - "macro_name": "STDIO_UART" - } - } + "release_versions": ["5"] }, "UBLOX_C030": { "inherits": ["FAMILY_STM32"], From 5e85ff9133fb95b8ed6a3b1132596f0241b48ef6 Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 5 Jan 2018 10:11:17 +0100 Subject: [PATCH 037/133] STM32 CAN: fix wrong ID and MASK filter --- targets/TARGET_STM/can_api.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/can_api.c b/targets/TARGET_STM/can_api.c index 1f0d977b1a..246f5d1971 100644 --- a/targets/TARGET_STM/can_api.c +++ b/targets/TARGET_STM/can_api.c @@ -468,11 +468,11 @@ int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t sFilterConfig.FilterIdLow = 0x0; sFilterConfig.FilterMaskIdHigh = mask << 5; sFilterConfig.FilterMaskIdLow = 0x0; // allows both remote and data frames - } else if (format == CANExtended) { + } else { // format == CANExtended sFilterConfig.FilterIdHigh = id >> 13; // EXTID[28:13] - sFilterConfig.FilterIdLow = (0x00FF & (id << 3)) | (1 << 2); // EXTID[12:0] + sFilterConfig.FilterIdLow = (0xFFFF & (id << 3)) | (1 << 2); // EXTID[12:0] + IDE sFilterConfig.FilterMaskIdHigh = mask >> 13; - sFilterConfig.FilterMaskIdLow = (0x00FF & (mask << 3)) | (1 << 2); + sFilterConfig.FilterMaskIdLow = (0xFFFF & (mask << 3)) | (1 << 2); } sFilterConfig.FilterFIFOAssignment = 0; From c4bff4ef587dccc36192be7614e87e004fd9df3c Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Fri, 12 Jan 2018 11:52:47 +0100 Subject: [PATCH 038/133] STM32 LPT optimisation --- targets/TARGET_STM/lp_ticker.c | 11 ++--------- targets/TARGET_STM/rtc_api.c | 30 ++++++++++++++++++++++++++++-- targets/TARGET_STM/rtc_api_hal.h | 6 +++--- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/targets/TARGET_STM/lp_ticker.c b/targets/TARGET_STM/lp_ticker.c index 3404994aa7..7b12b34736 100644 --- a/targets/TARGET_STM/lp_ticker.c +++ b/targets/TARGET_STM/lp_ticker.c @@ -292,15 +292,8 @@ void lp_ticker_init(void) uint32_t lp_ticker_read(void) { - uint32_t usecs = 0; - time_t time = 0; - - do { - time = rtc_read(); - usecs = rtc_read_subseconds(); - } while (time != rtc_read()); - - return (time * 1000000) + usecs; + uint32_t usecs = rtc_read_us(); + return usecs; } void lp_ticker_set_interrupt(timestamp_t timestamp) diff --git a/targets/TARGET_STM/rtc_api.c b/targets/TARGET_STM/rtc_api.c index 9e91753c86..50e273c5ba 100644 --- a/targets/TARGET_STM/rtc_api.c +++ b/targets/TARGET_STM/rtc_api.c @@ -36,8 +36,12 @@ static RTC_HandleTypeDef RtcHandle; #if DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM + +#define GET_TICK_PERIOD(VALUE) (2048 * 1000000 / VALUE) /* 1s / SynchPrediv value * 2^11 (value to get the maximum precision value with no u32 overflow) */ + static void (*irq_handler)(void); static void RTC_IRQHandler(void); +static uint32_t lp_TickPeriod_us = GET_TICK_PERIOD(4095); /* default SynchPrediv value = 4095 */ #endif /* DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM */ void rtc_init(void) @@ -123,6 +127,10 @@ void rtc_init(void) RtcHandle.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; #endif /* TARGET_STM32F1 */ +#if DEVICE_LOWPOWERTIMER && !MBED_CONF_TARGET_LOWPOWERTIMER_LPTIM + lp_TickPeriod_us = GET_TICK_PERIOD(RtcHandle.Init.SynchPrediv); +#endif + if (HAL_RTC_Init(&RtcHandle) != HAL_OK) { error("RTC initialization failed"); } @@ -306,9 +314,27 @@ static void RTC_IRQHandler(void) } } -uint32_t rtc_read_subseconds(void) +uint32_t rtc_read_us(void) { - return 1000000.f * ((double)((RTC->PRER & RTC_PRER_PREDIV_S) - RTC->SSR) / ((RTC->PRER & RTC_PRER_PREDIV_S) + 1)); + RTC_TimeTypeDef timeStruct = {0}; + RTC_DateTypeDef dateStruct = {0}; + + RtcHandle.Instance = RTC; + HAL_RTC_GetTime(&RtcHandle, &timeStruct, RTC_FORMAT_BIN); + + /* Reading RTC current time locks the values in calendar shadow registers until Current date is read + to ensure consistency between the time and date values */ + HAL_RTC_GetDate(&RtcHandle, &dateStruct, RTC_FORMAT_BIN); + + if (timeStruct.SubSeconds > timeStruct.SecondFraction) { + /* SS can be larger than PREDIV_S only after a shift operation. In that case, the correct + time/date is one second less than as indicated by RTC_TR/RTC_DR. */ + timeStruct.Seconds -= 1; + } + uint32_t RTCTime = timeStruct.Seconds + timeStruct.Minutes * 60 + timeStruct.Hours * 60 * 60; + uint32_t Time_us = ((timeStruct.SecondFraction - timeStruct.SubSeconds) * lp_TickPeriod_us) >> 11; + + return (RTCTime * 1000000) + Time_us ; } void rtc_set_wake_up_timer(uint32_t delta) diff --git a/targets/TARGET_STM/rtc_api_hal.h b/targets/TARGET_STM/rtc_api_hal.h index 5013b3bbeb..ff1722a0e8 100644 --- a/targets/TARGET_STM/rtc_api_hal.h +++ b/targets/TARGET_STM/rtc_api_hal.h @@ -51,11 +51,11 @@ extern "C" { #define RTC_CLOCK LSI_VALUE #endif -/** Read the subsecond register. +/** Read RTC time with subsecond precision. * - * @return The remaining time as microseconds (0-999999) + * @return Time is microsecond */ -uint32_t rtc_read_subseconds(void); +uint32_t rtc_read_us(void); /** Program a wake up timer event in delta microseconds. * From a786d347db2e983b5f0e8b3996eb8c51d54e50ff Mon Sep 17 00:00:00 2001 From: Vincent Coubard Date: Wed, 17 Jan 2018 11:31:50 +0000 Subject: [PATCH 039/133] BLE: Fix inclusion of BLE.h (case) --- features/FEATURE_BLE/ble/pal/SimpleEventQueue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/FEATURE_BLE/ble/pal/SimpleEventQueue.h b/features/FEATURE_BLE/ble/pal/SimpleEventQueue.h index a67c11bbb2..84ccacfd48 100644 --- a/features/FEATURE_BLE/ble/pal/SimpleEventQueue.h +++ b/features/FEATURE_BLE/ble/pal/SimpleEventQueue.h @@ -20,7 +20,7 @@ #include #include "EventQueue.h" #include "ble/BLEInstanceBase.h" -#include "BLE/ble.h" +#include "ble/BLE.h" namespace ble { namespace pal { From 74fdd09939f62ca0e2a29cee0897351d6d906c77 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 18 Jan 2018 17:33:03 +0800 Subject: [PATCH 040/133] Add gpio_is_connected --- targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c | 5 +++++ targets/TARGET_NUVOTON/TARGET_M480/gpio_api.c | 5 +++++ targets/TARGET_NUVOTON/TARGET_NANO100/gpio_api.c | 5 +++++ targets/TARGET_NUVOTON/TARGET_NUC472/gpio_api.c | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c b/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c index 39f4e8e30b..27589ccc39 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c @@ -37,6 +37,11 @@ uint32_t gpio_set(PinName pin) return (uint32_t)(1 << pin_index); // Return the pin mask } +int gpio_is_connected(const gpio_t *obj) +{ + return (obj->pin != (PinName) NC); +} + void gpio_init(gpio_t *obj, PinName pin) { obj->pin = pin; diff --git a/targets/TARGET_NUVOTON/TARGET_M480/gpio_api.c b/targets/TARGET_NUVOTON/TARGET_M480/gpio_api.c index 1dac0de6af..9b7b15503e 100644 --- a/targets/TARGET_NUVOTON/TARGET_M480/gpio_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M480/gpio_api.c @@ -37,6 +37,11 @@ uint32_t gpio_set(PinName pin) return (uint32_t)(1 << pin_index); // Return the pin mask } +int gpio_is_connected(const gpio_t *obj) +{ + return (obj->pin != (PinName) NC); +} + void gpio_init(gpio_t *obj, PinName pin) { obj->pin = pin; diff --git a/targets/TARGET_NUVOTON/TARGET_NANO100/gpio_api.c b/targets/TARGET_NUVOTON/TARGET_NANO100/gpio_api.c index 8a3a05332f..ac7a896ee2 100644 --- a/targets/TARGET_NUVOTON/TARGET_NANO100/gpio_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NANO100/gpio_api.c @@ -34,6 +34,11 @@ uint32_t gpio_set(PinName pin) return (uint32_t)(1 << pin_index); // Return the pin mask } +int gpio_is_connected(const gpio_t *obj) +{ + return (obj->pin != (PinName) NC); +} + void gpio_init(gpio_t *obj, PinName pin) { obj->pin = pin; diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_api.c index 39f4e8e30b..27589ccc39 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_api.c @@ -37,6 +37,11 @@ uint32_t gpio_set(PinName pin) return (uint32_t)(1 << pin_index); // Return the pin mask } +int gpio_is_connected(const gpio_t *obj) +{ + return (obj->pin != (PinName) NC); +} + void gpio_init(gpio_t *obj, PinName pin) { obj->pin = pin; From 0e9249a38198f22a51962daf2ef1b3a4fd122160 Mon Sep 17 00:00:00 2001 From: chrisyang Date: Mon, 15 Jan 2018 15:08:13 +0800 Subject: [PATCH 041/133] rtl8195am - move region headers to 0xb000 and 0xc000 The new layout is as follows: 0x000000 - 0x008000 => bootloader 0x008000 - 0x00b000 => system sectors 0x00b000 - 0x00c000 => region1 header 0x00c000 - 0x00d000 => region2 header 0x00d000 - 0x010000 => reserved 0x010000 - 0x040000 => mbed file system 0x040000 - 0x120000 => region1 image 0x120000 - 0x200000 => region2 image This is to ensure when daplink erases sections, both regions' headers are erased properly. --- targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c | 28 +++++++++--------- targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h | 11 +++++-- tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin | Bin 262144 -> 262144 bytes tools/targets/REALTEK_RTL8195AM.py | 3 +- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c index 565b149a97..58127d457e 100644 --- a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c +++ b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c @@ -23,24 +23,24 @@ static flash_t flash_obj; -void OTA_ReadHeader(uint32_t base, imginfo_t *img) +void OTA_ReadHeader(uint32_t addr, imginfo_t *img) { uint32_t epoch_hi, epoch_lo; - if (base != OTA_REGION1_BASE || base != OTA_REGION2_BASE) { + if (addr != OTA_REGION1_HEADER || addr != OTA_REGION2_HEADER) { return; } - flash_ext_read_word(&flash_obj, base + OTA_TAG_OFS, &img->tag); - flash_ext_read_word(&flash_obj, base + OTA_VER_OFS, &img->ver); - flash_ext_read_word(&flash_obj, base + OTA_EPOCH_OFS, &epoch_hi); - flash_ext_read_word(&flash_obj, base + OTA_EPOCH_OFS + 4, &epoch_lo); + flash_ext_read_word(&flash_obj, addr + OTA_TAG_OFS, &img->tag); + flash_ext_read_word(&flash_obj, addr + OTA_VER_OFS, &img->ver); + flash_ext_read_word(&flash_obj, addr + OTA_EPOCH_OFS, &epoch_hi); + flash_ext_read_word(&flash_obj, addr + OTA_EPOCH_OFS + 4, &epoch_lo); img->timestamp = ((uint64_t)epoch_hi << 32) | (uint64_t) epoch_lo; - flash_ext_read_word(&flash_obj, base + OTA_SIZE_OFS, &img->size); - flash_ext_stream_read(&flash_obj, base + OTA_HASH_OFS, 32, img->hash); - flash_ext_stream_read(&flash_obj, base + OTA_CAMPAIGN_OFS, 16, img->campaign); - flash_ext_read_word(&flash_obj, base + OTA_CRC32_OFS, &img->crc32); + flash_ext_read_word(&flash_obj, addr + OTA_SIZE_OFS, &img->size); + flash_ext_stream_read(&flash_obj, addr + OTA_HASH_OFS, 32, img->hash); + flash_ext_stream_read(&flash_obj, addr + OTA_CAMPAIGN_OFS, 16, img->campaign); + flash_ext_read_word(&flash_obj, addr + OTA_CRC32_OFS, &img->crc32); } bool OTA_CheckHeader(imginfo_t *img) @@ -61,9 +61,9 @@ bool OTA_CheckHeader(imginfo_t *img) return true; } -void OTA_GetImageInfo(uint32_t base, imginfo_t *img) +void OTA_GetImageInfo(uint32_t header, imginfo_t *img) { - OTA_ReadHeader(base, img); + OTA_ReadHeader(header, img); if (!OTA_CheckHeader(img)) { img->timestamp = 0; @@ -77,8 +77,8 @@ uint32_t OTA_GetUpdateBase(void) { imginfo_t img1, img2; - OTA_GetImageInfo(OTA_REGION1_BASE, &img1); - OTA_GetImageInfo(OTA_REGION2_BASE, &img2); + OTA_GetImageInfo(OTA_REGION1_HEADER, &img1); + OTA_GetImageInfo(OTA_REGION2_HEADER, &img2); if (img1.valid && img2.valid) { if (img1.timestamp < img2.timestamp) { diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h index bea950e13e..7920c64b78 100644 --- a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h +++ b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h @@ -22,17 +22,20 @@ #define FLASH_SECTOR_SIZE 0x1000 #define FLASH_SECTOR_MASK ~(FLASH_SECTOR_SIZE - 1) +#define OTA_REGION1_HEADER 0x0b000 +#define OTA_REGION2_HEADER 0x0c000 +#define OTA_REGION2_BASE 0x120000 #define OTA_REGION1_BASE 0x40000 #define OTA_REGION2_BASE 0x120000 #define OTA_REGION1_SIZE 0xe0000 #define OTA_REGION2_SIZE 0xe0000 #define OTA_REGION_SIZE 0xe0000 -#define OTA_MBED_FS_BASE 0xb000 +#define OTA_MBED_FS_BASE 0x10000 +#define OTA_MBED_FS_SIZE 0x30000 #define OTA_CRC32_LEN 0x44 #define OTA_HEADER_LEN 0x48 -#define OTA_HEADER_OFS 0x0 #define OTA_TAG_OFS 0x0 #define OTA_VER_OFS 0x4 #define OTA_EPOCH_OFS 0x8 @@ -57,6 +60,8 @@ typedef struct imginfo_s { uint8_t campaign[16]; uint32_t crc32; bool valid; + uint32_t header_addr; + uint32_t image_addr; } imginfo_t; #ifdef __cplusplus @@ -64,7 +69,7 @@ extern "C" { #endif extern void OTA_GetImageInfo(uint32_t base, imginfo_t *info); -extern uint32_t OTA_GetUpdateBase(void); +extern uint32_t OTA_GetUpdateRegion(void); extern uint32_t OTA_UpdateHeader(uint32_t base, imginfo_t *img); extern uint32_t OTA_UpdateImage(uint32_t base, uint32_t offset, uint32_t len, uint8_t *data); diff --git a/tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin b/tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin index 0ca1906689f50af8db41633ce4908f8e2b2a5299..05a44db71b3293a6722a82f6aecd3addb277df37 100644 GIT binary patch delta 4011 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 delta 2965 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 diff --git a/tools/targets/REALTEK_RTL8195AM.py b/tools/targets/REALTEK_RTL8195AM.py index 24e9b79ceb..c5670df482 100644 --- a/tools/targets/REALTEK_RTL8195AM.py +++ b/tools/targets/REALTEK_RTL8195AM.py @@ -255,7 +255,9 @@ def create_daplink(image_bin, ram1_bin, ram2_bin): output = open(image_bin, "wb") append_image_file(ram1_bin, output) + append_image_file(ram2_bin, output) + output.seek(0xb000) line = "" for key in ['tag', 'ver', 'timestamp', 'size', 'hash', 'campaign']: line += RAM2_HEADER[key] @@ -264,7 +266,6 @@ def create_daplink(image_bin, ram1_bin, ram2_bin): RAM2_HEADER['crc32'] = format_number(crc32_checksum(line), 8) output.write(RAM2_HEADER['crc32']) - append_image_file(ram2_bin, output) output.close() # ---------------------------- From 9e813569f7144993644b974f09a76d0a2d9d6ff5 Mon Sep 17 00:00:00 2001 From: chrisyang Date: Tue, 16 Jan 2018 13:52:16 +0800 Subject: [PATCH 042/133] rtl8195am - reorder some defines properly in ota header file --- targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h | 1 - tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin | Bin 262144 -> 262144 bytes 2 files changed, 1 deletion(-) diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h index 7920c64b78..81d89ad6d6 100644 --- a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h +++ b/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h @@ -24,7 +24,6 @@ #define OTA_REGION1_HEADER 0x0b000 #define OTA_REGION2_HEADER 0x0c000 -#define OTA_REGION2_BASE 0x120000 #define OTA_REGION1_BASE 0x40000 #define OTA_REGION2_BASE 0x120000 #define OTA_REGION1_SIZE 0xe0000 diff --git a/tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin b/tools/bootloaders/REALTEK_RTL8195AM/ram_1.bin index 05a44db71b3293a6722a82f6aecd3addb277df37..5179455fb5bd97b7ed828400355f94582695487c 100644 GIT binary patch delta 664 zcmXwzO=uHA6vt<>4Wy{)YMmM|0rlywcwk0W|i3v>7Y&6CXTB$;6QCg@_=|Ry; zKtYNJg|W5uCL(y~A#o21g8euZ8^vP^y-7`T>J}r3jl1jYf`|9!_kSP%H-!RSDA2ye z#rgSY`S#zHzB0AFCERR^0Ib^q9T5fxB4I(Om3*7@==T;}po%w|ZLL!^C1FLN>uu5Y z4k)i$ZJc#40}cLc@*E<*Oa5@W4oBw#ZKm zV=v?3bJC>??)>Fuz9*N8E6|c4WGLW|*9(UXmBFKopC8*#q`MJwe~YD*XB0D?Rdg{b zx${v8a$b^2;5Q7}nJzN@B{L7jcaVC;eu}FZmEl zCRoI0pfc0qP_|z1W$U4s-r)3O>1_RZN46d#%A>QyrAKq8^hUS#qIo?;m3~Y)@p$Jo z+jN0MXjo_C8`1RvkH~R`?FPt1lWaSw*FvxB?*q}jc<6_ z;qK0EdU0C0MHf?tDFUN0Pi_GR`bVlhcgV}iag{RhHy}ReK-kW1=rlW zup)1I>_o`hN1R4Y_0AA+_vo^PJc5sGRq!PD&=}yx+lUzI`bF}Yzy>L`ck4#KJ@}M} dx!{JCh%rHaP(e`O!y;t*AYN&4r*rpq?mh53zt8vle!uVUq*5rA zLj3%EIz6yZ^stH2LHz80XM80rfKL~%RI|3c&6D=@<>PL!>c?k#1|hC#>c z#Y1m^@}goDY`Y`S;GD^$CNG(M-sJZtUo!b!ejhoj`9(ZLC9EQs0eO+xQHFmGlqY0S0HN;Edu&(l&hdTPIhVLfAW@=(hdgeT>f zhocY{$cAGF7UUn!S}Nq Date: Wed, 17 Jan 2018 14:30:45 +0200 Subject: [PATCH 043/133] NSAPI: Add Nanostack multicast membership support Add support for recently introduced NSAPI generic socket options to control group membership. Previously applications using Nanostack would have had to use Nanostack's native socket options. --- .../NanostackInterface.cpp | 61 ++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/features/nanostack/FEATURE_NANOSTACK/nanostack-interface/NanostackInterface.cpp b/features/nanostack/FEATURE_NANOSTACK/nanostack-interface/NanostackInterface.cpp index 739871c540..c85cfca2a9 100644 --- a/features/nanostack/FEATURE_NANOSTACK/nanostack-interface/NanostackInterface.cpp +++ b/features/nanostack/FEATURE_NANOSTACK/nanostack-interface/NanostackInterface.cpp @@ -128,6 +128,20 @@ static void convert_ns_addr_to_mbed(SocketAddress *s_addr, const ns_address_t *n s_addr->set_ip_bytes(ns_addr->address, NSAPI_IPv6); } +static int8_t find_interface_by_address(const uint8_t target_addr[16]) +{ + for (int if_id = 1; if_id <= 127; if_id++) { + int i = 0; + uint8_t if_addr[16]; + while (arm_net_address_list_get_next(if_id, &i, if_addr) == 0) { + if (memcmp(target_addr, if_addr, 16) == 0) { + return if_id; + } + } + } + return -1; +} + void* NanostackSocket::operator new(std::size_t sz) { return MALLOC(sz); } @@ -693,17 +707,50 @@ nsapi_error_t NanostackInterface::setsockopt(void *handle, int level, int optnam return NSAPI_ERROR_NO_SOCKET; } - nsapi_error_t ret; - NanostackLockGuard lock; - if (::socket_setsockopt(socket->socket_id, level, optname, optval, optlen) == 0) { - ret = NSAPI_ERROR_OK; - } else { - ret = NSAPI_ERROR_PARAMETER; + ns_ipv6_mreq_t ns_mreq; + + if (level == NSAPI_SOCKET) { + switch (optname) { + case NSAPI_ADD_MEMBERSHIP: + case NSAPI_DROP_MEMBERSHIP: { + if (optlen != sizeof(nsapi_ip_mreq_t)) { + return NSAPI_ERROR_PARAMETER; + } + const nsapi_ip_mreq_t *imr = static_cast(optval); + + /* Check address types are IPv6, or unspecified for interface */ + if (imr->imr_multiaddr.version != NSAPI_IPv6 || + (imr->imr_interface.version != NSAPI_UNSPEC && imr->imr_interface.version != NSAPI_IPv6)) { + return NSAPI_ERROR_PARAMETER; + } + + /* Convert all parameters to Nanostack native, and proceed with setsockopt */ + memcpy(ns_mreq.ipv6mr_multiaddr, imr->imr_multiaddr.bytes, 16); + if (imr->imr_interface.version == NSAPI_UNSPEC || memcmp(imr->imr_interface.bytes, ns_in6addr_any, 16) == 0) { + ns_mreq.ipv6mr_interface = 0; + } else { + // If this fails, Nanostack will itself fault the invalid -1 interface ID + ns_mreq.ipv6mr_interface = find_interface_by_address(imr->imr_interface.bytes); + } + + level = SOCKET_IPPROTO_IPV6; + optname = optname == NSAPI_ADD_MEMBERSHIP ? SOCKET_IPV6_JOIN_GROUP : SOCKET_IPV6_LEAVE_GROUP; + optval = &ns_mreq; + optlen = sizeof ns_mreq; + break; + } + default: + return NSAPI_ERROR_PARAMETER; + } } - return ret; + if (::socket_setsockopt(socket->socket_id, level, optname, optval, optlen) == 0) { + return NSAPI_ERROR_OK; + } else { + return NSAPI_ERROR_PARAMETER; + } } nsapi_error_t NanostackInterface::getsockopt(void *handle, int level, int optname, void *optval, unsigned *optlen) From c917231427d88b2ff81752b43783e0b2194e8846 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 27 Dec 2017 13:53:35 -0600 Subject: [PATCH 044/133] littlefs: Fixed issue with immediate exhaustion and small unaligned storage This was a small hole in the logic that handles initializing the lookahead buffer. To imitate exhaustion (so the block allocator will trigger a scan), the lookahead buffer is rewound a full lookahead and set up to look like it is exhausted. However, unlike normal allocation, this rewind was not kept aligned to a multiple of the scan size, which is limited by both the lookahead buffer and the total storage size. This bug went unnoticed for so long because it only causes problems when the block device is both: 1. Not aligned to the lookahead buffer (not a power of 2) 2. Smaller than the lookahead buffer While this seems like a strange corner case for a block device, this turned out to be very common for internal flash, especially when a handleful of blocks are reserved for code. --- .travis.yml | 9 ++++----- features/filesystem/littlefs/littlefs/.travis.yml | 7 +++---- features/filesystem/littlefs/littlefs/lfs.c | 6 +++--- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 15296cb3f1..40d81b43e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -142,11 +142,10 @@ matrix: # Run local littlefs tests - CFLAGS="-Wno-format" make -C$LITTLEFS/littlefs test QUIET=1 # Run local littlefs tests with set of variations - - CFLAGS="-Wno-format -DLFS_READ_SIZE=64 -DLFS_PROG_SIZE=64" make -C$LITTLEFS/littlefs test QUIET=1 - - CFLAGS="-Wno-format -DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make -C$LITTLEFS/littlefs test QUIET=1 - - CFLAGS="-Wno-format -DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make -C$LITTLEFS/littlefs test QUIET=1 - - CFLAGS="-Wno-format -DLFS_BLOCK_COUNT=1023" make -C$LITTLEFS/littlefs test QUIET=1 - - CFLAGS="-Wno-format -DLFS_LOOKAHEAD=2048" make -C$LITTLEFS/littlefs test QUIET=1 + - CFLAGS="-Wno-format -DLFS_READ_SIZE=64 -DLFS_PROG_SIZE=64" make -C$LITTLEFS/littlefs test QUIET=1 + - CFLAGS="-Wno-format -DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make -C$LITTLEFS/littlefs test QUIET=1 + - CFLAGS="-Wno-format -DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make -C$LITTLEFS/littlefs test QUIET=1 + - CFLAGS="-Wno-format -DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" make -C$LITTLEFS/littlefs test QUIET=1 # Self-hosting littlefs fuzz test with littlefs-fuse - make -Clittlefs_fuse - littlefs_fuse/lfs --format /dev/loop0 diff --git a/features/filesystem/littlefs/littlefs/.travis.yml b/features/filesystem/littlefs/littlefs/.travis.yml index d673c159ab..c17af8b17b 100644 --- a/features/filesystem/littlefs/littlefs/.travis.yml +++ b/features/filesystem/littlefs/littlefs/.travis.yml @@ -12,10 +12,9 @@ script: - make test QUIET=1 # run tests with a few different configurations - - CFLAGS="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make test QUIET=1 - - CFLAGS="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make test QUIET=1 - - CFLAGS="-DLFS_BLOCK_COUNT=1023" make test QUIET=1 - - CFLAGS="-DLFS_LOOKAHEAD=2048" make test QUIET=1 + - CFLAGS="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make test QUIET=1 + - CFLAGS="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make test QUIET=1 + - CFLAGS="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" make test QUIET=1 # self-host with littlefs-fuse for fuzz test - make -C littlefs-fuse diff --git a/features/filesystem/littlefs/littlefs/lfs.c b/features/filesystem/littlefs/littlefs/lfs.c index cc6713a03d..f83624ec92 100644 --- a/features/filesystem/littlefs/littlefs/lfs.c +++ b/features/filesystem/littlefs/littlefs/lfs.c @@ -2039,9 +2039,9 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { return err; } - // setup free lookahead - lfs->free.begin = -lfs->cfg->lookahead; - lfs->free.off = lfs->cfg->lookahead; + // setup free lookahead, rewind so first allocation triggers a scan + lfs->free.begin = -lfs_min(lfs->cfg->lookahead, lfs->cfg->block_count); + lfs->free.off = -lfs->free.begin; lfs->free.end = lfs->free.begin + lfs->free.off + lfs->cfg->block_count; // load superblock From 08a4b0e4b654b68cd8754dd3e372f29fc38963cc Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Tue, 9 Jan 2018 15:01:16 -0600 Subject: [PATCH 045/133] Added COMMON folder for tests A COMMON folder allows code reuse across different test cases. This avoids code duplication or code enterying the application space. The COMMON folder is uppercase to match naming conventions in Mbed OS. --- .../COMMON}/atomic_usage.cpp | 0 .../COMMON}/atomic_usage.h | 0 tools/test_api.py | 61 ++++++++++++++----- 3 files changed, 45 insertions(+), 16 deletions(-) rename features/filesystem/littlefs/{TESTS_COMMON => TESTS/COMMON}/atomic_usage.cpp (100%) rename features/filesystem/littlefs/{TESTS_COMMON => TESTS/COMMON}/atomic_usage.h (100%) diff --git a/features/filesystem/littlefs/TESTS_COMMON/atomic_usage.cpp b/features/filesystem/littlefs/TESTS/COMMON/atomic_usage.cpp similarity index 100% rename from features/filesystem/littlefs/TESTS_COMMON/atomic_usage.cpp rename to features/filesystem/littlefs/TESTS/COMMON/atomic_usage.cpp diff --git a/features/filesystem/littlefs/TESTS_COMMON/atomic_usage.h b/features/filesystem/littlefs/TESTS/COMMON/atomic_usage.h similarity index 100% rename from features/filesystem/littlefs/TESTS_COMMON/atomic_usage.h rename to features/filesystem/littlefs/TESTS/COMMON/atomic_usage.h diff --git a/tools/test_api.py b/tools/test_api.py index 2e7d60a275..4569ea3597 100644 --- a/tools/test_api.py +++ b/tools/test_api.py @@ -28,6 +28,7 @@ import argparse import datetime import threading import ctypes +import functools from types import ListType from colorama import Fore, Back, Style from prettytable import PrettyTable @@ -71,7 +72,6 @@ from tools.utils import argparse_filestring_type from tools.utils import argparse_uppercase_type from tools.utils import argparse_lowercase_type from tools.utils import argparse_many -from tools.utils import get_path_depth import tools.host_tests.host_tests_plugins as host_tests_plugins @@ -2019,9 +2019,15 @@ def find_tests(base_dir, target_name, toolchain_name, app_config=None): toolchain_name: name of the toolchain to use for scanning (ex. 'GCC_ARM') options: Compile options to pass to the toolchain (ex. ['debug-info']) app_config - location of a chosen mbed_app.json file + + returns a dictionary where keys are the test name, and the values are + lists of paths needed to biuld the test. """ + # Temporary structure: tests referenced by (name, base, group, case) tuple tests = {} + # List of common folders: (predicate function, path) tuple + commons = [] # Prepare the toolchain toolchain = prepare_toolchain([base_dir], None, target_name, toolchain_name, @@ -2042,32 +2048,52 @@ def find_tests(base_dir, target_name, toolchain_name, app_config=None): # Loop through all subdirectories for d in test_resources.inc_dirs: - # If the test case folder is not called 'host_tests' and it is + # If the test case folder is not called 'host_tests' or 'COMMON' and it is # located two folders down from the main 'TESTS' folder (ex. TESTS/testgroup/testcase) # then add it to the tests - path_depth = get_path_depth(relpath(d, walk_base_dir)) - if path_depth == 2: + relative_path = relpath(d, walk_base_dir) + relative_path_parts = os.path.normpath(relative_path).split(os.sep) + if len(relative_path_parts) == 2: test_group_directory_path, test_case_directory = os.path.split(d) test_group_directory = os.path.basename(test_group_directory_path) - # Check to make sure discoverd folder is not in a host test directory - if test_case_directory != 'host_tests' and test_group_directory != 'host_tests': + # Check to make sure discoverd folder is not in a host test directory or common directory + special_dirs = ['host_tests', 'COMMON'] + if test_group_directory not in special_dirs and test_case_directory not in special_dirs: test_name = test_path_to_name(d, base_dir) - tests[test_name] = d + tests[(test_name, walk_base_dir, test_group_directory, test_case_directory)] = [d] - return tests + # Also find any COMMON paths, we'll add these later once we find all the base tests + if 'COMMON' in relative_path_parts: + if relative_path_parts[0] != 'COMMON': + def predicate(base_pred, group_pred, (name, base, group, case)): + return base == base_pred and group == group_pred + commons.append((functools.partial(predicate, walk_base_dir, relative_path_parts[0]), d)) + else: + def predicate(base_pred, (name, base, group, case)): + return base == base_pred + commons.append((functools.partial(predicate, walk_base_dir), d)) + + # Apply common directories + for pred, path in commons: + for test_identity, test_paths in tests.iteritems(): + if pred(test_identity): + test_paths.append(path) + + # Drop identity besides name + return {name: paths for (name, _, _, _), paths in tests.iteritems()} def print_tests(tests, format="list", sort=True): """Given a dictionary of tests (as returned from "find_tests"), print them in the specified format""" if format == "list": for test_name in sorted(tests.keys()): - test_path = tests[test_name] + test_path = tests[test_name][0] print "Test Case:" print " Name: %s" % test_name print " Path: %s" % test_path elif format == "json": - print json.dumps(tests, indent=2) + print json.dumps({test_name: test_path[0] for test_name, test_paths in tests}, indent=2) else: print "Unknown format '%s'" % format sys.exit(1) @@ -2164,13 +2190,16 @@ def build_tests(tests, base_source_paths, build_path, target, toolchain_name, jobs_count = int(jobs if jobs else cpu_count()) p = Pool(processes=jobs_count) results = [] - for test_name, test_path in tests.iteritems(): - test_build_path = os.path.join(build_path, test_path) - src_path = base_source_paths + [test_path] - bin_file = None - test_case_folder_name = os.path.basename(test_path) + for test_name, test_paths in tests.iteritems(): + if type(test_paths) != ListType: + test_paths = [test_paths] - args = (src_path, test_build_path, target, toolchain_name) + test_build_path = os.path.join(build_path, test_paths[0]) + src_paths = base_source_paths + test_paths + bin_file = None + test_case_folder_name = os.path.basename(test_paths[0]) + + args = (src_paths, test_build_path, target, toolchain_name) kwargs = { 'jobs': 1, 'clean': clean, From 8801b0f0e9552de4c74a05250097feb9e9e67ba3 Mon Sep 17 00:00:00 2001 From: Arto Kinnunen Date: Fri, 12 Jan 2018 14:02:31 +0200 Subject: [PATCH 046/133] Squashed 'features/nanostack/FEATURE_NANOSTACK/coap-service/' changes from d0a2597..8689fca 8689fca Reverting address check from transaction find (#89) ca3c3ab Fix transactions to handle all token lengths (#87) git-subtree-dir: features/nanostack/FEATURE_NANOSTACK/coap-service git-subtree-split: 8689fca7b18e03776dce7083a03bd570a8bc0d43 --- .../FEATURE_NANOSTACK/coap-service/Makefile | 3 --- .../source/coap_message_handler.c | 22 ++++++++++++------- .../source/include/coap_message_handler.h | 7 +++--- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile b/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile index c808df6170..f104a78110 100644 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile +++ b/features/nanostack/FEATURE_NANOSTACK/coap-service/Makefile @@ -48,10 +48,7 @@ override CFLAGS += -I$(EVENTLOOP_DIR)/nanostack-event-loop/ COAPSERVICE_DIR := ../coap-service override CFLAGS += -I$(COAPSERVICE_DIR)/coap-service/ override CFLAGS += -I$(COAPSERVICE_DIR)/source/include/ - -ifeq (Linux,$(shell uname)) override CFLAGS += -DHAVE_DEBUG -endif LIB = libcoap-service.a diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c index 3d6c91a031..1a28037455 100644 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c +++ b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/coap_message_handler.c @@ -46,13 +46,16 @@ static void own_free(void *ptr) static NS_LIST_DEFINE(request_list, coap_transaction_t, link); -static coap_transaction_t *transaction_find_client_by_token(uint8_t token[4]) +static coap_transaction_t *transaction_find_client_by_token(uint8_t *token, uint8_t token_len, const uint8_t address[static 16], uint16_t port) { + (void) address; + (void) port; coap_transaction_t *this = NULL; + ns_list_foreach(coap_transaction_t, cur_ptr, &request_list) { - if (memcmp(cur_ptr->token,token,4) == 0 && cur_ptr->client_request) { + if ((cur_ptr->token_len == token_len) && (memcmp(cur_ptr->token, token, token_len) == 0) && cur_ptr->client_request) { this = cur_ptr; - break; + break; } } return this; @@ -147,12 +150,13 @@ static int8_t coap_rx_function(sn_coap_hdr_s *resp_ptr, sn_nsdl_addr_s *address_ coap_transaction_t *this = NULL; (void)address_ptr; (void)param; + tr_warn("transaction was not handled %d", resp_ptr->msg_id); if (!resp_ptr) { return -1; } - if( resp_ptr->token_ptr ){ - this = transaction_find_client_by_token(resp_ptr->token_ptr); + if(resp_ptr->token_ptr){ + this = transaction_find_client_by_token(resp_ptr->token_ptr, resp_ptr->token_len, address_ptr->addr_ptr, address_ptr->port); } if (!this) { return 0; @@ -278,6 +282,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t memcpy(transaction_ptr->remote_address, source_addr_ptr, 16); if (coap_message->token_len) { memcpy(transaction_ptr->token, coap_message->token_ptr, coap_message->token_len); + transaction_ptr->token_len = coap_message->token_len; } transaction_ptr->remote_port = port; if (cb(socket_id, coap_message, transaction_ptr) < 0) { @@ -292,7 +297,7 @@ int16_t coap_message_handler_coap_msg_process(coap_msg_handler_t *handle, int8_t } else { coap_transaction_t *this = NULL; if (coap_message->token_ptr) { - this = transaction_find_client_by_token(coap_message->token_ptr); + this = transaction_find_client_by_token(coap_message->token_ptr, coap_message->token_len, source_addr_ptr, port); } if (!this) { tr_error("client transaction not found"); @@ -352,8 +357,9 @@ uint16_t coap_message_handler_request_send(coap_msg_handler_t *handle, int8_t se do{ randLIB_get_n_bytes_random(token,4); - }while(transaction_find_client_by_token(token)); + }while(transaction_find_client_by_token(token, 4, destination_addr, destination_port)); memcpy(transaction_ptr->token,token,4); + transaction_ptr->token_len = 4; request.token_ptr = transaction_ptr->token; request.token_len = 4; @@ -464,7 +470,7 @@ int8_t coap_message_handler_response_send_by_msg_id(coap_msg_handler_t *handle, response.payload_len = payload_len; response.payload_ptr = (uint8_t *) payload_ptr; // Cast away const and trust that nsdl doesn't modify... response.content_format = content_type; - response.token_len = 4; + response.token_len = transaction_ptr->token_len; response.token_ptr = transaction_ptr->token; response.msg_code = message_code; if (transaction_ptr->req_msg_type == COAP_MSG_TYPE_CONFIRMABLE) { diff --git a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h index a484216900..35c6af129b 100644 --- a/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h +++ b/features/nanostack/FEATURE_NANOSTACK/coap-service/source/include/coap_message_handler.h @@ -50,18 +50,19 @@ typedef struct coap_msg_handler_s { typedef struct coap_transaction { uint8_t remote_address[16]; uint8_t local_address[16]; - uint8_t token[4]; + uint8_t token[8]; uint32_t create_time; + uint8_t *data_ptr; + coap_message_handler_response_recv *resp_cb; uint16_t remote_port; uint16_t msg_id; uint16_t data_len; int8_t service_id; uint8_t options; - uint8_t *data_ptr; + uint8_t token_len; sn_coap_msg_type_e req_msg_type; bool client_request: 1; - coap_message_handler_response_recv *resp_cb; ns_list_link_t link; } coap_transaction_t; From 4e38baf6379b68da1af468ebf8c783a18a8fc988 Mon Sep 17 00:00:00 2001 From: Ashok Rao Date: Thu, 18 Jan 2018 17:08:59 +0000 Subject: [PATCH 047/133] Adding MTB MTS_Dragonfly as a new target --- .../PeripheralNames.h | 82 + .../TARGET_MTB_MTS_DRAGONFLY/PeripheralPins.c | 212 + .../TARGET_MTB_MTS_DRAGONFLY/PinNames.h | 230 + .../TOOLCHAIN_ARM_MICRO/startup_stm32f411xe.S | 373 + .../TOOLCHAIN_ARM_MICRO/stm32f411re.sct | 47 + .../TOOLCHAIN_ARM_STD/startup_stm32f411xe.S | 346 + .../device/TOOLCHAIN_ARM_STD/stm32f411re.sct | 47 + .../device/TOOLCHAIN_GCC_ARM/NUCLEO_F411RE.ld | 153 + .../TOOLCHAIN_GCC_ARM/startup_STM32F41x.S | 297 + .../TOOLCHAIN_IAR/startup_stm32f411xe.S | 523 + .../device/TOOLCHAIN_IAR/stm32f411xe.icf | 32 + .../TARGET_MTB_MTS_DRAGONFLY/device/cmsis.h | 38 + .../device/cmsis_nvic.h | 41 + .../device/hal_tick.h | 66 + .../device/stm32f411xe.h | 8683 +++++++++++++++++ .../device/stm32f4xx.h | 271 + .../device/system_clock.c | 246 + .../device/system_stm32f4xx.h | 125 + .../TARGET_MTB_MTS_DRAGONFLY/objects.h | 63 + .../onboard_modem_api.c | 65 + targets/targets.json | 41 + .../MTB_MTS_DRAGONFLY/bootloader.bin | Bin 0 -> 55608 bytes tools/targets/__init__.py | 5 + 23 files changed, 11986 insertions(+) create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralPins.c create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/startup_stm32f411xe.S create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/stm32f411re.sct create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/startup_stm32f411xe.S create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/stm32f411re.sct create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/NUCLEO_F411RE.ld create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/startup_STM32F41x.S create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/startup_stm32f411xe.S create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/stm32f411xe.icf create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis_nvic.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/stm32f411xe.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/stm32f4xx.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_clock.c create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_stm32f4xx.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/objects.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/onboard_modem_api.c create mode 100644 tools/bootloaders/MTB_MTS_DRAGONFLY/bootloader.bin diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h new file mode 100644 index 0000000000..15a5c2bc7a --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h @@ -0,0 +1,82 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#ifndef MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + ADC_1 = (int)ADC1_BASE +} ADCName; + +typedef enum { + UART_1 = (int)USART1_BASE, + UART_2 = (int)USART2_BASE, + UART_6 = (int)USART6_BASE +} UARTName; + +#define STDIO_UART_TX PB_6 +#define STDIO_UART_RX PB_7 +#define STDIO_UART UART_1 + +typedef enum { + SPI_1 = (int)SPI1_BASE, + SPI_2 = (int)SPI2_BASE, + SPI_3 = (int)SPI3_BASE, + SPI_4 = (int)SPI4_BASE, + SPI_5 = (int)SPI5_BASE +} SPIName; + +typedef enum { + I2C_1 = (int)I2C1_BASE, + I2C_2 = (int)I2C2_BASE, + I2C_3 = (int)I2C3_BASE +} I2CName; + +typedef enum { + PWM_1 = (int)TIM1_BASE, + PWM_2 = (int)TIM2_BASE, + PWM_3 = (int)TIM3_BASE, + PWM_4 = (int)TIM4_BASE, + PWM_5 = (int)TIM5_BASE, + PWM_9 = (int)TIM9_BASE, + PWM_10 = (int)TIM10_BASE, + PWM_11 = (int)TIM11_BASE +} PWMName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralPins.c new file mode 100644 index 0000000000..7c2b21786f --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralPins.c @@ -0,0 +1,212 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +#include "PeripheralPins.h" + +// ===== +// Note: Commented lines are alternative possibilities which are not used per default. +// If you change them, you will have also to modify the corresponding xxx_api.c file +// for pwmout, analogin, analogout, ... +// ===== + +//*** ADC *** + +const PinMap PinMap_ADC[] = { + {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 + {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 + {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 + {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 + {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4 + {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 + {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 + {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 + {PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 + {PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + {PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 + {PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 + {PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 + {PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13 + {PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14 + {PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 + {NC, NC, 0} +}; + +const PinMap PinMap_ADC_Internal[] = { + {ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // See in analogin_api.c the correct ADC channel used + {ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // See in analogin_api.c the correct ADC channel used + {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // See in analogin_api.c the correct ADC channel used + {NC, NC, 0} +}; + +//*** I2C *** + +const PinMap PinMap_I2C_SDA[] = { + {PB_3, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PB_4, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, + {PB_7, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, +// {PB_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, // Warning: also on SCL + {PB_9, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // ARDUINO +// {PB_9, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PC_9, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {NC, NC, 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {PB_6, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // ARDUINO + {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + {NC, NC, 0} +}; + +//*** PWM *** + +// TIM5 cannot be used because already used by the us_ticker +const PinMap PinMap_PWM[] = { + {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 +// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 +// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 +// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 +// {PA_2, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 +// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 +// {PA_3, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO +// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO + {PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + {PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + + {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N +// {PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N +// {PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - ARDUINO + {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 - ARDUINO + {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 - ARDUINO + {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 + {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 +// {PB_8, PWM_10,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10,1, 0)}, // TIM10_CH1 + {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 +// {PB_9, PWM_11,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11,1, 0)}, // TIM11_CH1 + {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 - ARDUINO + {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + + {PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO + {PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + + {NC, NC, 0} +}; + +//*** SERIAL *** + +const PinMap PinMap_UART_TX[] = { + {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_11, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PA_15, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_7, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RX[] = { + {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_3, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_6, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +//*** SPI *** + +const PinMap PinMap_SPI_MOSI[] = { + {PA_1, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PA_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO + {PA_10, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, +// {PB_5, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_8, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO + {PA_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)}, + {PA_12, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, +// {PB_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SCLK[] = { + {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO + {PB_0, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_3, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, +// {PB_12, SPI_3, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF7_SPI3)}, // Warning: also on NSS + {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, +// {PB_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)}, + {PC_7, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SSEL[] = { + {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, +// {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, + {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, +// {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, + {PB_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, + {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, // Warning: also on SCLK +// {PB_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI4)}, // Warning: also on SCLK + {NC, NC, 0} +}; diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h new file mode 100644 index 0000000000..941228cae4 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h @@ -0,0 +1,230 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" +#include "PinNamesTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + // Not connected + NC = -1, + + PA_0 = 0x00, + PA_1 = 0x01, + PA_2 = 0x02, + PA_3 = 0x03, + PA_4 = 0x04, + PA_5 = 0x05, + PA_6 = 0x06, + PA_7 = 0x07, + PA_8 = 0x08, + PA_9 = 0x09, + PA_10 = 0x0A, + PA_11 = 0x0B, + PA_12 = 0x0C, + PA_13 = 0x0D, + PA_14 = 0x0E, + PA_15 = 0x0F, + + PB_0 = 0x10, + PB_1 = 0x11, + PB_2 = 0x12, + PB_3 = 0x13, + PB_4 = 0x14, + PB_5 = 0x15, + PB_6 = 0x16, + PB_7 = 0x17, + PB_8 = 0x18, + PB_9 = 0x19, + PB_10 = 0x1A, + PB_12 = 0x1C, + PB_13 = 0x1D, + PB_14 = 0x1E, + PB_15 = 0x1F, + + PC_0 = 0x20, + PC_1 = 0x21, + PC_2 = 0x22, + PC_3 = 0x23, + PC_4 = 0x24, + PC_5 = 0x25, + PC_6 = 0x26, + PC_7 = 0x27, + PC_8 = 0x28, + PC_9 = 0x29, + PC_10 = 0x2A, + PC_11 = 0x2B, + PC_12 = 0x2C, + PC_13 = 0x2D, + PC_14 = 0x2E, + PC_15 = 0x2F, + + PD_2 = 0x32, + + PH_0 = 0x70, + PH_1 = 0x71, + + // ADC internal channels + ADC_TEMP = 0xF0, + ADC_VREF = 0xF1, + ADC_VBAT = 0xF2, + + // Module pins + // Defined based on the external pin (40-pin connector) alternate function mapping (Page 15 of MTQ-H5-B01 device guide) + // Device guide used: S000628,Version1.4 + P_1 = PB_6, + P_2 = PA_14, + P_3 = PA_15, + P_4 = PB_4, + P_5 = NC, + P_6 = NC, + P_7 = NC, + P_8 = NC, + P_9 = PA_2, + P_10 = PA_7, + P_11 = PB_1, + P_12 = PA_1, + P_13 = NC, + P_14 = PB_5, + P_15 = PA_5, + P_16 = PB_8, + P_17 = PB_15, + P_18 = PC_2, + P_19 = PB_0, + P_20 = PC_0, + P_21 = PC_1, + P_22 = PC_4, + P_23 = PB_13, + P_24 = PC_9, + P_25 = PB_9, + P_26 = PA_6, + P_27 = PC_8, + P_28 = NC, + P_29 = PA_0, + P_30 = PA_9, + P_31 = PA_8, + P_32 = PA_3, + P_33 = NC, + P_34 = NC, + P_35 = NC, + P_36 = NC, + P_37 = NC, + P_38 = PB_3, + P_39 = PA_13, + P_40 = PB_7, + + //DAPLink + USBTX = MBED_CONF_TARGET_USB_TX, + USBRX = MBED_CONF_TARGET_USB_RX, + SWDIO = PA_13, + SWCLK = PA_14, + + I2C1_SCL = PB_8, + I2C1_SDA = PB_9, + I2C3_SCL = PA_8, + I2C3_SDA = PC_9, + + I2C_SCL = I2C1_SCL, + I2C_SDA = I2C1_SDA, + + SPI1_MOSI = PB_5, + SPI1_MISO = PA_6, + SPI1_SCK = PA_5, + SPI2_MOSI = PB_15, + SPI2_MISO = PC_2, + SPI2_SCK = PB_13, + + SPI_MOSI = SPI1_MOSI, + SPI_MISO = SPI1_MISO, + SPI_SCK = SPI1_SCK, + SPI_CS1 = PA_3, //LCD CS + SPI_CS2 = PA_15, //SD Card CS + + SERIAL_TX = PA_2, + SERIAL_RX = PA_3, + SERIAL_RTS = PA_0, + SERIAL_CTS = PA_1, + SERIAL_DCD = PA_7, + SERIAL_DSR = PA_9, + SERIAL_DTR = PA_8, + SERIAL_RI = PB_1, + + WAKEUP = PA_0, + + // Generic signals namings + LED1 = PA_7, + LED2 = PC_4, + LED3 = PB_13, //MTB mapped to LINK_STATUS pin on module. + SW1 = PB_4, + GPIO1 = PC_8, + GPIO3 = PB_1, + AIN0 = PB_0, + AIN1 = PC_0, + AIN2 = PC_1, + + //Standardized button names + BUTTON1 = SW1, + + RADIO_TX = PC_7, + RADIO_RX = PC_6, + RADIO_RTS = PB_10, + RADIO_CTS = PB_12, + RADIO_DCD = NC, + RADIO_DSR = NC, + RADIO_DTR = NC, + RADIO_RI = NC, + MDMPWRON = PC_13, // 3G_ONOFF DragonFly Design Guide, Page No. 16 + MDMTXD = RADIO_TX, // Transmit Data + MDMRXD = RADIO_RX, // Receive Data + MDMRTS = RADIO_RTS, // Request to Send + MDMCTS = RADIO_CTS, // Clear to Send + MDMDCD = RADIO_DCD, // Data Carrier Detect + MDMDSR = RADIO_DSR, // Data Set Ready + MDMDTR = RADIO_DTR, // Data Terminal Ready + MDMRI = RADIO_RI, // Ring Indicator + +} PinName; + +#define ACTIVE_HIGH_POLARITY 1 +#define ACTIVE_LOW_POLARITY 0 + +#define MDM_PIN_POLARITY ACTIVE_HIGH_POLARITY + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/startup_stm32f411xe.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/startup_stm32f411xe.S new file mode 100644 index 0000000000..aa7d51ad14 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/startup_stm32f411xe.S @@ -0,0 +1,373 @@ +;******************** (C) COPYRIGHT 2014 STMicroelectronics ******************** +;* File Name : startup_stm32f411xe.s +;* Author : MCD Application Team +;* Version : V2.1.0 +;* Date : 19-June-2014 +;* Description : STM32F411xExx devices vector table for MDK-ARM_MICRO toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 + EXPORT __initial_sp + +Stack_Mem SPACE Stack_Size +__initial_sp EQU 0x20020000 ; Top of RAM + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 + EXPORT __heap_base + EXPORT __heap_limit + +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit EQU (__initial_sp - Stack_Size) + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD 0 ; Reserved + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD FPU_IRQHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +DMA1_Stream7_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +FPU_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler + + B . + + ENDP + + ALIGN + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/stm32f411re.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/stm32f411re.sct new file mode 100644 index 0000000000..491087ba47 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_MICRO/stm32f411re.sct @@ -0,0 +1,47 @@ +; Scatter-Loading Description File +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2014, STMicroelectronics +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; 1. Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; 3. Neither the name of STMicroelectronics nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; STM32F411RE: 512 KB FLASH (0x80000) + 128 KB SRAM (0x20000) +; FIRST 64 KB FLASH FOR BOOTLOADER +; REST 448 KB FLASH FOR APPLICATION +LR_IROM1 0x08010000 0x70000 { ; load region size_region + + ER_IROM1 0x08010000 0x70000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + + ; Total: 102 vectors = 408 bytes (0x198) to be reserved in RAM + RW_IRAM1 (0x20000000+0x198) (0x20000-0x198) { ; RW data + .ANY (+RW +ZI) + } + +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/startup_stm32f411xe.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/startup_stm32f411xe.S new file mode 100644 index 0000000000..effaaf1e52 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/startup_stm32f411xe.S @@ -0,0 +1,346 @@ +;******************** (C) COPYRIGHT 2014 STMicroelectronics ******************** +;* File Name : startup_stm32f411xe.s +;* Author : MCD Application Team +;* Version : V2.1.0 +;* Date : 19-June-2014 +;* Description : STM32F411xExx devices vector table for MDK-ARM_STD toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +;******************************************************************************* + +__initial_sp EQU 0x20020000 ; Top of RAM + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD 0 ; Reserved + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD FPU_IRQHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +DMA1_Stream7_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +FPU_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler + + B . + + ENDP + + ALIGN + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/stm32f411re.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/stm32f411re.sct new file mode 100644 index 0000000000..491087ba47 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_ARM_STD/stm32f411re.sct @@ -0,0 +1,47 @@ +; Scatter-Loading Description File +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2014, STMicroelectronics +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; 1. Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; 3. Neither the name of STMicroelectronics nor the names of its contributors +; may be used to endorse or promote products derived from this software +; without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; STM32F411RE: 512 KB FLASH (0x80000) + 128 KB SRAM (0x20000) +; FIRST 64 KB FLASH FOR BOOTLOADER +; REST 448 KB FLASH FOR APPLICATION +LR_IROM1 0x08010000 0x70000 { ; load region size_region + + ER_IROM1 0x08010000 0x70000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + + ; Total: 102 vectors = 408 bytes (0x198) to be reserved in RAM + RW_IRAM1 (0x20000000+0x198) (0x20000-0x198) { ; RW data + .ANY (+RW +ZI) + } + +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/NUCLEO_F411RE.ld b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/NUCLEO_F411RE.ld new file mode 100644 index 0000000000..a832fffb7e --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/NUCLEO_F411RE.ld @@ -0,0 +1,153 @@ +/* Linker script for STM32F411 */ + +/* Linker script to configure memory regions. */ +MEMORY +{ + /* First 64kB of flash reserved for bootloader */ + /* Other 448kB for application */ + FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 448K +/* CCM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K */ + RAM (rwx) : ORIGIN = 0x20000198, LENGTH = 128k - 0x198 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + end = __end__; + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/startup_STM32F41x.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/startup_STM32F41x.S new file mode 100644 index 0000000000..b7f10ce5fc --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_GCC_ARM/startup_STM32F41x.S @@ -0,0 +1,297 @@ +/* File: startup_STM32F40x.S + * Purpose: startup file for Cortex-M4 devices. Should use with + * GCC for ARM Embedded Processors + * Version: V1.4 + * Date: 09 July 2012 + * + * Copyright (c) 2011, 2012, ARM Limited + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the ARM Limited nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ARM LIMITED BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + .syntax unified + .arch armv7-m + + .section .stack + .align 3 +#ifdef __STACK_SIZE + .equ Stack_Size, __STACK_SIZE +#else + .equ Stack_Size, 0xc00 +#endif + .globl __StackTop + .globl __StackLimit +__StackLimit: + .space Stack_Size + .size __StackLimit, . - __StackLimit +__StackTop: + .size __StackTop, . - __StackTop + + .section .heap + .align 3 +#ifdef __HEAP_SIZE + .equ Heap_Size, __HEAP_SIZE +#else + .equ Heap_Size, 0x400 +#endif + .globl __HeapBase + .globl __HeapLimit +__HeapBase: + .if Heap_Size + .space Heap_Size + .endif + .size __HeapBase, . - __HeapBase +__HeapLimit: + .size __HeapLimit, . - __HeapLimit + + .section .isr_vector + .align 2 + .globl __isr_vector +__isr_vector: + .long __StackTop /* Top of Stack */ + .long Reset_Handler /* Reset Handler */ + .long NMI_Handler /* NMI Handler */ + .long HardFault_Handler /* Hard Fault Handler */ + .long MemManage_Handler /* MPU Fault Handler */ + .long BusFault_Handler /* Bus Fault Handler */ + .long UsageFault_Handler /* Usage Fault Handler */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long SVC_Handler /* SVCall Handler */ + .long DebugMon_Handler /* Debug Monitor Handler */ + .long 0 /* Reserved */ + .long PendSV_Handler /* PendSV Handler */ + .long SysTick_Handler /* SysTick Handler */ + + /* External interrupts */ + .long WWDG_IRQHandler /* Window WatchDog */ + .long PVD_IRQHandler /* PVD through EXTI Line detection */ + .long TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .long RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .long FLASH_IRQHandler /* FLASH */ + .long RCC_IRQHandler /* RCC */ + .long EXTI0_IRQHandler /* EXTI Line0 */ + .long EXTI1_IRQHandler /* EXTI Line1 */ + .long EXTI2_IRQHandler /* EXTI Line2 */ + .long EXTI3_IRQHandler /* EXTI Line3 */ + .long EXTI4_IRQHandler /* EXTI Line4 */ + .long DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .long DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .long DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .long DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .long DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .long DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .long DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .long ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long EXTI9_5_IRQHandler /* External Line[9:5]s */ + .long TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .long TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .long TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .long TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .long TIM2_IRQHandler /* TIM2 */ + .long TIM3_IRQHandler /* TIM3 */ + .long TIM4_IRQHandler /* TIM4 */ + .long I2C1_EV_IRQHandler /* I2C1 Event */ + .long I2C1_ER_IRQHandler /* I2C1 Error */ + .long I2C2_EV_IRQHandler /* I2C2 Event */ + .long I2C2_ER_IRQHandler /* I2C2 Error */ + .long SPI1_IRQHandler /* SPI1 */ + .long SPI2_IRQHandler /* SPI2 */ + .long USART1_IRQHandler /* USART1 */ + .long USART2_IRQHandler /* USART2 */ + .long 0 /* Reserved */ + .long EXTI15_10_IRQHandler /* External Line[15:10]s */ + .long RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .long OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .long 0 /* Reserved */ + .long SDIO_IRQHandler /* SDIO */ + .long TIM5_IRQHandler /* TIM5 */ + .long SPI3_IRQHandler /* SPI3 */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .long DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .long DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .long DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .long DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long OTG_FS_IRQHandler /* USB OTG FS */ + .long DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .long DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .long DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .long USART6_IRQHandler /* USART6 */ + .long I2C3_EV_IRQHandler /* I2C3 event */ + .long I2C3_ER_IRQHandler /* I2C3 error */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long 0 /* Reserved */ + .long FPU_IRQHandler /* FPU */ + .long SPI4_IRQHandler /* SPI4 */ + .long SPI5_IRQHandler /* SPI5 */ + + .size __isr_vector, . - __isr_vector + + .text + .thumb + .thumb_func + .align 2 + .globl Reset_Handler + .type Reset_Handler, %function +Reset_Handler: +/* Loop to copy data from read only memory to RAM. The ranges + * of copy from/to are specified by following symbols evaluated in + * linker script. + * __etext: End of code section, i.e., begin of data sections to copy from. + * __data_start__/__data_end__: RAM address range that data should be + * copied to. Both must be aligned to 4 bytes boundary. */ + + ldr r1, =__etext + ldr r2, =__data_start__ + ldr r3, =__data_end__ + +.LC0: + cmp r2, r3 + ittt lt + ldrlt r0, [r1], #4 + strlt r0, [r2], #4 + blt .LC0 + + ldr r0, =SystemInit + blx r0 + ldr r0, =_start + bx r0 + .pool + .size Reset_Handler, . - Reset_Handler + + .text +/* Macro to define default handlers. Default handler + * will be weak symbol and just dead loops. They can be + * overwritten by other handlers */ + .macro def_default_handler handler_name + .align 1 + .thumb_func + .weak \handler_name + .type \handler_name, %function +\handler_name : + b . + .size \handler_name, . - \handler_name + .endm + + def_default_handler NMI_Handler + def_default_handler HardFault_Handler + def_default_handler MemManage_Handler + def_default_handler BusFault_Handler + def_default_handler UsageFault_Handler + def_default_handler SVC_Handler + def_default_handler DebugMon_Handler + def_default_handler PendSV_Handler + def_default_handler SysTick_Handler + def_default_handler Default_Handler + + .macro def_irq_default_handler handler_name + .weak \handler_name + .set \handler_name, Default_Handler + .endm + + def_irq_default_handler WWDG_IRQHandler + def_irq_default_handler PVD_IRQHandler + def_irq_default_handler TAMP_STAMP_IRQHandler + def_irq_default_handler RTC_WKUP_IRQHandler + def_irq_default_handler FLASH_IRQHandler + def_irq_default_handler RCC_IRQHandler + def_irq_default_handler EXTI0_IRQHandler + def_irq_default_handler EXTI1_IRQHandler + def_irq_default_handler EXTI2_IRQHandler + def_irq_default_handler EXTI3_IRQHandler + def_irq_default_handler EXTI4_IRQHandler + def_irq_default_handler DMA1_Stream0_IRQHandler + def_irq_default_handler DMA1_Stream1_IRQHandler + def_irq_default_handler DMA1_Stream2_IRQHandler + def_irq_default_handler DMA1_Stream3_IRQHandler + def_irq_default_handler DMA1_Stream4_IRQHandler + def_irq_default_handler DMA1_Stream5_IRQHandler + def_irq_default_handler DMA1_Stream6_IRQHandler + def_irq_default_handler ADC_IRQHandler + def_irq_default_handler EXTI9_5_IRQHandler + def_irq_default_handler TIM1_BRK_TIM9_IRQHandler + def_irq_default_handler TIM1_UP_TIM10_IRQHandler + def_irq_default_handler TIM1_TRG_COM_TIM11_IRQHandler + def_irq_default_handler TIM1_CC_IRQHandler + def_irq_default_handler TIM2_IRQHandler + def_irq_default_handler TIM3_IRQHandler + def_irq_default_handler TIM4_IRQHandler + def_irq_default_handler I2C1_EV_IRQHandler + def_irq_default_handler I2C1_ER_IRQHandler + def_irq_default_handler I2C2_EV_IRQHandler + def_irq_default_handler I2C2_ER_IRQHandler + def_irq_default_handler SPI1_IRQHandler + def_irq_default_handler SPI2_IRQHandler + def_irq_default_handler USART1_IRQHandler + def_irq_default_handler USART2_IRQHandler + def_irq_default_handler EXTI15_10_IRQHandler + def_irq_default_handler RTC_Alarm_IRQHandler + def_irq_default_handler OTG_FS_WKUP_IRQHandler + def_irq_default_handler DMA1_Stream7_IRQHandler + def_irq_default_handler SDIO_IRQHandler + def_irq_default_handler TIM5_IRQHandler + def_irq_default_handler SPI3_IRQHandler + def_irq_default_handler DMA2_Stream0_IRQHandler + def_irq_default_handler DMA2_Stream1_IRQHandler + def_irq_default_handler DMA2_Stream2_IRQHandler + def_irq_default_handler DMA2_Stream3_IRQHandler + def_irq_default_handler DMA2_Stream4_IRQHandler + def_irq_default_handler OTG_FS_IRQHandler + def_irq_default_handler DMA2_Stream5_IRQHandler + def_irq_default_handler DMA2_Stream6_IRQHandler + def_irq_default_handler DMA2_Stream7_IRQHandler + def_irq_default_handler USART6_IRQHandler + def_irq_default_handler I2C3_EV_IRQHandler + def_irq_default_handler I2C3_ER_IRQHandler + def_irq_default_handler FPU_IRQHandler + def_irq_default_handler SPI4_IRQHandler + def_irq_default_handler SPI5_IRQHandler + def_irq_default_handler DEF_IRQHandler + + .end diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/startup_stm32f411xe.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/startup_stm32f411xe.S new file mode 100644 index 0000000000..1b782c36dc --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/startup_stm32f411xe.S @@ -0,0 +1,523 @@ +;/******************** (C) COPYRIGHT 2014 STMicroelectronics ******************** +;* File Name : startup_stm32f411xe.s +;* Author : MCD Application Team +;* Version : V2.1.0 +;* Date : 19-June-2014 +;* Description : STM32F411xExx devices vector table for EWARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == _iar_program_start, +;* - Set the vector table entries with the exceptions ISR +;* address. +;* - Configure the system clock +;* - Branches to main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;******************************************************************************** +;* +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;* +;******************************************************************************* +; +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD 0 ; Reserved + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD 0 ; Reserved + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD FPU_IRQHandler ; FPU + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B NMI_Handler + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B HardFault_Handler + + PUBWEAK MemManage_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler + + PUBWEAK DebugMon_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +DebugMon_Handler + B DebugMon_Handler + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B SysTick_Handler + + PUBWEAK WWDG_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +WWDG_IRQHandler + B WWDG_IRQHandler + + PUBWEAK PVD_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +PVD_IRQHandler + B PVD_IRQHandler + + PUBWEAK TAMP_STAMP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TAMP_STAMP_IRQHandler + B TAMP_STAMP_IRQHandler + + PUBWEAK RTC_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_WKUP_IRQHandler + B RTC_WKUP_IRQHandler + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + PUBWEAK RCC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RCC_IRQHandler + B RCC_IRQHandler + + PUBWEAK EXTI0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI0_IRQHandler + B EXTI0_IRQHandler + + PUBWEAK EXTI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI1_IRQHandler + B EXTI1_IRQHandler + + PUBWEAK EXTI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI2_IRQHandler + B EXTI2_IRQHandler + + PUBWEAK EXTI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI3_IRQHandler + B EXTI3_IRQHandler + + PUBWEAK EXTI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI4_IRQHandler + B EXTI4_IRQHandler + + PUBWEAK DMA1_Stream0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream0_IRQHandler + B DMA1_Stream0_IRQHandler + + PUBWEAK DMA1_Stream1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream1_IRQHandler + B DMA1_Stream1_IRQHandler + + PUBWEAK DMA1_Stream2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream2_IRQHandler + B DMA1_Stream2_IRQHandler + + PUBWEAK DMA1_Stream3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream3_IRQHandler + B DMA1_Stream3_IRQHandler + + PUBWEAK DMA1_Stream4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream4_IRQHandler + B DMA1_Stream4_IRQHandler + + PUBWEAK DMA1_Stream5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream5_IRQHandler + B DMA1_Stream5_IRQHandler + + PUBWEAK DMA1_Stream6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream6_IRQHandler + B DMA1_Stream6_IRQHandler + + PUBWEAK ADC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +ADC_IRQHandler + B ADC_IRQHandler + + PUBWEAK EXTI9_5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI9_5_IRQHandler + B EXTI9_5_IRQHandler + + PUBWEAK TIM1_BRK_TIM9_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_BRK_TIM9_IRQHandler + B TIM1_BRK_TIM9_IRQHandler + + PUBWEAK TIM1_UP_TIM10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_UP_TIM10_IRQHandler + B TIM1_UP_TIM10_IRQHandler + + PUBWEAK TIM1_TRG_COM_TIM11_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_TRG_COM_TIM11_IRQHandler + B TIM1_TRG_COM_TIM11_IRQHandler + + PUBWEAK TIM1_CC_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM1_CC_IRQHandler + B TIM1_CC_IRQHandler + + PUBWEAK TIM2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM2_IRQHandler + B TIM2_IRQHandler + + PUBWEAK TIM3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM3_IRQHandler + B TIM3_IRQHandler + + PUBWEAK TIM4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM4_IRQHandler + B TIM4_IRQHandler + + PUBWEAK I2C1_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_EV_IRQHandler + B I2C1_EV_IRQHandler + + PUBWEAK I2C1_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C1_ER_IRQHandler + B I2C1_ER_IRQHandler + + PUBWEAK I2C2_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_EV_IRQHandler + B I2C2_EV_IRQHandler + + PUBWEAK I2C2_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C2_ER_IRQHandler + B I2C2_ER_IRQHandler + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + PUBWEAK USART1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART1_IRQHandler + B USART1_IRQHandler + + PUBWEAK USART2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART2_IRQHandler + B USART2_IRQHandler + + PUBWEAK EXTI15_10_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +EXTI15_10_IRQHandler + B EXTI15_10_IRQHandler + + PUBWEAK RTC_Alarm_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +RTC_Alarm_IRQHandler + B RTC_Alarm_IRQHandler + + PUBWEAK OTG_FS_WKUP_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_WKUP_IRQHandler + B OTG_FS_WKUP_IRQHandler + + PUBWEAK DMA1_Stream7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA1_Stream7_IRQHandler + B DMA1_Stream7_IRQHandler + + PUBWEAK SDIO_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SDIO_IRQHandler + B SDIO_IRQHandler + + PUBWEAK TIM5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +TIM5_IRQHandler + B TIM5_IRQHandler + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + PUBWEAK DMA2_Stream0_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream0_IRQHandler + B DMA2_Stream0_IRQHandler + + PUBWEAK DMA2_Stream1_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream1_IRQHandler + B DMA2_Stream1_IRQHandler + + PUBWEAK DMA2_Stream2_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream2_IRQHandler + B DMA2_Stream2_IRQHandler + + PUBWEAK DMA2_Stream3_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream3_IRQHandler + B DMA2_Stream3_IRQHandler + + PUBWEAK DMA2_Stream4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream4_IRQHandler + B DMA2_Stream4_IRQHandler + + PUBWEAK OTG_FS_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +OTG_FS_IRQHandler + B OTG_FS_IRQHandler + + PUBWEAK DMA2_Stream5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream5_IRQHandler + B DMA2_Stream5_IRQHandler + + PUBWEAK DMA2_Stream6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream6_IRQHandler + B DMA2_Stream6_IRQHandler + + PUBWEAK DMA2_Stream7_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +DMA2_Stream7_IRQHandler + B DMA2_Stream7_IRQHandler + + PUBWEAK USART6_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +USART6_IRQHandler + B USART6_IRQHandler + + PUBWEAK I2C3_EV_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C3_EV_IRQHandler + B I2C3_EV_IRQHandler + + PUBWEAK I2C3_ER_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +I2C3_ER_IRQHandler + B I2C3_ER_IRQHandler + + PUBWEAK FPU_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +FPU_IRQHandler + B FPU_IRQHandler + + PUBWEAK SPI4_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI4_IRQHandler + B SPI4_IRQHandler + + PUBWEAK SPI5_IRQHandler + SECTION .text:CODE:REORDER:NOROOT(1) +SPI5_IRQHandler + B SPI5_IRQHandler + + END +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/stm32f411xe.icf b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/stm32f411xe.icf new file mode 100644 index 0000000000..87e12d26bb --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/TOOLCHAIN_IAR/stm32f411xe.icf @@ -0,0 +1,32 @@ +/* [ROM = 512kb = 0x80000] */ +define symbol __intvec_start__ = 0x08010000; +define symbol __region_ROM_start__ = 0x08010000; +define symbol __region_ROM_end__ = 0x0807FFFF; + +/* [RAM = 128kb = 0x20000] Vector table dynamic copy: 102 vectors = 408 bytes (0x198) to be reserved in RAM */ +define symbol __NVIC_start__ = 0x20000000; +define symbol __NVIC_end__ = 0x20000197; /* Aligned on 8 bytes */ +define symbol __region_RAM_start__ = 0x20000198; +define symbol __region_RAM_end__ = 0x2001FFFF; + +/* Memory regions */ +define memory mem with size = 4G; +define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__]; +define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; + +/* Stack and Heap */ +/* Stack: 4kB - 408B for vector table */ +/* Heap: 64kB */ +define symbol __size_cstack__ = 0xe68; +define symbol __size_heap__ = 0x10000; +define block CSTACK with alignment = 8, size = __size_cstack__ { }; +define block HEAP with alignment = 8, size = __size_heap__ { }; +define block STACKHEAP with fixed order { block HEAP, block CSTACK }; + +initialize by copy with packing = zeros { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, block STACKHEAP }; diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis.h new file mode 100644 index 0000000000..f0c2b2a907 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis.h @@ -0,0 +1,38 @@ +/* mbed Microcontroller Library + * A generic CMSIS include header + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +#ifndef MBED_CMSIS_H +#define MBED_CMSIS_H + +#include "stm32f4xx.h" +#include "cmsis_nvic.h" + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis_nvic.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis_nvic.h new file mode 100644 index 0000000000..e44a1ce9f6 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/cmsis_nvic.h @@ -0,0 +1,41 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +#ifndef MBED_CMSIS_NVIC_H +#define MBED_CMSIS_NVIC_H + +// STM32F411RE +// CORE: 16 vectors = 64 bytes from 0x00 to 0x3F +// MCU Peripherals: 86 vectors = 344 bytes from 0x40 to 0x197 +// Total: 102 vectors = 408 bytes (0x198) to be reserved in RAM +#define NVIC_NUM_VECTORS 102 +#define NVIC_RAM_VECTOR_ADDRESS 0x20000000 // Vectors positioned at start of RAM + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h new file mode 100644 index 0000000000..cedecee545 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/hal_tick.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file hal_tick.h + * @author MCD Application Team + * @brief Initialization of HAL tick + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +#ifndef __HAL_TICK_H +#define __HAL_TICK_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "stm32f4xx.h" +#include "stm32f4xx_ll_tim.h" +#include "cmsis_nvic.h" + +#define TIM_MST TIM5 +#define TIM_MST_IRQ TIM5_IRQn +#define TIM_MST_RCC __HAL_RCC_TIM5_CLK_ENABLE() +#define TIM_MST_DBGMCU_FREEZE __HAL_DBGMCU_FREEZE_TIM5() + +#define TIM_MST_RESET_ON __HAL_RCC_TIM5_FORCE_RESET() +#define TIM_MST_RESET_OFF __HAL_RCC_TIM5_RELEASE_RESET() + +#define TIM_MST_16BIT 0 // 1=16-bit timer, 0=32-bit timer + +#define TIM_MST_PCLK 1 // Select the peripheral clock number (1 or 2) + +#define HAL_TICK_DELAY (1000) // 1 ms + +#ifdef __cplusplus +} +#endif + +#endif // __HAL_TICK_H + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/stm32f411xe.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/stm32f411xe.h new file mode 100644 index 0000000000..c9e8ed9d04 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/stm32f411xe.h @@ -0,0 +1,8683 @@ +/** + ****************************************************************************** + * @file stm32f411xe.h + * @author MCD Application Team + * @version V2.6.1 + * @date 14-February-2017 + * @brief CMSIS STM32F411xE Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - peripherals registers declarations and bits definition + * - Macros to access peripheral's registers hardware + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f411xe + * @{ + */ + +#ifndef __STM32F411xE_H +#define __STM32F411xE_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001U /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1U /*!< STM32F4XX provides an MPU */ +#define __NVIC_PRIO_BITS 4U /*!< STM32F4XX uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ +#ifndef __FPU_PRESENT +#define __FPU_PRESENT 1U /*!< FPU present */ +#endif /* __FPU_PRESENT */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F4XX Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ + DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ + DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ + DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ + DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ + DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ + DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ + ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ + DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ + DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ + DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ + DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ + DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ + DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ + DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ + USART6_IRQn = 71, /*!< USART6 global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + FPU_IRQn = 81, /*!< FPU global interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ + SPI5_IRQn = 85 /*!< SPI5 global Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32f4xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ + __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ + __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ + __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ + __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ + __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ + __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ + __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1 base address + 0x308 */ +} ADC_Common_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ +} CRC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +}DBGMCU_TypeDef; + + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA stream x configuration register */ + __IO uint32_t NDTR; /*!< DMA stream x number of data register */ + __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ + __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ + __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ + __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ +} DMA_Stream_TypeDef; + +typedef struct +{ + __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ + __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ + __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ + __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ +} DMA_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ + __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ + __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ + __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ + __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ + __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ + __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ + __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ +} FLASH_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ +} GPIO_TypeDef; + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ + __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ +} SYSCFG_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ + __IO uint32_t DR; /*!< I2C Data register, Address offset: 0x10 */ + __IO uint32_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ + __IO uint32_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ + __IO uint32_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ + __IO uint32_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ + __IO uint32_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ +} IWDG_TypeDef; + + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ + __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ + uint32_t RESERVED0; /*!< Reserved, 0x1C */ + __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ + uint32_t RESERVED2; /*!< Reserved, 0x3C */ + __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ + uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ + __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ + __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ + __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ + uint32_t RESERVED4; /*!< Reserved, 0x5C */ + __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ + __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ + __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ + uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ + __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ + __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ + uint32_t RESERVED7[1]; /*!< Reserved, 0x88 */ + __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ + uint32_t RESERVED7; /*!< Reserved, 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ +} RTC_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ + __IO const uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ + __IO const uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ + __IO const uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ + __IO const uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ + __IO const uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ + __IO const uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ + __IO const uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __IO const uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ + __IO uint32_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ + __IO uint32_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ +} SPI_TypeDef; + + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ +} TIM_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ +} USART_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; +/** + * @brief USB_OTG_Core_Registers + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h */ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h */ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h */ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch */ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h */ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h */ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h */ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch */ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h */ + __IO uint32_t GRXFSIZ; /*!< Receive FIFO Size Register 024h */ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h */ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch */ + uint32_t Reserved30[2]; /*!< Reserved 030h */ + __IO uint32_t GCCFG; /*!< General Purpose IO Register 038h */ + __IO uint32_t CID; /*!< User ID Register 03Ch */ + uint32_t Reserved40[48]; /*!< Reserved 0x40-0xFF */ + __IO uint32_t HPTXFSIZ; /*!< Host Periodic Tx FIFO Size Reg 100h */ + __IO uint32_t DIEPTXF[0x0F]; /*!< dev Periodic Transmit FIFO */ +} USB_OTG_GlobalTypeDef; + +/** + * @brief USB_OTG_device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /*!< dev Configuration Register 800h */ + __IO uint32_t DCTL; /*!< dev Control Register 804h */ + __IO uint32_t DSTS; /*!< dev Status Register (RO) 808h */ + uint32_t Reserved0C; /*!< Reserved 80Ch */ + __IO uint32_t DIEPMSK; /*!< dev IN Endpoint Mask 810h */ + __IO uint32_t DOEPMSK; /*!< dev OUT Endpoint Mask 814h */ + __IO uint32_t DAINT; /*!< dev All Endpoints Itr Reg 818h */ + __IO uint32_t DAINTMSK; /*!< dev All Endpoints Itr Mask 81Ch */ + uint32_t Reserved20; /*!< Reserved 820h */ + uint32_t Reserved9; /*!< Reserved 824h */ + __IO uint32_t DVBUSDIS; /*!< dev VBUS discharge Register 828h */ + __IO uint32_t DVBUSPULSE; /*!< dev VBUS Pulse Register 82Ch */ + __IO uint32_t DTHRCTL; /*!< dev threshold 830h */ + __IO uint32_t DIEPEMPMSK; /*!< dev empty msk 834h */ + __IO uint32_t DEACHINT; /*!< dedicated EP interrupt 838h */ + __IO uint32_t DEACHMSK; /*!< dedicated EP msk 83Ch */ + uint32_t Reserved40; /*!< dedicated EP mask 840h */ + __IO uint32_t DINEP1MSK; /*!< dedicated EP mask 844h */ + uint32_t Reserved44[15]; /*!< Reserved 844-87Ch */ + __IO uint32_t DOUTEP1MSK; /*!< dedicated EP msk 884h */ +} USB_OTG_DeviceTypeDef; + +/** + * @brief USB_OTG_IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /*!< dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved 900h + (ep_num * 20h) + 04h */ + __IO uint32_t DIEPINT; /*!< dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved 900h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DIEPTSIZ; /*!< IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h */ + __IO uint32_t DIEPDMA; /*!< IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h */ + __IO uint32_t DTXFSTS; /*!< IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h */ + uint32_t Reserved18; /*!< Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch */ +} USB_OTG_INEndpointTypeDef; + +/** + * @brief USB_OTG_OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /*!< dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved B00h + (ep_num * 20h) + 04h */ + __IO uint32_t DOEPINT; /*!< dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved B00h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DOEPTSIZ; /*!< dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h */ + __IO uint32_t DOEPDMA; /*!< dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h */ + uint32_t Reserved18[2]; /*!< Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch */ +} USB_OTG_OUTEndpointTypeDef; + +/** + * @brief USB_OTG_Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /*!< Host Configuration Register 400h */ + __IO uint32_t HFIR; /*!< Host Frame Interval Register 404h */ + __IO uint32_t HFNUM; /*!< Host Frame Nbr/Frame Remaining 408h */ + uint32_t Reserved40C; /*!< Reserved 40Ch */ + __IO uint32_t HPTXSTS; /*!< Host Periodic Tx FIFO/ Queue Status 410h */ + __IO uint32_t HAINT; /*!< Host All Channels Interrupt Register 414h */ + __IO uint32_t HAINTMSK; /*!< Host All Channels Interrupt Mask 418h */ +} USB_OTG_HostTypeDef; + +/** + * @brief USB_OTG_Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; /*!< Host Channel Characteristics Register 500h */ + __IO uint32_t HCSPLT; /*!< Host Channel Split Control Register 504h */ + __IO uint32_t HCINT; /*!< Host Channel Interrupt Register 508h */ + __IO uint32_t HCINTMSK; /*!< Host Channel Interrupt Mask Register 50Ch */ + __IO uint32_t HCTSIZ; /*!< Host Channel Transfer Size Register 510h */ + __IO uint32_t HCDMA; /*!< Host Channel DMA Address Register 514h */ + uint32_t Reserved[2]; /*!< Reserved */ +} USB_OTG_HostChannelTypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define FLASH_BASE 0x08000000U /*!< FLASH(up to 1 MB) base address in the alias region */ +#define SRAM1_BASE 0x20000000U /*!< SRAM1(128 KB) base address in the alias region */ +#define PERIPH_BASE 0x40000000U /*!< Peripheral base address in the alias region */ +#define BKPSRAM_BASE 0x40024000U /*!< Backup SRAM(4 KB) base address in the alias region */ +#define SRAM1_BB_BASE 0x22000000U /*!< SRAM1(128 KB) base address in the bit-band region */ +#define PERIPH_BB_BASE 0x42000000U /*!< Peripheral base address in the bit-band region */ +#define BKPSRAM_BB_BASE 0x42480000U /*!< Backup SRAM(4 KB) base address in the bit-band region */ +#define FLASH_END 0x0807FFFFU /*!< FLASH end address */ +#define FLASH_OTP_BASE 0x1FFF7800U /*!< Base address of : (up to 528 Bytes) embedded FLASH OTP Area */ +#define FLASH_OTP_END 0x1FFF7A0FU /*!< End address of : (up to 528 Bytes) embedded FLASH OTP Area */ + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000U) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000U) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000U) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400U) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800U) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00U) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800U) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00U) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000U) +#define I2S2ext_BASE (APB1PERIPH_BASE + 0x3400U) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800U) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00U) +#define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000U) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400U) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400U) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800U) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00U) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000U) + +/*!< APB2 peripherals */ +#define TIM1_BASE (APB2PERIPH_BASE + 0x0000U) +#define USART1_BASE (APB2PERIPH_BASE + 0x1000U) +#define USART6_BASE (APB2PERIPH_BASE + 0x1400U) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2000U) +#define ADC1_COMMON_BASE (APB2PERIPH_BASE + 0x2300U) +/* Legacy define */ +#define ADC_BASE ADC1_COMMON_BASE +#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00U) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000U) +#define SPI4_BASE (APB2PERIPH_BASE + 0x3400U) +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800U) +#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00U) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4000U) +#define TIM10_BASE (APB2PERIPH_BASE + 0x4400U) +#define TIM11_BASE (APB2PERIPH_BASE + 0x4800U) +#define SPI5_BASE (APB2PERIPH_BASE + 0x5000U) + +/*!< AHB1 peripherals */ +#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000U) +#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400U) +#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800U) +#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00U) +#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000U) +#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00U) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000U) +#define RCC_BASE (AHB1PERIPH_BASE + 0x3800U) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00U) +#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000U) +#define DMA1_Stream0_BASE (DMA1_BASE + 0x010U) +#define DMA1_Stream1_BASE (DMA1_BASE + 0x028U) +#define DMA1_Stream2_BASE (DMA1_BASE + 0x040U) +#define DMA1_Stream3_BASE (DMA1_BASE + 0x058U) +#define DMA1_Stream4_BASE (DMA1_BASE + 0x070U) +#define DMA1_Stream5_BASE (DMA1_BASE + 0x088U) +#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0U) +#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8U) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400U) +#define DMA2_Stream0_BASE (DMA2_BASE + 0x010U) +#define DMA2_Stream1_BASE (DMA2_BASE + 0x028U) +#define DMA2_Stream2_BASE (DMA2_BASE + 0x040U) +#define DMA2_Stream3_BASE (DMA2_BASE + 0x058U) +#define DMA2_Stream4_BASE (DMA2_BASE + 0x070U) +#define DMA2_Stream5_BASE (DMA2_BASE + 0x088U) +#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0U) +#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8U) + + +/*!< Debug MCU registers base address */ +#define DBGMCU_BASE 0xE0042000U +/*!< USB registers base address */ +#define USB_OTG_FS_PERIPH_BASE 0x50000000U + +#define USB_OTG_GLOBAL_BASE 0x000U +#define USB_OTG_DEVICE_BASE 0x800U +#define USB_OTG_IN_ENDPOINT_BASE 0x900U +#define USB_OTG_OUT_ENDPOINT_BASE 0xB00U +#define USB_OTG_EP_REG_SIZE 0x20U +#define USB_OTG_HOST_BASE 0x400U +#define USB_OTG_HOST_PORT_BASE 0x440U +#define USB_OTG_HOST_CHANNEL_BASE 0x500U +#define USB_OTG_HOST_CHANNEL_SIZE 0x20U +#define USB_OTG_PCGCCTL_BASE 0xE00U +#define USB_OTG_FIFO_BASE 0x1000U +#define USB_OTG_FIFO_SIZE 0x1000U + +#define UID_BASE 0x1FFF7A10U /*!< Unique device ID register base address */ +#define FLASHSIZE_BASE 0x1FFF7A22U /*!< FLASH Size register base address */ +#define PACKAGE_BASE 0x1FFF7BF0U /*!< Package size register base address */ +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define I2S2ext ((SPI_TypeDef *) I2S2ext_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define I2S3ext ((SPI_TypeDef *) I2S3ext_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define USART6 ((USART_TypeDef *) USART6_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC1_COMMON ((ADC_Common_TypeDef *) ADC1_COMMON_BASE) +/* Legacy define */ +#define ADC ADC1_COMMON +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define SPI4 ((SPI_TypeDef *) SPI4_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SPI5 ((SPI_TypeDef *) SPI5_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) +#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) +#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) +#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) +#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) +#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) +#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) +#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) +#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) +#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) +#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) +#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) +#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) +#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) +#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD_Pos (0U) +#define ADC_SR_AWD_Msk (0x1U << ADC_SR_AWD_Pos) /*!< 0x00000001 */ +#define ADC_SR_AWD ADC_SR_AWD_Msk /*!
© COPYRIGHT(c) 2017 STMicroelectronics
+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx + * @{ + */ + +#ifndef __STM32F4xx_H +#define __STM32F4xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32F4) +#define STM32F4 +#endif /* STM32F4 */ + +/* Uncomment the line below according to the target STM32 device used in your + application + */ +#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \ + !defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \ + !defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F410Tx) && !defined (STM32F410Cx) && \ + !defined (STM32F410Rx) && !defined (STM32F411xE) && !defined (STM32F446xx) && !defined (STM32F469xx) && \ + !defined (STM32F479xx) && !defined (STM32F412Cx) && !defined (STM32F412Rx) && !defined (STM32F412Vx) && \ + !defined (STM32F412Zx) && !defined (STM32F413xx) && !defined (STM32F423xx) + /* #define STM32F405xx */ /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */ + /* #define STM32F415xx */ /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */ + /* #define STM32F407xx */ /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG and STM32F407IE Devices */ + /* #define STM32F417xx */ /*!< STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */ + /* #define STM32F427xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG and STM32F427II Devices */ + /* #define STM32F437xx */ /*!< STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG and STM32F437II Devices */ + /* #define STM32F429xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG, + STM32F439NI, STM32F429IG and STM32F429II Devices */ + /* #define STM32F439xx */ /*!< STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, + STM32F439NI, STM32F439IG and STM32F439II Devices */ + /* #define STM32F401xC */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB and STM32F401VC Devices */ + /* #define STM32F401xE */ /*!< STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE and STM32F401VE Devices */ + /* #define STM32F410Tx */ /*!< STM32F410T8 and STM32F410TB Devices */ + /* #define STM32F410Cx */ /*!< STM32F410C8 and STM32F410CB Devices */ + /* #define STM32F410Rx */ /*!< STM32F410R8 and STM32F410RB Devices */ + #define STM32F411xE /*!< STM32F411CC, STM32F411RC, STM32F411VC, STM32F411CE, STM32F411RE and STM32F411VE Devices */ + /* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC, + and STM32F446ZE Devices */ + /* #define STM32F469xx */ /*!< STM32F469AI, STM32F469II, STM32F469BI, STM32F469NI, STM32F469AG, STM32F469IG, STM32F469BG, + STM32F469NG, STM32F469AE, STM32F469IE, STM32F469BE and STM32F469NE Devices */ + /* #define STM32F479xx */ /*!< STM32F479AI, STM32F479II, STM32F479BI, STM32F479NI, STM32F479AG, STM32F479IG, STM32F479BG + and STM32F479NG Devices */ + /* #define STM32F412Cx */ /*!< STM32F412CEU and STM32F412CGU Devices */ + /* #define STM32F412Zx */ /*!< STM32F412ZET, STM32F412ZGT, STM32F412ZEJ and STM32F412ZGJ Devices */ + /* #define STM32F412Vx */ /*!< STM32F412VET, STM32F412VGT, STM32F412VEH and STM32F412VGH Devices */ + /* #define STM32F412Rx */ /*!< STM32F412RET, STM32F412RGT, STM32F412REY and STM32F412RGY Devices */ + /* #define STM32F413xx */ /*!< STM32F413CH, STM32F413MH, STM32F413RH, STM32F413VH, STM32F413ZH, STM32F413CG, STM32F413MG, + STM32F413RG, STM32F413VG and STM32F413ZG Devices */ + /* #define STM32F423xx */ /*!< STM32F423CH, STM32F423RH, STM32F423VH and STM32F423ZH Devices */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + #define USE_HAL_DRIVER +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS version number V2.6.1 + */ +#define __STM32F4xx_CMSIS_VERSION_MAIN (0x02U) /*!< [31:24] main version */ +#define __STM32F4xx_CMSIS_VERSION_SUB1 (0x06U) /*!< [23:16] sub1 version */ +#define __STM32F4xx_CMSIS_VERSION_SUB2 (0x01U) /*!< [15:8] sub2 version */ +#define __STM32F4xx_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F4xx_CMSIS_VERSION ((__STM32F4xx_CMSIS_VERSION_MAIN << 24)\ + |(__STM32F4xx_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32F4xx_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32F4xx_CMSIS_VERSION)) + +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ + +#if defined(STM32F405xx) + #include "stm32f405xx.h" +#elif defined(STM32F415xx) + #include "stm32f415xx.h" +#elif defined(STM32F407xx) + #include "stm32f407xx.h" +#elif defined(STM32F417xx) + #include "stm32f417xx.h" +#elif defined(STM32F427xx) + #include "stm32f427xx.h" +#elif defined(STM32F437xx) + #include "stm32f437xx.h" +#elif defined(STM32F429xx) + #include "stm32f429xx.h" +#elif defined(STM32F439xx) + #include "stm32f439xx.h" +#elif defined(STM32F401xC) + #include "stm32f401xc.h" +#elif defined(STM32F401xE) + #include "stm32f401xe.h" +#elif defined(STM32F410Tx) + #include "stm32f410tx.h" +#elif defined(STM32F410Cx) + #include "stm32f410cx.h" +#elif defined(STM32F410Rx) + #include "stm32f410rx.h" +#elif defined(STM32F411xE) + #include "stm32f411xe.h" +#elif defined(STM32F446xx) + #include "stm32f446xx.h" +#elif defined(STM32F469xx) + #include "stm32f469xx.h" +#elif defined(STM32F479xx) + #include "stm32f479xx.h" +#elif defined(STM32F412Cx) + #include "stm32f412cx.h" +#elif defined(STM32F412Zx) + #include "stm32f412zx.h" +#elif defined(STM32F412Rx) + #include "stm32f412rx.h" +#elif defined(STM32F412Vx) + #include "stm32f412vx.h" +#elif defined(STM32F413xx) + #include "stm32f413xx.h" +#elif defined(STM32F423xx) + #include "stm32f423xx.h" +#else + #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0U, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0U, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + ERROR = 0U, + SUCCESS = !ERROR +} ErrorStatus; + +/** + * @} + */ + + +/** @addtogroup Exported_macro + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + + +/** + * @} + */ + +#if defined (USE_HAL_DRIVER) + #include "stm32f4xx_hal.h" +#endif /* USE_HAL_DRIVER */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32F4xx_H */ +/** + * @} + */ + +/** + * @} + */ + + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_clock.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_clock.c new file mode 100644 index 0000000000..eee454211d --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_clock.c @@ -0,0 +1,246 @@ +/* mbed Microcontroller Library +* Copyright (c) 2006-2017 ARM Limited +* +* 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. +*/ + +/** + * This file configures the system clock as follows: + *----------------------------------------------------------------------------- + * System clock source | 1- PLL_HSE_EXTC | 3- PLL_HSI + * | (external 8 MHz clock) | (internal 16 MHz) + * | 2- PLL_HSE_XTAL | + * | (external 8 MHz xtal) | + *----------------------------------------------------------------------------- + * SYSCLK(MHz) | 100 | 100 + *----------------------------------------------------------------------------- + * AHBCLK (MHz) | 100 | 100 + *----------------------------------------------------------------------------- + * APB1CLK (MHz) | 50 | 50 + *----------------------------------------------------------------------------- + * APB2CLK (MHz) | 100 | 100 + *----------------------------------------------------------------------------- + * USB capable (48 MHz precise clock) | NO | NO + *----------------------------------------------------------------------------- +**/ + +#include "stm32f4xx.h" +#include "mbed_debug.h" + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#ifndef VECT_TAB_OFFSET +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +#endif + + +/* Select the clock sources (other than HSI) to start with (0=OFF, 1=ON) */ +#define USE_PLL_HSE_EXTC (0) /* Use external clock */ +#define USE_PLL_HSE_XTAL (1) /* Use external xtal */ + +#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0) +uint8_t SetSysClock_PLL_HSE(uint8_t bypass); +#endif + +uint8_t SetSysClock_PLL_HSI(void); + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location add offset address ------------------*/ +#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 Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +void SetSysClock(void) +{ + /* 1- Try to start with HSE and external clock */ +#if USE_PLL_HSE_EXTC != 0 + if (SetSysClock_PLL_HSE(1) == 0) +#endif + { + /* 2- If fail try to start with HSE and external xtal */ +#if USE_PLL_HSE_XTAL != 0 + if (SetSysClock_PLL_HSE(0) == 0) +#endif + { + /* 3- If fail start with HSI clock */ + if (SetSysClock_PLL_HSI() == 0) { + while(1) { + // [TODO] Put something here to tell the user that a problem occured... + } + } + } + } + + /* Output clock on MCO2 pin(PC9) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4); // 100 MHz / 4 = 25 MHz +} + +#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0) +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ +uint8_t SetSysClock_PLL_HSE(uint8_t bypass) +{ + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_OscInitTypeDef RCC_OscInitStruct; + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + + /* Enable HSE oscillator and activate PLL with HSE as source */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + if (bypass == 0) { + RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 8 MHz xtal on OSC_IN/OSC_OUT */ + } else { + RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; /* External 8 MHz clock on OSC_IN */ + } + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + //RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 1 MHz (8 MHz / 8) + //RCC_OscInitStruct.PLL.PLLN = 400; // VCO output clock = 400 MHz (1 MHz * 400) + RCC_OscInitStruct.PLL.PLLM = 13; // VCO input clock = 2 MHz (8 MHz / 4) + RCC_OscInitStruct.PLL.PLLN = 192; // VCO output clock = 400 MHz (2 MHz * 200) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 100 MHz (400 MHz / 4) + RCC_OscInitStruct.PLL.PLLQ = 8; // USB clock = 44.44 MHz (400 MHz / 9) --> Not good for USB + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + + //if (bypass == 0) + // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz with xtal + //else + // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz with external clock + + return 1; // OK +} +#endif + +/******************************************************************************/ +/* PLL (clocked by HSI) used as System clock source */ +/******************************************************************************/ +uint8_t SetSysClock_PLL_HSI(void) +{ + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_OscInitTypeDef RCC_OscInitStruct; + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + + /* Enable HSI oscillator and activate PLL with HSI as source */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSEState = RCC_HSE_OFF; + RCC_OscInitStruct.HSICalibrationValue = 16; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + //RCC_OscInitStruct.PLL.PLLM = 16; // VCO input clock = 1 MHz (16 MHz / 16) + //RCC_OscInitStruct.PLL.PLLN = 400; // VCO output clock = 400 MHz (1 MHz * 400) + RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 2 MHz (16 MHz / 8) + RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 400 MHz (2 MHz * 200) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 100 MHz (400 MHz / 4) + RCC_OscInitStruct.PLL.PLLQ = 9; // USB clock = 44.44 MHz (400 MHz / 9) --> Not good for USB + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 100 MHz + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 100 MHz + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 50 MHz + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 100 MHz + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); // 16 MHz + + return 1; // OK +} + +/******************************************************************************/ +/* Hard Fault Handler */ +/******************************************************************************/ +void HardFault_Handler(void) +{ + debug("Hard Fault\n"); + NVIC_SystemReset(); +} diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_stm32f4xx.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_stm32f4xx.h new file mode 100644 index 0000000000..113f67cfe6 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/device/system_stm32f4xx.h @@ -0,0 +1,125 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.h + * @author MCD Application Team + * @version V2.6.1 + * @date 14-February-2017 + * @brief CMSIS Cortex-M4 Device System Source File for STM32F4xx devices. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** + * @brief Define to prevent recursive inclusion + */ +#ifndef __SYSTEM_STM32F4XX_H +#define __SYSTEM_STM32F4XX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/** @addtogroup STM32F4xx_System_Includes + * @{ + */ + +/** + * @} + */ + + +/** @addtogroup STM32F4xx_System_Exported_types + * @{ + */ + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetSysClockFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ + +extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */ +extern const uint8_t APBPrescTable[8]; /*!< APB prescalers table values */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Exported_Constants + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Exported_Functions + * @{ + */ + +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); +extern void SetSysClock(void); +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SYSTEM_STM32F4XX_H */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/objects.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/objects.h new file mode 100644 index 0000000000..16467b7c87 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/objects.h @@ -0,0 +1,63 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2014, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#ifndef MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct gpio_irq_s { + IRQn_Type irq_n; + uint32_t irq_index; + uint32_t event; + PinName pin; +}; + +struct port_s { + PortName port; + uint32_t mask; + PinDirection direction; + __IO uint32_t *reg_in; + __IO uint32_t *reg_out; +}; + +#include "common_objects.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/onboard_modem_api.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/onboard_modem_api.c new file mode 100644 index 0000000000..ea532df442 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/onboard_modem_api.c @@ -0,0 +1,65 @@ +/* mbed Microcontroller Library + * Copyright (c) 2017 ARM Limited + * + * 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. + */ + +#if MBED_CONF_NSAPI_PRESENT + +#include "cellular/onboard_modem_api.h" +#include "gpio_api.h" +#include "platform/mbed_wait_api.h" +#include "PinNames.h" + +#if MODEM_ON_BOARD + +static void press_power_button(int time_ms) +{ + gpio_t gpio; + + gpio_init_out_ex(&gpio, MDMPWRON, 1); + gpio_write(&gpio, 0); + wait_ms(time_ms); + gpio_write(&gpio, 1); +} + +void onboard_modem_init() +{ + //does nothing at the moment, TODO: MultiTech to add hardware initialization stuff if needed +} + +void onboard_modem_deinit() +{ + //does nothing at the moment, TODO: MultiTech to add hardware de-initialization stuff if needed +} +void onboard_modem_power_up() +{ + /* keep the power line low for 200 milisecond */ + press_power_button(200); + /* give modem a little time to respond */ + wait_ms(100); +} + +void onboard_modem_power_down() +{ + gpio_t gpio; + + gpio_init_out_ex(&gpio, MDMPWRON, 0); + /* keep the power line low for more than 10 seconds. + * If 3G_ON_OFF pin is kept low for more than a second, a controlled disconnect and shutdown takes + * place, Due to the network disconnect, shut-off can take up to 30 seconds. However, we wait for 10 + * seconds only */ + wait_ms(10*1000); +} +#endif //MODEM_ON_BOARD +#endif //MBED_CONF_NSAPI_PRESENT diff --git a/targets/targets.json b/targets/targets.json index 24a4359bdd..a5f81fec96 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1844,6 +1844,47 @@ "release_versions": ["2", "5"], "device_name": "STM32F411RE" }, + "MTB_MTS_DRAGONFLY": { + "inherits": ["FAMILY_STM32"], + "core": "Cortex-M4F", + "extra_labels_add": ["STM32F4", "STM32F411RE"], + "config": { + "modem_is_on_board": { + "help": "Value: Tells the build system that the modem is on-board as oppose to a plug-in shield/module.", + "value": 1, + "macro_name": "MODEM_ON_BOARD" + }, + "modem_data_connection_type": { + "help": "Value: Defines how an on-board modem is wired up to the MCU, e.g., data connection can be a UART or USB and so forth.", + "value": 1, + "macro_name": "MODEM_ON_BOARD_UART" + }, + "usb_tx": { + "help": "Value PB_6", + "value": "PB_6" + }, + "usb_rx": { + "help": "Value PB_7", + "value": "PB_7" + }, + "stdio_uart": { + "help": "Value: UART_1", + "value": "UART_1", + "macro_name": "STDIO_UART" + } + }, + "overrides": { + "lse_available": 0 + }, + "macros_add": ["HSE_VALUE=26000000", "VECT_TAB_OFFSET=0x08010000"], + "post_binary_hook": { + "function": "MTSCode.combine_bins_mtb_mts_dragonfly", + "toolchains": ["GCC_ARM", "ARM_STD", "ARM_MICRO", "IAR"] + }, + "release_versions": ["2", "5"], + "device_name": "STM32F411RE", + "bootloader_supported": true + }, "XDOT_L151CC": { "inherits": ["FAMILY_STM32"], "core": "Cortex-M3", diff --git a/tools/bootloaders/MTB_MTS_DRAGONFLY/bootloader.bin b/tools/bootloaders/MTB_MTS_DRAGONFLY/bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..e5c640df1c3841c1d363c2e5273684b816ec9944 GIT binary patch literal 55608 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 Rb1T#SY#Y;V#d9j}{{lgj;28h_ literal 0 HcmV?d00001 diff --git a/tools/targets/__init__.py b/tools/targets/__init__.py index fc4b221a28..020fe5ca19 100644 --- a/tools/targets/__init__.py +++ b/tools/targets/__init__.py @@ -458,6 +458,11 @@ class MTSCode(object): """A hoof for the MTS Dragonfly""" MTSCode._combine_bins_helper("MTS_DRAGONFLY_F411RE", binf) + @staticmethod + def combine_bins_mtb_mts_dragonfly(t_self, resources, elf, binf): + """A hook for the MTB MTS Dragonfly""" + MTSCode._combine_bins_helper("MTB_MTS_DRAGONFLY", binf) + class MCU_NRF51Code(object): """NRF51 Hooks""" @staticmethod From 09bb1c49194737a696bb364bb89b8e927fed203d Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Fri, 5 Jan 2018 16:00:35 -0600 Subject: [PATCH 048/133] Kinetis USB improvements and fixes Make the following improvements and fixes: 1. Update the Kinetis USB driver so that endpointReadResult only reads the result of the last read and does not trigger a new read. Instead move the code to trigger new reads into endpointRead. 2. Fix the race condition in controlIn caused by a call to EP0read() followed immediately by EP0readStage(). This is done by setting up to read the next setup packet (ignoring the status stage) in endpointReadResult rather than in EP0readStage. This makes the function EP0readStage unnecissary. 3. Remove the Kinetis workaround in controlOut in USBDevice.cpp since point 2 fixes this bug. For more info on this see the PR which added this workaround - https://github.com/ARMmbed/mbed-os/pull/414 --- .../USBDevice/USBDevice/USBDevice.cpp | 19 --- .../targets/TARGET_Freescale/USBHAL_KL25Z.cpp | 108 ++++++++++++++---- 2 files changed, 85 insertions(+), 42 deletions(-) diff --git a/features/unsupported/USBDevice/USBDevice/USBDevice.cpp b/features/unsupported/USBDevice/USBDevice/USBDevice.cpp index dc3efc96f4..7ec03f2579 100644 --- a/features/unsupported/USBDevice/USBDevice/USBDevice.cpp +++ b/features/unsupported/USBDevice/USBDevice/USBDevice.cpp @@ -187,27 +187,8 @@ bool USBDevice::controlOut(void) /* Check we should be transferring data OUT */ if (transfer.direction != HOST_TO_DEVICE) { -#if defined(TARGET_KL25Z) | defined(TARGET_KL43Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M) | defined(TARGET_K64F) | defined(TARGET_K22F) | defined(TARGET_TEENSY3_1) - /* - * We seem to have a pending device-to-host transfer. The host must have - * sent a new control request without waiting for us to finish processing - * the previous one. This appears to happen when we're connected to certain - * USB 3.0 host chip set. Do a zeor-length send to tell the host we're not - * ready for the new request - that'll make it resend - and then just - * pretend we were successful here so that the pending transfer can finish. - */ - uint8_t buf[1] = { 0 }; - EP0write(buf, 0); - - /* execute our pending ttransfer */ - controlIn(); - - /* indicate success */ - return true; - #else /* for other platforms, count on the HAL to handle this case */ return false; - #endif } /* Read from endpoint */ diff --git a/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp b/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp index b95437d219..71bf529900 100644 --- a/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp @@ -22,6 +22,7 @@ #include "fsl_common.h" #endif #include "USBHAL.h" +#include "mbed_critical.h" USBHAL * USBHAL::instance; @@ -64,6 +65,13 @@ typedef struct BDT { uint32_t address; // Addr } BDT; +typedef enum { + CTRL_XFER_READY, + CTRL_XFER_IN, + CTRL_XFER_NONE, + CTRL_XFER_OUT +} ctrl_xfer_t; + // there are: // * 4 bidirectionnal endpt -> 8 physical endpt // * as there are ODD and EVEN buffer -> 8*2 bdt @@ -73,6 +81,7 @@ uint8_t * endpoint_buffer[NUMBER_OF_PHYSICAL_ENDPOINTS * 2]; static uint8_t set_addr = 0; static uint8_t addr = 0; +static ctrl_xfer_t ctrl_xfer = CTRL_XFER_READY; static uint32_t Data1 = 0x55555555; @@ -223,11 +232,16 @@ bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flag USB_ENDPT_EPRXEN_MASK; // en RX (OUT) tran. bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].byte_count = maxPacket; bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].address = (uint32_t) buf; - bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info = BD_OWN_MASK | BD_DTS_MASK; + bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info = BD_DTS_MASK; bdt[EP_BDT_IDX(log_endpoint, RX, EVEN)].info = 0; + if (log_endpoint == 0) { + // Prepare for setup packet + bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info |= BD_OWN_MASK; + } } - Data1 |= (1 << endpoint); + // First transfer will be a DATA0 packet + Data1 &= ~(1 << endpoint); return true; } @@ -239,13 +253,35 @@ void USBHAL::EP0setup(uint8_t *buffer) { } void USBHAL::EP0readStage(void) { - Data1 &= ~1UL; // set DATA0 - bdt[0].info = (BD_DTS_MASK | BD_OWN_MASK); + // Not needed } void USBHAL::EP0read(void) { - uint32_t idx = EP_BDT_IDX(PHY_TO_LOG(EP0OUT), RX, 0); - bdt[idx].byte_count = MAX_PACKET_SIZE_EP0; + if (ctrl_xfer == CTRL_XFER_READY) { + // Transfer is done so ignore call + return; + } + if (ctrl_xfer == CTRL_XFER_IN) { + ctrl_xfer = CTRL_XFER_READY; + // Control transfer with a data IN stage. + // The next packet received will be the status packet - an OUT packet using DATA1 + // + // PROBLEM: + // If a Setup packet is received after status packet of + // a Control In transfer has been received in the RX buffer + // but before the processor has had a chance the prepare + // this buffer for the Setup packet, the Setup packet + // will be dropped. + // + // WORKAROUND: + // Set data toggle to DATA0 so if the status stage of a + // Control In transfer arrives it will be ACKed by hardware + // but will be discarded without filling the RX buffer. + // This allows a subsequent SETUP packet to be stored + // without any processor intervention. + Data1 &= ~1UL; // set DATA0 + } + endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0); } uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) { @@ -255,6 +291,15 @@ uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) { } void USBHAL::EP0write(uint8_t *buffer, uint32_t size) { + if (ctrl_xfer == CTRL_XFER_READY) { + // Transfer is done so ignore call + return; + } + if ((ctrl_xfer == CTRL_XFER_NONE) || (ctrl_xfer == CTRL_XFER_OUT)) { + // Prepare for next setup packet + endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0); + ctrl_xfer = CTRL_XFER_READY; + } endpointWrite(EP0IN, buffer, size); } @@ -262,13 +307,34 @@ void USBHAL::EP0getWriteResult(void) { } void USBHAL::EP0stall(void) { + if (ctrl_xfer == CTRL_XFER_READY) { + // Transfer is done so ignore call + return; + } + ctrl_xfer = CTRL_XFER_READY; + core_util_critical_section_enter(); stallEndpoint(EP0OUT); + // Prepare for next setup packet + // Note - time between stalling and setting up the endpoint + // must be kept to a minimum to prevent a dropped SETUP + // packet. + endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0); + core_util_critical_section_exit(); } EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) { - endpoint = PHY_TO_LOG(endpoint); - uint32_t idx = EP_BDT_IDX(endpoint, RX, 0); + uint8_t log_endpoint = PHY_TO_LOG(endpoint); + + uint32_t idx = EP_BDT_IDX(log_endpoint, RX, 0); bdt[idx].byte_count = maximumSize; + if ((Data1 >> endpoint) & 1) { + bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK; + } + else { + bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK; + } + + Data1 ^= (1 << endpoint); return EP_PENDING; } @@ -307,18 +373,14 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_ buffer[n] = ep_buf[n]; } - if (((Data1 >> endpoint) & 1) == ((bdt[idx].info >> 6) & 1)) { - if (setup && (buffer[6] == 0)) // if no setup data stage, - Data1 &= ~1UL; // set DATA0 - else - Data1 ^= (1 << endpoint); - } - - if (((Data1 >> endpoint) & 1)) { - bdt[idx].info = BD_DTS_MASK | BD_DATA01_MASK | BD_OWN_MASK; - } - else { - bdt[idx].info = BD_DTS_MASK | BD_OWN_MASK; + if (setup) { + // Record the setup type + if (buffer[6] == 0) { + ctrl_xfer = CTRL_XFER_NONE; + } else { + uint8_t in_xfer = (buffer[0] >> 7) & 1; + ctrl_xfer = in_xfer ? CTRL_XFER_IN : CTRL_XFER_OUT; + } } USB0->CTL &= ~USB_CTL_TXSUSPENDTOKENBUSY_MASK; @@ -351,9 +413,9 @@ EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) } if ((Data1 >> endpoint) & 1) { - bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK; - } else { bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK; + } else { + bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK; } Data1 ^= (1 << endpoint); @@ -450,7 +512,7 @@ void USBHAL::usbisr(void) { // setup packet if ((num == 0) && (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == SETUP_TOKEN)) { - Data1 &= ~0x02; + Data1 |= 0x02 | 0x01; // set DATA1 for TX and RX bdt[EP_BDT_IDX(0, TX, EVEN)].info &= ~BD_OWN_MASK; bdt[EP_BDT_IDX(0, TX, ODD)].info &= ~BD_OWN_MASK; From 183526bc0486c9759c6c811a8ab963ffbbe17263 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Mon, 15 Jan 2018 21:09:31 -0600 Subject: [PATCH 049/133] Fix LPC17XX and LPC40XX USB race condition If a SETUP packet arrives shortly after an IN then the packets will be processed in the wrong order - SETUP first then IN. This causes the subsequent control transfer to fail. Fix this problem by processing IN packets before processing SETUP packets. --- .../targets/TARGET_NXP/USBHAL_LPC17.cpp | 25 ++++++++++++++----- .../targets/TARGET_NXP/USBHAL_LPC40.cpp | 25 ++++++++++++++----- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp index 61dc87e0aa..5d516f5304 100644 --- a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp @@ -590,6 +590,25 @@ void USBHAL::usbisr(void) { if (LPC_USB->USBDevIntSt & EP_SLOW) { // (Slow) Endpoint Interrupt + // Process IN packets before SETUP packets + // Note - order of OUT and SETUP does not matter as OUT packets + // are clobbered by SETUP packets and thus ignored. + // + // A SETUP packet can arrive at any time where as an IN packet is + // only sent after calling EP0write and an OUT packet after EP0read. + // The functions EP0write and EP0read are called only in response to + // a setup packet or IN/OUT packets sent in response to that + // setup packet. Therefore, if an IN or OUT packet is pending + // at the same time as a SETUP packet, the IN or OUT packet belongs + // to the previous control transfer and should either be processed + // before the SETUP packet (in the case of IN) or dropped (in the + // case of OUT as SETUP clobbers the OUT data). + if (LPC_USB->USBEpIntSt & EP(EP0IN)) { + selectEndpointClearInterrupt(EP0IN); + LPC_USB->USBDevIntClr = EP_SLOW; + EP0in(); + } + // Process each endpoint interrupt if (LPC_USB->USBEpIntSt & EP(EP0OUT)) { if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) { @@ -601,12 +620,6 @@ void USBHAL::usbisr(void) { LPC_USB->USBDevIntClr = EP_SLOW; } - if (LPC_USB->USBEpIntSt & EP(EP0IN)) { - selectEndpointClearInterrupt(EP0IN); - LPC_USB->USBDevIntClr = EP_SLOW; - EP0in(); - } - for (uint8_t num = 2; num < 16*2; num++) { if (LPC_USB->USBEpIntSt & EP(num)) { selectEndpointClearInterrupt(num); diff --git a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp index a5d7b44401..7147366239 100644 --- a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp @@ -595,6 +595,25 @@ void USBHAL::usbisr(void) { if (LPC_USB->DevIntSt & EP_SLOW) { // (Slow) Endpoint Interrupt + // Process IN packets before SETUP packets + // Note - order of OUT and SETUP does not matter as OUT packets + // are clobbered by SETUP packets and thus ignored. + // + // A SETUP packet can arrive at any time where as an IN packet is + // only sent after calling EP0write and an OUT packet after EP0read. + // The functions EP0write and EP0read are called only in response to + // a setup packet or IN/OUT packets sent in response to that + // setup packet. Therefore, if an IN or OUT packet is pending + // at the same time as a SETUP packet, the IN or OUT packet belongs + // to the previous control transfer and should either be processed + // before the SETUP packet (in the case of IN) or dropped (in the + // case of OUT as SETUP clobbers the OUT data). + if (LPC_USB->EpIntSt & EP(EP0IN)) { + selectEndpointClearInterrupt(EP0IN); + LPC_USB->DevIntClr = EP_SLOW; + EP0in(); + } + // Process each endpoint interrupt if (LPC_USB->EpIntSt & EP(EP0OUT)) { if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) { @@ -606,12 +625,6 @@ void USBHAL::usbisr(void) { LPC_USB->DevIntClr = EP_SLOW; } - if (LPC_USB->EpIntSt & EP(EP0IN)) { - selectEndpointClearInterrupt(EP0IN); - LPC_USB->DevIntClr = EP_SLOW; - EP0in(); - } - for (uint8_t num = 2; num < 16*2; num++) { if (LPC_USB->EpIntSt & EP(num)) { selectEndpointClearInterrupt(num); From 379daa653d0b4555ee04782e359ed3eba78d9407 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Mon, 15 Jan 2018 21:18:32 -0600 Subject: [PATCH 050/133] Fix LPC17XX and LPC40XX USB data throttling Only clear the USB read buffer when endpointRead is called. This allows data to be read with endpointReadResult without also allowing USB to transfer more data. Instead additional data is transferred explicitly with a call to endpointRead. --- .../USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp | 12 ++++++------ .../USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp index 5d516f5304..6c047e8363 100644 --- a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC17.cpp @@ -275,11 +275,6 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) { LPC_USB->USBCtrl = 0; - if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) { - SIEselectEndpoint(endpoint); - SIEclearBuffer(); - } - return size; } @@ -431,7 +426,7 @@ void USBHAL::EP0setup(uint8_t *buffer) { } void USBHAL::EP0read(void) { - // Not required + endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0); } void USBHAL::EP0readStage(void) { @@ -456,6 +451,11 @@ void USBHAL::EP0stall(void) { } EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) { + // Don't clear isochronous endpoints + if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) { + SIEselectEndpoint(endpoint); + SIEclearBuffer(); + } return EP_PENDING; } diff --git a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp index 7147366239..248dd63b19 100644 --- a/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_NXP/USBHAL_LPC40.cpp @@ -276,11 +276,6 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) { LPC_USB->Ctrl = 0; - if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) { - SIEselectEndpoint(endpoint); - SIEclearBuffer(); - } - return size; } @@ -436,7 +431,7 @@ void USBHAL::EP0setup(uint8_t *buffer) { } void USBHAL::EP0read(void) { - // Not required + endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0); } void USBHAL::EP0readStage(void) { @@ -461,6 +456,11 @@ void USBHAL::EP0stall(void) { } EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) { + // Don't clear isochronous endpoints + if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) { + SIEselectEndpoint(endpoint); + SIEclearBuffer(); + } return EP_PENDING; } From 597633d4455627055d92e3b56a469ac32463c3bf Mon Sep 17 00:00:00 2001 From: Abdelhak Bougouffa Date: Sat, 2 Dec 2017 17:08:43 +0100 Subject: [PATCH 051/133] Replace the old deprecated callbacks --- features/unsupported/USBHost/USBHost/USBDeviceConnected.h | 4 ++-- features/unsupported/USBHost/USBHost/USBEndpoint.h | 4 ++-- features/unsupported/USBHost/USBHost/USBHost.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/features/unsupported/USBHost/USBHost/USBDeviceConnected.h b/features/unsupported/USBHost/USBHost/USBDeviceConnected.h index f74c4b6e4b..88dd6dbbbf 100644 --- a/features/unsupported/USBHost/USBHost/USBDeviceConnected.h +++ b/features/unsupported/USBHost/USBHost/USBDeviceConnected.h @@ -106,7 +106,7 @@ public: template inline void onDisconnect(uint8_t intf_nb, T* tptr, void (T::*mptr)(void)) { if ((mptr != NULL) && (tptr != NULL)) { - intf[intf_nb].detach.attach(tptr, mptr); + intf[intf_nb].detach = callback(tptr, mptr); } } @@ -118,7 +118,7 @@ public: */ inline void onDisconnect(uint8_t intf_nb, void (*fn)(void)) { if (fn != NULL) { - intf[intf_nb].detach.attach(fn); + intf[intf_nb].detach = fn; } } diff --git a/features/unsupported/USBHost/USBHost/USBEndpoint.h b/features/unsupported/USBHost/USBHost/USBEndpoint.h index 5b1287f421..d0d9fd4231 100644 --- a/features/unsupported/USBHost/USBHost/USBEndpoint.h +++ b/features/unsupported/USBHost/USBHost/USBEndpoint.h @@ -89,7 +89,7 @@ public: template inline void attach(T* tptr, void (T::*mptr)(void)) { if((mptr != NULL) && (tptr != NULL)) { - rx.attach(tptr, mptr); + rx = callback(tptr, mptr); } } @@ -100,7 +100,7 @@ public: */ inline void attach(void (*fptr)(void)) { if(fptr != NULL) { - rx.attach(fptr); + rx = fptr; } } diff --git a/features/unsupported/USBHost/USBHost/USBHost.cpp b/features/unsupported/USBHost/USBHost/USBHost.cpp index b9424f73f1..518d00d94f 100644 --- a/features/unsupported/USBHost/USBHost/USBHost.cpp +++ b/features/unsupported/USBHost/USBHost/USBHost.cpp @@ -312,7 +312,7 @@ USBHost::USBHost() : usbThread(osPriorityNormal, USB_THREAD_STACK) } #endif - usbThread.start(this, &USBHost::usb_process); + usbThread.start(callback(this, &USBHost::usb_process)); } USBHost::Lock::Lock(USBHost* pHost) : m_pHost(pHost) From 9c464a03380bb3ae0927211c1181407d6912ba67 Mon Sep 17 00:00:00 2001 From: Abdelhak Bougouffa Date: Sat, 2 Dec 2017 17:09:46 +0100 Subject: [PATCH 052/133] Add checking for MAX_HUB_NB in a part of code that depend on MAX_HUB_NB --- features/unsupported/USBHost/USBHost/USBHost.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/features/unsupported/USBHost/USBHost/USBHost.cpp b/features/unsupported/USBHost/USBHost/USBHost.cpp index 518d00d94f..704e28001c 100644 --- a/features/unsupported/USBHost/USBHost/USBHost.cpp +++ b/features/unsupported/USBHost/USBHost/USBHost.cpp @@ -88,11 +88,14 @@ void USBHost::usb_process() /* check that hub is connected to root port */ if (usb_msg->hub_parent) { /* a hub device must be present */ +#if MAX_HUB_NB + for (k = 0; k < MAX_HUB_NB; k++) { if ((&hubs[k] == usb_msg->hub_parent) && (hub_in_use[k])) { hub_unplugged=false; } } +#endif } else { hub_unplugged = false; } From 88fbf6b3412667b4d4c1414ea8388fb237c2f621 Mon Sep 17 00:00:00 2001 From: iotvietmember Date: Tue, 17 Oct 2017 12:07:18 +0700 Subject: [PATCH 053/133] Add detect_code=0xC006 to the VBLUNO51 boards configuration. Add detect_code=0xC006 to the VBLUNO51 boards configuration. Disbale UART Hard flow control feature. Signed-off-by: iotvietmember --- targets/targets.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/targets/targets.json b/targets/targets.json index a5f81fec96..adf96948c5 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -3600,23 +3600,31 @@ "VBLUNO51_LEGACY": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K"], + "detect_code": ["C006"], + "overrides": {"uart_hwfc": 0}, "extra_labels_add": ["VBLUNO51"] }, "VBLUNO51_BOOT": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K_BOOT"], + "detect_code": ["C006"], + "overrides": {"uart_hwfc": 0}, "extra_labels_add": ["VBLUNO51"], "macros_add": ["TARGET_VBLUNO51"] }, "VBLUNO51_OTA": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K_OTA"], + "detect_code": ["C006"], + "overrides": {"uart_hwfc": 0}, "extra_labels_add": ["VBLUNO51"], "macros_add": ["TARGET_VBLUNO51"] }, "VBLUNO51": { "supported_form_factors": ["ARDUINO"], "inherits": ["MCU_NRF51_32K_UNIFIED"], + "detect_code": ["C006"], + "overrides": {"uart_hwfc": 0}, "device_has": ["ANALOGIN", "I2C", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "SPISLAVE"], "release_versions": ["2"], "device_name": "nRF51822_xxAC" From 0ffd251cd2e3bef272bbc86237426ad3e5f247ad Mon Sep 17 00:00:00 2001 From: "c.mandl" Date: Mon, 20 Nov 2017 10:02:08 +0100 Subject: [PATCH 054/133] Added Netbeans Exporter --- tools/export/__init__.py | 7 +- tools/export/nb/__init__.py | 190 ++++++++++++++++++++++++++ tools/export/nb/configurations.tmpl | 205 ++++++++++++++++++++++++++++ tools/export/nb/mbedignore.tmpl | 2 + tools/export/nb/project.tmpl | 28 ++++ 5 files changed, 431 insertions(+), 1 deletion(-) create mode 100644 tools/export/nb/__init__.py create mode 100644 tools/export/nb/configurations.tmpl create mode 100644 tools/export/nb/mbedignore.tmpl create mode 100644 tools/export/nb/project.tmpl diff --git a/tools/export/__init__.py b/tools/export/__init__.py index 501be59d15..8ae710fd27 100644 --- a/tools/export/__init__.py +++ b/tools/export/__init__.py @@ -33,6 +33,7 @@ from tools.export import embitz, coide, kds, simplicity, atmelstudio, mcuxpresso from tools.export import sw4stm32, e2studio, zip, cmsis, uvision, cdt, vscode from tools.export import gnuarmeclipse from tools.export import qtcreator +from tools.export import nb from tools.targets import TARGET_NAMES EXPORTERS = { @@ -57,11 +58,15 @@ EXPORTERS = { 'eclipse_iar' : cdt.EclipseIAR, 'eclipse_armc5' : cdt.EclipseArmc5, 'gnuarmeclipse': gnuarmeclipse.GNUARMEclipse, + #'netbeans': nb.Netbeans, 'mcuxpresso': mcuxpresso.MCUXpresso, 'qtcreator': qtcreator.QtCreator, 'vscode_gcc_arm' : vscode.VSCodeGcc, 'vscode_iar' : vscode.VSCodeIAR, - 'vscode_armc5' : vscode.VSCodeArmc5 + 'vscode_armc5' : vscode.VSCodeArmc5, + 'netbeans_gcc_arm' : nb.NetbeansGcc, + 'netbeans_iar' : nb.NetbeansIAR, + 'netbeans_armc5' : nb.NetbeansArmc5 } ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """ diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py new file mode 100644 index 0000000000..cdfee42fbe --- /dev/null +++ b/tools/export/nb/__init__.py @@ -0,0 +1,190 @@ +import re +import os +import copy + +from os.path import relpath, join, exists +from os import makedirs + +from tools.export.makefile import Makefile, GccArm, Armc5, IAR + + +class Netbeans(Makefile): + """Generic Netbeans project. Intended to be subclassed by classes that + specify a type of Makefile. + """ + + @property + def flags(self): + """Returns a dictionary of toolchain flags. + Keys of the dictionary are: + cxx_flags - c++ flags + c_flags - c flags + ld_flags - linker flags + asm_flags - assembler flags + common_flags - common options + + The difference from the parent function is that it does not + add macro definitions, since they are passed separately. + """ + + config_header = self.toolchain.get_config_header() + flags = {key + "_flags": copy.deepcopy(value) for key, value + in self.toolchain.flags.iteritems()} + if config_header: + config_header = relpath(config_header, + self.resources.file_basepath[config_header]) + flags['c_flags'] += self.toolchain.get_config_option(config_header) + flags['cxx_flags'] += self.toolchain.get_config_option( + config_header) + return flags + + def generate(self): + """Generate Makefile, configurations.xml & project.xml Netbeans project file + """ + super(Netbeans, self).generate() + + defines = [] # list of tuples ('D'/'U', [key, value]) (value is optional) + forced_includes = [] # list of strings + sources = [] # list of strings + headers = [] # list of strings + + next_is_include = False + for f in self.flags['c_flags'] + self.flags['cxx_flags']: + f = f.strip() + if next_is_include: + forced_includes.append(f) + next_is_include = False + continue + if f.startswith('-D'): + defines.append(('D', f[2:].split('=', 1))) + elif f.startswith('-U'): + defines.append(('U', [f[2:]])) + elif f == "-include": + next_is_include = True + + # Convert all Backslashes to Forward Slashes + self.resources.win_to_unix() + + for r_type in ['c_sources', 's_sources', 'cpp_sources']: + sources.extend(getattr(self.resources, r_type)) + + for r_type in ['headers']: + headers.extend(getattr(self.resources, r_type)) + + starting_dot = re.compile(r'(^[.]/|^[.]$)') + sources = [starting_dot.sub('', field) for field in sources] + headers = [starting_dot.sub('', field) for field in headers] + include_paths = [starting_dot.sub('', field) for field in self.resources.inc_dirs] + + headers.sort() + sources.sort() + + headers_output = create_netbeans_file_list(headers) + sources_output = create_netbeans_file_list(sources) + ctx = { + 'name': self.project_name, + 'elf_location': join('BUILD', self.project_name) + '.elf', + 'c_symbols': self.toolchain.get_symbols(), + 'asm_symbols': self.toolchain.get_symbols(True), + 'c_flags': self.flags['c_flags'], + 'cxx_flags': self.flags['cxx_flags'], + 'ld_flags': self.flags['ld_flags'], + 'asm_flags': self.flags['asm_flags'], + 'common_flags': self.flags['common_flags'], + 'target': self.target, + 'include_paths': include_paths, + 'sources': sources, + 'headers': headers, + 'headers_folder': headers_output, + 'sources_folder': sources_output, + 'load_exe': str(self.LOAD_EXE).lower() + } + + if not exists(join(self.export_dir, 'nbproject')): + makedirs(join(self.export_dir, 'nbproject')) + + self.gen_file('nb/configurations.tmpl', ctx, 'nbproject/configurations.xml') + self.gen_file('nb/project.tmpl', ctx, 'nbproject/project.xml') + self.gen_file('nb/mbedignore.tmpl', ctx, '.mbedignore') + + +def create_netbeans_file_list(file_list): + output = [] + prev_dir = '' + folder_count = 1 + for idx, item in enumerate(file_list): + cur_dir = os.path.dirname(item) + dir_temp = os.path.normpath(cur_dir) + prev_dir_temp = os.path.normpath(prev_dir) + dir_list = dir_temp.split(os.sep) + prev_dir_list = prev_dir_temp.split(os.sep) + dir_depth = len(dir_list) + + # print 'PREV_DIR: ' + str(prev_dir_list) + + # print 'CURR_DIR: ' + str(dir_list) + + # Current File is in Directory: Compare the given dir with previous Dir + if cur_dir and prev_dir != cur_dir: + # evaluate all matched items (from current and previous list) + matched = [] + for element in dir_list: + if element in prev_dir_list: + matched.append(element) + + # calculate difference between matched and length + diff = dir_depth - len(matched) + + # print 'MATCHED: ' + str(matched) + + # if previous dir was not root + if prev_dir != '': + # if the elements count is not equal we calculate the difference + if len(dir_list) != len(prev_dir_list): + dir_depth_prev = len(prev_dir_list) + delta = dir_depth_prev - len(matched) + + for i in range(dir_depth_prev - delta, dir_depth_prev): + output.append('') + + # if the elements count is equal, we subtract the matched length from the total length + else: + for i in range(len(matched), len(dir_list)): + output.append('') + + for i in range(dir_depth - diff, dir_depth): + output.append('') + folder_count += 1 + + # Current File is in root + else: + # Close Tag if we are in root and the previous dir wasn't + if cur_dir == '' and prev_dir != '': + for i in range(0, len(prev_dir_list)): + output.append('') + + # Save the Current Dir + prev_dir = cur_dir + output.append('' + str(item) + '') + # if last iteration close all open tags + if idx == len(file_list) - 1 and cur_dir != '': + for i in range(0, len(dir_list)): + output.append('') + + return output + + +class NetbeansGcc(Netbeans, GccArm): + LOAD_EXE = True + NAME = "Netbeans-GCC-ARM" + + +class NetbeansArmc5(Netbeans, Armc5): + LOAD_EXE = False + NAME = "Netbeans-Armc5" + + +class NetbeansIAR(Netbeans, IAR): + LOAD_EXE = True + NAME = "Netbeans-IAR" diff --git a/tools/export/nb/configurations.tmpl b/tools/export/nb/configurations.tmpl new file mode 100644 index 0000000000..93241d6934 --- /dev/null +++ b/tools/export/nb/configurations.tmpl @@ -0,0 +1,205 @@ + + + + + + + {% for header in headers_folder -%} + {{ header }} + {% endfor %} + + + + + {% for source in sources_folder -%} + {{ source }} + {% endfor %} + + + + + Makefile + + + Makefile + + + + default + true + false + + + + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in c_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in c_symbols -%} + {{ symbol }} + {% endfor %} + + + + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in cxx_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in c_symbols -%} + {{ symbol }} + {% endfor %} + + + + 5 + + + 5 + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in asm_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in asm_symbols -%} + {{ symbol }} + {% endfor %} + + + + + {% for flag in ld_flags -%} + {{ flag }} + {% endfor %} + + + + + {% for h in headers -%} + + + {% endfor %} + {% for s in sources -%} + + + {% endfor %} + + + + + + + default + true + false + + + {% for h in headers -%} + + + {% endfor %} + {% for s in sources -%} + + + {% endfor %} + + 5 + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in c_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in c_symbols -%} + {{ symbol }} + {% endfor %} + + + + 5 + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in cxx_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in c_symbols -%} + {{ symbol }} + {% endfor %} + + + + 5 + + + 5 + + {% for include in include_paths -%} + {{ include }} + {% endfor %} + + + {% for flag in asm_flags -%} + {{ flag }} + {% endfor %} + + + {% for symbol in asm_symbols -%} + {{ symbol }} + {% endfor %} + + + + + {% for flag in ld_flags -%} + {{ flag }} + {% endfor %} + + + + + + + + diff --git a/tools/export/nb/mbedignore.tmpl b/tools/export/nb/mbedignore.tmpl new file mode 100644 index 0000000000..805fc686b5 --- /dev/null +++ b/tools/export/nb/mbedignore.tmpl @@ -0,0 +1,2 @@ +nbproject/private/*.cpp +nbproject/private/*.c diff --git a/tools/export/nb/project.tmpl b/tools/export/nb/project.tmpl new file mode 100644 index 0000000000..c73b0eebbd --- /dev/null +++ b/tools/export/nb/project.tmpl @@ -0,0 +1,28 @@ + + + org.netbeans.modules.cnd.makeproject + + + {{name}} + + cpp + + UTF-8 + + + + + Debug + 1 + + + Release + 1 + + + + false + + + + From 979e54b031f11b7b9d01573ce6c72f21c9c1de98 Mon Sep 17 00:00:00 2001 From: "c.mandl" Date: Mon, 20 Nov 2017 10:05:06 +0100 Subject: [PATCH 055/133] Removed commented Line --- tools/export/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/export/__init__.py b/tools/export/__init__.py index 8ae710fd27..c70c762047 100644 --- a/tools/export/__init__.py +++ b/tools/export/__init__.py @@ -58,7 +58,6 @@ EXPORTERS = { 'eclipse_iar' : cdt.EclipseIAR, 'eclipse_armc5' : cdt.EclipseArmc5, 'gnuarmeclipse': gnuarmeclipse.GNUARMEclipse, - #'netbeans': nb.Netbeans, 'mcuxpresso': mcuxpresso.MCUXpresso, 'qtcreator': qtcreator.QtCreator, 'vscode_gcc_arm' : vscode.VSCodeGcc, From 103244da8ca9d883dea333fd58d6153d8e2b0538 Mon Sep 17 00:00:00 2001 From: "c.mandl" Date: Fri, 24 Nov 2017 09:45:46 +0100 Subject: [PATCH 056/133] Refactoring of Netbeans Exporter...still some more work to do, because linking still not works --- tools/export/__init__.py | 6 +- tools/export/nb/Makefile.tmpl | 128 ++++++++ tools/export/nb/__init__.py | 434 ++++++++++++++++++++-------- tools/export/nb/configurations.tmpl | 204 ++++++------- tools/export/nb/project.tmpl | 4 +- 5 files changed, 531 insertions(+), 245 deletions(-) create mode 100644 tools/export/nb/Makefile.tmpl diff --git a/tools/export/__init__.py b/tools/export/__init__.py index c70c762047..c15669618f 100644 --- a/tools/export/__init__.py +++ b/tools/export/__init__.py @@ -58,14 +58,12 @@ EXPORTERS = { 'eclipse_iar' : cdt.EclipseIAR, 'eclipse_armc5' : cdt.EclipseArmc5, 'gnuarmeclipse': gnuarmeclipse.GNUARMEclipse, + 'netbeans': nb.GNUARMNetbeans, 'mcuxpresso': mcuxpresso.MCUXpresso, 'qtcreator': qtcreator.QtCreator, 'vscode_gcc_arm' : vscode.VSCodeGcc, 'vscode_iar' : vscode.VSCodeIAR, - 'vscode_armc5' : vscode.VSCodeArmc5, - 'netbeans_gcc_arm' : nb.NetbeansGcc, - 'netbeans_iar' : nb.NetbeansIAR, - 'netbeans_armc5' : nb.NetbeansArmc5 + 'vscode_armc5' : vscode.VSCodeArmc5 } ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """ diff --git a/tools/export/nb/Makefile.tmpl b/tools/export/nb/Makefile.tmpl new file mode 100644 index 0000000000..05de621e85 --- /dev/null +++ b/tools/export/nb/Makefile.tmpl @@ -0,0 +1,128 @@ +# +# There exist several targets which are by default empty and which can be +# used for execution of your targets. These targets are usually executed +# before and after some main targets. They are: +# +# .build-pre: called before 'build' target +# .build-post: called after 'build' target +# .clean-pre: called before 'clean' target +# .clean-post: called after 'clean' target +# .clobber-pre: called before 'clobber' target +# .clobber-post: called after 'clobber' target +# .all-pre: called before 'all' target +# .all-post: called after 'all' target +# .help-pre: called before 'help' target +# .help-post: called after 'help' target +# +# Targets beginning with '.' are not intended to be called on their own. +# +# Main targets can be executed directly, and they are: +# +# build build a specific configuration +# clean remove built files from a configuration +# clobber remove all built files +# all build all configurations +# help print help mesage +# +# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and +# .help-impl are implemented in nbproject/makefile-impl.mk. +# +# Available make variables: +# +# CND_BASEDIR base directory for relative paths +# CND_DISTDIR default top distribution directory (build artifacts) +# CND_BUILDDIR default top build directory (object files, ...) +# CONF name of current configuration +# CND_PLATFORM_${CONF} platform name (current configuration) +# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) +# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) +# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) +# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) +# CND_PACKAGE_NAME_${CONF} name of package (current configuration) +# CND_PACKAGE_PATH_${CONF} path to package (current configuration) +# +# NOCDDL + + +# Environment +MKDIR=mkdir +CP=cp +CCADMIN=CCadmin + + +# build +build: .build-post + +.build-pre: +# Add your pre 'build' code here... + +.build-post: .build-impl +# Add your post 'build' code here... + + +# clean +clean: .clean-post + +.clean-pre: +# Add your pre 'clean' code here... + +.clean-post: .clean-impl +# Add your post 'clean' code here... + + +# clobber +clobber: .clobber-post + +.clobber-pre: +# Add your pre 'clobber' code here... + +.clobber-post: .clobber-impl +# Add your post 'clobber' code here... + + +# all +all: .all-post + +.all-pre: +# Add your pre 'all' code here... + +.all-post: .all-impl +# Add your post 'all' code here... + + +# build tests +build-tests: .build-tests-post + +.build-tests-pre: +# Add your pre 'build-tests' code here... + +.build-tests-post: .build-tests-impl +# Add your post 'build-tests' code here... + + +# run tests +test: .test-post + +.test-pre: build-tests +# Add your pre 'test' code here... + +.test-post: .test-impl +# Add your post 'test' code here... + + +# help +help: .help-post + +.help-pre: +# Add your pre 'help' code here... + +.help-post: .help-impl +# Add your post 'help' code here... + + + +# include project implementation makefile +include nbproject/Makefile-impl.mk + +# include project make variables +include nbproject/Makefile-variables.mk diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index cdfee42fbe..2a3357d986 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -1,20 +1,34 @@ -import re import os import copy -from os.path import relpath, join, exists +from os.path import relpath, join, exists, dirname, basename from os import makedirs +from json import load -from tools.export.makefile import Makefile, GccArm, Armc5, IAR +from tools.export.exporters import Exporter, apply_supported_whitelist +from tools.targets import TARGET_MAP +from tools.utils import NotSupportedException +from tools.build_api import prepare_toolchain + +POST_BINARY_WHITELIST = set([ + "TEENSY3_1Code.binary_hook", + "MCU_NRF51Code.binary_hook", + "LPCTargetCode.lpc_patch", + "LPC4088Code.binary_hook" +]) -class Netbeans(Makefile): - """Generic Netbeans project. Intended to be subclassed by classes that - specify a type of Makefile. - """ +class GNUARMNetbeans(Exporter): + NAME = 'GNU ARM Netbeans' + TOOLCHAIN = 'GCC_ARM' - @property - def flags(self): + @classmethod + def is_target_supported(cls, target_name): + target = TARGET_MAP[target_name] + return apply_supported_whitelist( + cls.TOOLCHAIN, POST_BINARY_WHITELIST, target) + + def toolchain_flags(self, toolchain): """Returns a dictionary of toolchain flags. Keys of the dictionary are: cxx_flags - c++ flags @@ -23,168 +37,352 @@ class Netbeans(Makefile): asm_flags - assembler flags common_flags - common options - The difference from the parent function is that it does not - add macro definitions, since they are passed separately. + The difference from the above is that it takes a parameter. """ + # Note: use the config options from the currently selected toolchain. config_header = self.toolchain.get_config_header() + flags = {key + "_flags": copy.deepcopy(value) for key, value - in self.toolchain.flags.iteritems()} + in toolchain.flags.iteritems()} if config_header: config_header = relpath(config_header, self.resources.file_basepath[config_header]) - flags['c_flags'] += self.toolchain.get_config_option(config_header) - flags['cxx_flags'] += self.toolchain.get_config_option( - config_header) + header_options = self.toolchain.get_config_option(config_header) + flags['c_flags'] += header_options + flags['cxx_flags'] += header_options return flags - def generate(self): - """Generate Makefile, configurations.xml & project.xml Netbeans project file - """ - super(Netbeans, self).generate() + @staticmethod + def get_defines_and_remove_from_flags(flags_in, str_key): + defines = [] + flags_temp = copy.deepcopy(flags_in) + for f in flags_temp[str_key]: + f = f.strip() + if f.startswith('-D'): + defines.append(f[2:]) + flags_in[str_key].remove(f) - defines = [] # list of tuples ('D'/'U', [key, value]) (value is optional) - forced_includes = [] # list of strings - sources = [] # list of strings - headers = [] # list of strings + return defines + @staticmethod + def get_includes_and_remove_from_flags(flags_in, str_key): + includes = [] + flags_temp = copy.deepcopy(flags_in) next_is_include = False - for f in self.flags['c_flags'] + self.flags['cxx_flags']: + for f in flags_temp[str_key]: f = f.strip() if next_is_include: - forced_includes.append(f) + includes.append(f) + flags_in[str_key].remove(f) next_is_include = False continue - if f.startswith('-D'): - defines.append(('D', f[2:].split('=', 1))) - elif f.startswith('-U'): - defines.append(('U', [f[2:]])) - elif f == "-include": + if f == "-include": + flags_in[str_key].remove(f) next_is_include = True + return includes + + @staticmethod + def get_c_std_and_remove_from_flag(flags_in, str_key): + comp_std = '' + c_std = { + 'c90': 'c90', 'c89': 'c90', 'gnu90': 'gnu90', 'gnu89': 'gnu90', + 'c99': 'c99', 'c9x': 'c99', 'gnu99': 'gnu99', 'gnu9x': 'gnu98', + 'c11': 'c11', 'c1x': 'c11', 'gnu11': 'gnu11', 'gnu1x': 'gnu11' + } + cpp_std = { + 'c++98': 'cpp98', 'c++03': 'cpp98', + 'gnu++98': 'gnucpp98', 'gnu++03': 'gnucpp98', + 'c++0x': 'cpp0x', 'gnu++0x': 'gnucpp0x', + 'c++11': 'cpp11', 'gnu++11': 'gnucpp11', + 'c++1y': 'cpp1y', 'gnu++1y': 'gnucpp1y', + 'c++14': 'cpp14', 'gnu++14': 'gnucpp14', + 'c++1z': 'cpp1z', 'gnu++1z': 'gnucpp1z', + } + + flags_temp = copy.deepcopy(flags_in) + for f in flags_temp[str_key]: + f = f.strip() + if f.startswith('-std='): + comp_std = f[len('-std='):] + flags_in[str_key].remove(f) + elif f.startswith('-'): + std = f[len('-'):] + if std in c_std or std in cpp_std: + comp_std = std + flags_in[str_key].remove(f) + return comp_std + + def validate_resources(self): + if not self.resources.linker_script: + raise NotSupportedException("No linker script found.") + + def create_jinja_ctx(self): + + self.validate_resources() # Convert all Backslashes to Forward Slashes self.resources.win_to_unix() + print 'Include folders: {0}'.format(len(self.resources.inc_dirs)) + + print 'Symbols: {0}'.format(len(self.toolchain.get_symbols())) + + self.ld_script = self.filter_dot( + self.resources.linker_script) + print 'Linker script: {0}'.format(self.ld_script) + + # Read in all profiles, we'll extract compiler options. + profiles = self.get_all_profiles() + + profile_ids = [s.lower() for s in profiles] + profile_ids.sort() + + self.options = {} + for prof_id in profile_ids: + # There are 4 categories of options, a category common too + # all tools and a specific category for each of the tools. + opts = {} + opts['defines'] = {} + opts['common'] = {} + opts['as'] = {} + opts['c'] = {} + opts['cpp'] = {} + opts['ld'] = {} + + opts['id'] = prof_id + opts['name'] = opts['id'].capitalize() + + print + print 'Build configuration: {0}'.format(opts['name']) + + profile = profiles[prof_id] + + # A small hack, do not bother with src_path again, + # pass an empty string to avoid crashing. + src_paths = [''] + target_name = self.toolchain.target.name + + toolchain = prepare_toolchain( + src_paths, "", target_name, self.TOOLCHAIN, build_profile=[profile]) + + flags = self.toolchain_flags(toolchain) + + print 'Common flags:', ' '.join(flags['common_flags']) + print 'C++ flags:', ' '.join(flags['cxx_flags']) + print 'C flags:', ' '.join(flags['c_flags']) + print 'ASM flags:', ' '.join(flags['asm_flags']) + print 'Linker flags:', ' '.join(flags['ld_flags']) + + opts['defines'] = self.get_defines_and_remove_from_flags(flags, 'common_flags') + opts['forced_includes'] = self.get_includes_and_remove_from_flags(flags, 'common_flags') + opts['common'] = flags['common_flags'] + opts['as'] = flags['asm_flags'] + opts['c'] = flags['c_flags'] + opts['cpp'] = flags['cxx_flags'] + opts['ld'] = flags['ld_flags'] + + self.options[prof_id] = opts + + sources = [] # list of strings + + forced_includes = self.get_includes_and_remove_from_flags(flags, 'c_flags') + forced_includes += self.get_includes_and_remove_from_flags(flags, 'cxx_flags') + + # Remove Duplicates + forced_includes = list(set(forced_includes)) + + c_std = self.get_c_std_and_remove_from_flag(flags, 'c_flags') + cpp_std = self.get_c_std_and_remove_from_flag(flags, 'cxx_flags') + + # Make one list of all resources for r_type in ['c_sources', 's_sources', 'cpp_sources']: sources.extend(getattr(self.resources, r_type)) - for r_type in ['headers']: - headers.extend(getattr(self.resources, r_type)) + # Remove all leading './' + c_sources = [self.filter_dot(field) for field in getattr(self.resources, 'c_sources')] + cpp_sources = [self.filter_dot(field) for field in getattr(self.resources, 'cpp_sources')] + s_sources = [self.filter_dot(field) for field in getattr(self.resources, 's_sources')] + headers = [self.filter_dot(field) for field in getattr(self.resources, 'headers')] + sources = [self.filter_dot(field) for field in sources] + include_paths = [self.filter_dot(field) for field in self.resources.inc_dirs] - starting_dot = re.compile(r'(^[.]/|^[.]$)') - sources = [starting_dot.sub('', field) for field in sources] - headers = [starting_dot.sub('', field) for field in headers] - include_paths = [starting_dot.sub('', field) for field in self.resources.inc_dirs] + if 'nbproject' in include_paths: + include_paths.remove('nbproject') - headers.sort() - sources.sort() - - headers_output = create_netbeans_file_list(headers) - sources_output = create_netbeans_file_list(sources) - ctx = { + jinja_ctx = { 'name': self.project_name, 'elf_location': join('BUILD', self.project_name) + '.elf', 'c_symbols': self.toolchain.get_symbols(), 'asm_symbols': self.toolchain.get_symbols(True), - 'c_flags': self.flags['c_flags'], - 'cxx_flags': self.flags['cxx_flags'], + 'c_flags': flags['c_flags'], + 'cxx_flags': flags['cxx_flags'], 'ld_flags': self.flags['ld_flags'], 'asm_flags': self.flags['asm_flags'], 'common_flags': self.flags['common_flags'], 'target': self.target, 'include_paths': include_paths, - 'sources': sources, + 'forced_includes': forced_includes, + 'c_sources': c_sources, + 'cpp_sources': cpp_sources, + 's_sources': s_sources, 'headers': headers, - 'headers_folder': headers_output, - 'sources_folder': sources_output, - 'load_exe': str(self.LOAD_EXE).lower() + 'headers_folder': self.get_netbeans_file_list(sorted(headers)), + 'sources_folder': self.get_netbeans_file_list(sorted(sources)), + 'options': self.options, + 'c_std': self.get_netbeans_c_std(c_std), + 'cpp_std': self.get_netbeans_cpp_std(cpp_std), + 'linker_script': self.ld_script, } + return jinja_ctx + + def generate(self): + """Generate Makefile, configurations.xml & project.xml Netbeans project file + """ + # super(Netbeans, self).generate() + + jinja_ctx = self.create_jinja_ctx() + + print + print 'Create a GNU ARM Netbeans C++ managed project' + print 'Project name: {0}'.format(self.project_name) + print 'Target: {0}'.format(self.toolchain.target.name) + print 'Toolchain: {0}'.format(self.TOOLCHAIN) if not exists(join(self.export_dir, 'nbproject')): makedirs(join(self.export_dir, 'nbproject')) - self.gen_file('nb/configurations.tmpl', ctx, 'nbproject/configurations.xml') - self.gen_file('nb/project.tmpl', ctx, 'nbproject/project.xml') - self.gen_file('nb/mbedignore.tmpl', ctx, '.mbedignore') + self.gen_file('nb/configurations.tmpl', jinja_ctx, 'nbproject/configurations.xml') + self.gen_file('nb/project.tmpl', jinja_ctx, 'nbproject/project.xml') + self.gen_file('nb/mbedignore.tmpl', jinja_ctx, '.mbedignore') + self.gen_file('nb/Makefile.tmpl', jinja_ctx, 'Makefile') + print + print 'Done. Import the \'{0}\' project in Netbeans.'.format(self.project_name) -def create_netbeans_file_list(file_list): - output = [] - prev_dir = '' - folder_count = 1 - for idx, item in enumerate(file_list): - cur_dir = os.path.dirname(item) - dir_temp = os.path.normpath(cur_dir) - prev_dir_temp = os.path.normpath(prev_dir) - dir_list = dir_temp.split(os.sep) - prev_dir_list = prev_dir_temp.split(os.sep) - dir_depth = len(dir_list) + # ------------------------------------------------------------------------- - # print 'PREV_DIR: ' + str(prev_dir_list) + @staticmethod + def filter_dot(str_in): + """ + Remove the './' prefix, if present. + This function assumes that resources.win_to_unix() + replaced all windows backslashes with slashes. + """ + if str_in is None: + return None + if str_in[:2] == './': + return str_in[2:] + return str_in - # print 'CURR_DIR: ' + str(dir_list) + # ------------------------------------------------------------------------- - # Current File is in Directory: Compare the given dir with previous Dir - if cur_dir and prev_dir != cur_dir: - # evaluate all matched items (from current and previous list) - matched = [] - for element in dir_list: - if element in prev_dir_list: - matched.append(element) + @staticmethod + def get_all_profiles(): + tools_path = dirname(dirname(dirname(__file__))) + file_names = [join(tools_path, "profiles", fn) for fn in os.listdir( + join(tools_path, "profiles")) if fn.endswith(".json")] - # calculate difference between matched and length - diff = dir_depth - len(matched) + # print file_names - # print 'MATCHED: ' + str(matched) + # profile_names = [basename(fn).replace(".json", "") + # for fn in file_names] + # print profile_names - # if previous dir was not root - if prev_dir != '': - # if the elements count is not equal we calculate the difference - if len(dir_list) != len(prev_dir_list): - dir_depth_prev = len(prev_dir_list) - delta = dir_depth_prev - len(matched) + profiles = {} - for i in range(dir_depth_prev - delta, dir_depth_prev): + for fn in file_names: + content = load(open(fn)) + profile_name = basename(fn).replace(".json", "") + profiles[profile_name] = content + + return profiles + + @staticmethod + def get_netbeans_file_list(file_list): + output = [] + prev_dir = '' + folder_count = 1 + for idx, item in enumerate(file_list): + cur_dir = os.path.dirname(item) + dir_temp = os.path.normpath(cur_dir) + prev_dir_temp = os.path.normpath(prev_dir) + dir_list = dir_temp.split(os.sep) + prev_dir_list = prev_dir_temp.split(os.sep) + dir_depth = len(dir_list) + + # print 'PREV_DIR: ' + str(prev_dir_list) + + # print 'CURR_DIR: ' + str(dir_list) + + # Current File is in Directory: Compare the given dir with previous Dir + if cur_dir and prev_dir != cur_dir: + # evaluate all matched items (from current and previous list) + matched = [] + for element in dir_list: + if element in prev_dir_list: + matched.append(element) + + # calculate difference between matched and length + diff = dir_depth - len(matched) + + # print 'MATCHED: ' + str(matched) + + # if previous dir was not root + if prev_dir != '': + # if the elements count is not equal we calculate the difference + if len(dir_list) != len(prev_dir_list): + dir_depth_prev = len(prev_dir_list) + delta = dir_depth_prev - len(matched) + + for i in range(dir_depth_prev - delta, dir_depth_prev): + output.append('') + + # if the elements count is equal, we subtract the matched length from the total length + else: + for i in range(len(matched), len(dir_list)): + output.append('') + + for i in range(dir_depth - diff, dir_depth): + output.append('') + folder_count += 1 + + # Current File is in root + else: + # Close Tag if we are in root and the previous dir wasn't + if cur_dir == '' and prev_dir != '': + for i in range(0, len(prev_dir_list)): output.append('') - # if the elements count is equal, we subtract the matched length from the total length - else: - for i in range(len(matched), len(dir_list)): - output.append('') - - for i in range(dir_depth - diff, dir_depth): - output.append('') - folder_count += 1 - - # Current File is in root - else: - # Close Tag if we are in root and the previous dir wasn't - if cur_dir == '' and prev_dir != '': - for i in range(0, len(prev_dir_list)): + # Save the Current Dir + prev_dir = cur_dir + output.append('' + str(item) + '') + # if last iteration close all open tags + if idx == len(file_list) - 1 and cur_dir != '': + for i in range(0, len(dir_list)): output.append('') - # Save the Current Dir - prev_dir = cur_dir - output.append('' + str(item) + '') - # if last iteration close all open tags - if idx == len(file_list) - 1 and cur_dir != '': - for i in range(0, len(dir_list)): - output.append('') + return output - return output + @staticmethod + def get_netbeans_c_std(c_std): + c_std_netbeans = 0 + if '89' in c_std: + c_std_netbeans = 2 + elif '99' in c_std: + c_std_netbeans = 3 + elif '11' in c_std: + c_std_netbeans = 10 + return c_std_netbeans - -class NetbeansGcc(Netbeans, GccArm): - LOAD_EXE = True - NAME = "Netbeans-GCC-ARM" - - -class NetbeansArmc5(Netbeans, Armc5): - LOAD_EXE = False - NAME = "Netbeans-Armc5" - - -class NetbeansIAR(Netbeans, IAR): - LOAD_EXE = True - NAME = "Netbeans-IAR" + @staticmethod + def get_netbeans_cpp_std(cpp_std): + cpp_std_netbeans = 0 + if '98' in cpp_std: + cpp_std_netbeans = 4 + elif '11' in cpp_std: + cpp_std_netbeans = 8 + elif '14' in cpp_std: + cpp_std_netbeans = 11 + return cpp_std_netbeans diff --git a/tools/export/nb/configurations.tmpl b/tools/export/nb/configurations.tmpl index 93241d6934..6f0c69992c 100644 --- a/tools/export/nb/configurations.tmpl +++ b/tools/export/nb/configurations.tmpl @@ -1,8 +1,6 @@ - - @@ -10,6 +8,11 @@ {{ header }} {% endfor %} + + {{ linker_script }} + @@ -21,6 +24,10 @@ {{ source }} {% endfor %} + + Makefile + ^(nbproject)$ + + . + Makefile - + {% for id in options -%} + {% set opts = options[id] %} + default true @@ -43,37 +56,53 @@ + {{ c_std }} - {% for include in include_paths -%} - {{ include }} - {% endfor %} + {% for inc_dir in include_paths -%}{% if inc_dir -%} + {{ inc_dir }} + {% endif -%} + {% endfor -%} - - {% for flag in c_flags -%} - {{ flag }} - {% endfor %} + + {% for inc_file in forced_includes -%} + {{ inc_file }} + {% endfor -%} + + {%- for flag in c_flags -%}{{ flag+" "}}{%- endfor -%} + {%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%} + {% for item in opts['defines'] -%} + {{ item }} + {% endfor -%} {% for symbol in c_symbols -%} {{ symbol }} - {% endfor %} + {% endfor -%} + {{ cpp_std }} - {% for include in include_paths -%} - {{ include }} - {% endfor %} + {% for inc_dir in include_paths -%}{% if inc_dir -%} + {{ inc_dir }} + {% endif -%} + {% endfor -%} - - {% for flag in cxx_flags -%} - {{ flag }} - {% endfor %} + + {% for inc_file in forced_includes -%} + {{ inc_file }} + {% endfor -%} + + {%- for flag in cxx_flags -%}{{ flag+" "}}{%- endfor -%} + {%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%} + {% for item in opts['defines'] -%} + {{ item }} + {% endfor -%} {% for symbol in c_symbols -%} {{ symbol }} - {% endfor %} + {% endfor -%} @@ -82,124 +111,57 @@ 5 - {% for include in include_paths -%} - {{ include }} - {% endfor %} + {% for inc_dir in include_paths -%}{% if inc_dir -%} + {{ inc_dir }} + {% endif -%} + {% endfor -%} - - {% for flag in asm_flags -%} - {{ flag }} - {% endfor %} + + {% for inc_file in forced_includes -%} + {{ inc_file }} + {% endfor -%} + + {%- for flag in asm_flags -%}{{ flag+" "}}{%- endfor -%} + {%- for item in opts['common'] -%}{{ item+" "}}{%- endfor -%} {% for symbol in asm_symbols -%} {{ symbol }} - {% endfor %} + {% endfor -%} - - {% for flag in ld_flags -%} - {{ flag }} - {% endfor %} - + arm-none-eabi-gcc + {%- for symbol in opts['ld'] -%}{{ symbol+" "}}{%- endfor -%} - {% for h in headers -%} - {% endfor %} - {% for s in sources -%} - - - {% endfor %} - - - - - - - default - true - false - - - {% for h in headers -%} - - - {% endfor %} - {% for s in sources -%} - - - {% endfor %} - - 5 - - {% for include in include_paths -%} - {{ include }} - {% endfor %} - - - {% for flag in c_flags -%} - {{ flag }} - {% endfor %} - - - {% for symbol in c_symbols -%} - {{ symbol }} - {% endfor %} - + {% endfor -%} + {% for s in c_sources -%} + + - - 5 - - {% for include in include_paths -%} - {{ include }} - {% endfor %} - - - {% for flag in cxx_flags -%} - {{ flag }} - {% endfor %} - - - {% for symbol in c_symbols -%} - {{ symbol }} - {% endfor %} - + + {% endfor -%} + {% for s in cpp_sources -%} + + - - 5 - - - 5 - - {% for include in include_paths -%} - {{ include }} - {% endfor %} - - - {% for flag in asm_flags -%} - {{ flag }} - {% endfor %} - - - {% for symbol in asm_symbols -%} - {{ symbol }} - {% endfor %} - - - - - {% for flag in ld_flags -%} - {{ flag }} - {% endfor %} - - - - + + {% endfor -%} + {% for s in s_sources -%} + + + {% endfor -%} + + + + + + {% endfor -%} diff --git a/tools/export/nb/project.tmpl b/tools/export/nb/project.tmpl index c73b0eebbd..3d4ea0d1bf 100644 --- a/tools/export/nb/project.tmpl +++ b/tools/export/nb/project.tmpl @@ -4,9 +4,9 @@ {{name}} - + c cpp - + h UTF-8 From f3a42f400a9be943cdfa38ac31b24eaa9581c415 Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Mon, 27 Nov 2017 17:03:39 +0100 Subject: [PATCH 057/133] Fixed Linking with Linker Script --- tools/export/nb/Makefile.tmpl | 13 ++++++++++++- tools/export/nb/__init__.py | 14 ++++++++++++++ tools/export/nb/configurations.tmpl | 9 ++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/tools/export/nb/Makefile.tmpl b/tools/export/nb/Makefile.tmpl index 05de621e85..a7254417b1 100644 --- a/tools/export/nb/Makefile.tmpl +++ b/tools/export/nb/Makefile.tmpl @@ -49,6 +49,11 @@ MKDIR=mkdir CP=cp CCADMIN=CCadmin +BUILDDIR = BUILD +PLATFORM = {{target}} +ELF2BIN = 'arm-none-eabi-objcopy' +TARGET = ${CND_DISTDIR}/${CONF}/${CND_PLATFORM}/{{name}} + # build build: .build-post @@ -58,7 +63,10 @@ build: .build-post .build-post: .build-impl # Add your post 'build' code here... - + $(ELF2BIN) -O binary ${TARGET}.elf ${TARGET}.bin + +@echo "===== bin file ready to flash: $(TARGET).bin =====" + $(ELF2BIN) -O ihex ${TARGET}.elf ${TARGET}.hex + cp ${TARGET}.* ${CND_BUILDDIR}/${CONF}/${CND_PLATFORM} # clean clean: .clean-post @@ -126,3 +134,6 @@ include nbproject/Makefile-impl.mk # include project make variables include nbproject/Makefile-variables.mk + +CND_BUILDDIR = ${BUILDDIR} +CND_PLATFORM = ${PLATFORM} diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index 2a3357d986..0b797a79b1 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -28,6 +28,10 @@ class GNUARMNetbeans(Exporter): return apply_supported_whitelist( cls.TOOLCHAIN, POST_BINARY_WHITELIST, target) + @staticmethod + def prepare_sys_lib(libname): + return "-l" + libname + def toolchain_flags(self, toolchain): """Returns a dictionary of toolchain flags. Keys of the dictionary are: @@ -207,11 +211,19 @@ class GNUARMNetbeans(Exporter): sources = [self.filter_dot(field) for field in sources] include_paths = [self.filter_dot(field) for field in self.resources.inc_dirs] + sys_libs = [self.prepare_sys_lib(lib) for lib + in self.toolchain.sys_libs] + preproc = " ".join([part for part + in ([basename(self.toolchain.preproc[0])] + + self.toolchain.preproc[1:] + + self.toolchain.ld[1:])]) + if 'nbproject' in include_paths: include_paths.remove('nbproject') jinja_ctx = { 'name': self.project_name, + 'target': self.toolchain.target.name, 'elf_location': join('BUILD', self.project_name) + '.elf', 'c_symbols': self.toolchain.get_symbols(), 'asm_symbols': self.toolchain.get_symbols(True), @@ -233,6 +245,8 @@ class GNUARMNetbeans(Exporter): 'c_std': self.get_netbeans_c_std(c_std), 'cpp_std': self.get_netbeans_cpp_std(cpp_std), 'linker_script': self.ld_script, + 'linker_libs': sys_libs, + 'pp_cmd': preproc } return jinja_ctx diff --git a/tools/export/nb/configurations.tmpl b/tools/export/nb/configurations.tmpl index 6f0c69992c..8eeeac258d 100644 --- a/tools/export/nb/configurations.tmpl +++ b/tools/export/nb/configurations.tmpl @@ -131,8 +131,10 @@ + ${CND_DISTDIR}/${CND_CONF}/{{target}}/{{name}}.elf + ${CND_BUILDDIR}/${CND_CONF}/{{target}}/.link_script.ld arm-none-eabi-gcc - {%- for symbol in opts['ld'] -%}{{ symbol+" "}}{%- endfor -%} + -T ${CND_BUILDDIR}/${CND_CONF}/{{target}}/.link_script.ld {%- for symbol in opts['ld'] -%}{{" "+symbol}}{%- endfor -%} {%- for item in linker_libs -%}{{" "+item}}{%- endfor -%} {% for h in headers -%} @@ -156,6 +158,11 @@ {% endfor -%} + + {{pp_cmd}} -o $@ $< + Create ELF File using Link Script + ${CND_BUILDDIR}/${CND_CONF}/{{target}}/.link_script.ld + From be3d5748dbe8740a76b7ec6cb506595a9532e27d Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 28 Nov 2017 07:14:14 +0100 Subject: [PATCH 058/133] Removed commented Line --- tools/export/nb/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index 0b797a79b1..e642ef4d39 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -253,8 +253,6 @@ class GNUARMNetbeans(Exporter): def generate(self): """Generate Makefile, configurations.xml & project.xml Netbeans project file """ - # super(Netbeans, self).generate() - jinja_ctx = self.create_jinja_ctx() print From c2ebdf32c69a77f5d21c92295ed812cb2debed0c Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 28 Nov 2017 07:15:41 +0100 Subject: [PATCH 059/133] Removed another block of unused (commented) code --- tools/export/nb/__init__.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index e642ef4d39..71afddd57b 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -295,12 +295,6 @@ class GNUARMNetbeans(Exporter): file_names = [join(tools_path, "profiles", fn) for fn in os.listdir( join(tools_path, "profiles")) if fn.endswith(".json")] - # print file_names - - # profile_names = [basename(fn).replace(".json", "") - # for fn in file_names] - # print profile_names - profiles = {} for fn in file_names: From eed506178311bf165e6a8c96c5db5addb7231306 Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 28 Nov 2017 07:42:13 +0100 Subject: [PATCH 060/133] Refactoring of function get_netbeans_file_list(file_list) to have a clearer code --- tools/export/nb/__init__.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index 71afddd57b..b7a4610ccf 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -309,7 +309,8 @@ class GNUARMNetbeans(Exporter): output = [] prev_dir = '' folder_count = 1 - for idx, item in enumerate(file_list): + dir_depth = 0 + for item in (file_list): cur_dir = os.path.dirname(item) dir_temp = os.path.normpath(cur_dir) prev_dir_temp = os.path.normpath(prev_dir) @@ -317,10 +318,6 @@ class GNUARMNetbeans(Exporter): prev_dir_list = prev_dir_temp.split(os.sep) dir_depth = len(dir_list) - # print 'PREV_DIR: ' + str(prev_dir_list) - - # print 'CURR_DIR: ' + str(dir_list) - # Current File is in Directory: Compare the given dir with previous Dir if cur_dir and prev_dir != cur_dir: # evaluate all matched items (from current and previous list) @@ -332,8 +329,6 @@ class GNUARMNetbeans(Exporter): # calculate difference between matched and length diff = dir_depth - len(matched) - # print 'MATCHED: ' + str(matched) - # if previous dir was not root if prev_dir != '': # if the elements count is not equal we calculate the difference @@ -364,10 +359,10 @@ class GNUARMNetbeans(Exporter): # Save the Current Dir prev_dir = cur_dir output.append('' + str(item) + '') - # if last iteration close all open tags - if idx == len(file_list) - 1 and cur_dir != '': - for i in range(0, len(dir_list)): - output.append('') + + if cur_dir != '': + # close all open tags + output.append('' * dir_depth) return output From 24e2fc86ed7e1feff83f88b8f23b0c1dfe6cb65b Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Wed, 29 Nov 2017 08:01:31 +0100 Subject: [PATCH 061/133] Removed unnecessary list comprehension --- tools/export/nb/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index b7a4610ccf..bfd610f05a 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -213,10 +213,9 @@ class GNUARMNetbeans(Exporter): sys_libs = [self.prepare_sys_lib(lib) for lib in self.toolchain.sys_libs] - preproc = " ".join([part for part - in ([basename(self.toolchain.preproc[0])] + + preproc = " ".join([basename(self.toolchain.preproc[0])] + self.toolchain.preproc[1:] + - self.toolchain.ld[1:])]) + self.toolchain.ld[1:]) if 'nbproject' in include_paths: include_paths.remove('nbproject') From 33be40c613b86001fece602be54bd9e52a2b381f Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 9 Jan 2018 15:57:52 +0100 Subject: [PATCH 062/133] Fixed indention in Line 217 and 218 --- tools/export/nb/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index bfd610f05a..79f335d081 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -214,8 +214,8 @@ class GNUARMNetbeans(Exporter): sys_libs = [self.prepare_sys_lib(lib) for lib in self.toolchain.sys_libs] preproc = " ".join([basename(self.toolchain.preproc[0])] + - self.toolchain.preproc[1:] + - self.toolchain.ld[1:]) + self.toolchain.preproc[1:] + + self.toolchain.ld[1:]) if 'nbproject' in include_paths: include_paths.remove('nbproject') From 25a5c0d8442d5f4e4200b4d551e599c51c0a76fc Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 9 Jan 2018 16:13:08 +0100 Subject: [PATCH 063/133] Removed getattr() where it was not needed --- tools/export/nb/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index 79f335d081..d9980ed2dc 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -204,10 +204,10 @@ class GNUARMNetbeans(Exporter): sources.extend(getattr(self.resources, r_type)) # Remove all leading './' - c_sources = [self.filter_dot(field) for field in getattr(self.resources, 'c_sources')] - cpp_sources = [self.filter_dot(field) for field in getattr(self.resources, 'cpp_sources')] - s_sources = [self.filter_dot(field) for field in getattr(self.resources, 's_sources')] - headers = [self.filter_dot(field) for field in getattr(self.resources, 'headers')] + c_sources = [self.filter_dot(field) for field in self.resources.c_sources] + cpp_sources = [self.filter_dot(field) for field in self.resources.cpp_sources] + s_sources = [self.filter_dot(field) for field in self.resources.s_sources] + headers = [self.filter_dot(field) for field in self.resources.headers] sources = [self.filter_dot(field) for field in sources] include_paths = [self.filter_dot(field) for field in self.resources.inc_dirs] From 6cb6f5810cbdc41cddeb1158a3e48484e9ef0870 Mon Sep 17 00:00:00 2001 From: Clemens Mandl Date: Tue, 9 Jan 2018 16:54:56 +0100 Subject: [PATCH 064/133] Small Refactoring of variable definitions and removed some unnecessary brackets --- tools/export/nb/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index d9980ed2dc..97c9c6632d 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -123,7 +123,8 @@ class GNUARMNetbeans(Exporter): raise NotSupportedException("No linker script found.") def create_jinja_ctx(self): - + self.options = {} + flags = {} self.validate_resources() # Convert all Backslashes to Forward Slashes self.resources.win_to_unix() @@ -141,8 +142,6 @@ class GNUARMNetbeans(Exporter): profile_ids = [s.lower() for s in profiles] profile_ids.sort() - - self.options = {} for prof_id in profile_ids: # There are 4 categories of options, a category common too # all tools and a specific category for each of the tools. @@ -231,7 +230,6 @@ class GNUARMNetbeans(Exporter): 'ld_flags': self.flags['ld_flags'], 'asm_flags': self.flags['asm_flags'], 'common_flags': self.flags['common_flags'], - 'target': self.target, 'include_paths': include_paths, 'forced_includes': forced_includes, 'c_sources': c_sources, @@ -305,11 +303,12 @@ class GNUARMNetbeans(Exporter): @staticmethod def get_netbeans_file_list(file_list): - output = [] + cur_dir = '' prev_dir = '' + output = [] folder_count = 1 dir_depth = 0 - for item in (file_list): + for item in file_list: cur_dir = os.path.dirname(item) dir_temp = os.path.normpath(cur_dir) prev_dir_temp = os.path.normpath(prev_dir) From 875425161a0c34821f0a04b1444c799234bf698b Mon Sep 17 00:00:00 2001 From: "c.mandl" Date: Mon, 15 Jan 2018 10:44:36 +0100 Subject: [PATCH 065/133] Added Compiler Toolchain Varibales in Templates and modfied generation of jinja --- tools/export/nb/Makefile.tmpl | 2 +- tools/export/nb/__init__.py | 7 ++++++- tools/export/nb/configurations.tmpl | 5 ++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/tools/export/nb/Makefile.tmpl b/tools/export/nb/Makefile.tmpl index a7254417b1..511311c6ef 100644 --- a/tools/export/nb/Makefile.tmpl +++ b/tools/export/nb/Makefile.tmpl @@ -51,7 +51,7 @@ CCADMIN=CCadmin BUILDDIR = BUILD PLATFORM = {{target}} -ELF2BIN = 'arm-none-eabi-objcopy' +ELF2BIN = '{{elf2bin_cmd}}' TARGET = ${CND_DISTDIR}/${CONF}/${CND_PLATFORM}/{{name}} diff --git a/tools/export/nb/__init__.py b/tools/export/nb/__init__.py index 97c9c6632d..c435b0d37d 100644 --- a/tools/export/nb/__init__.py +++ b/tools/export/nb/__init__.py @@ -243,7 +243,12 @@ class GNUARMNetbeans(Exporter): 'cpp_std': self.get_netbeans_cpp_std(cpp_std), 'linker_script': self.ld_script, 'linker_libs': sys_libs, - 'pp_cmd': preproc + 'pp_cmd': preproc, + 'cc_cmd': self.toolchain.cc[0], + 'cppc_cmd': self.toolchain.cppc[0], + 'asm_cmd': self.toolchain.asm[0], + 'ld_cmd': self.toolchain.ld[0], + 'elf2bin_cmd': self.toolchain.elf2bin } return jinja_ctx diff --git a/tools/export/nb/configurations.tmpl b/tools/export/nb/configurations.tmpl index 8eeeac258d..b53397a025 100644 --- a/tools/export/nb/configurations.tmpl +++ b/tools/export/nb/configurations.tmpl @@ -79,6 +79,7 @@ {{ symbol }} {% endfor -%} + {{cc_cmd}} {{ cpp_std }} @@ -104,6 +105,7 @@ {{ symbol }} {% endfor -%} + {{cppc_cmd}} 5 @@ -129,11 +131,12 @@ {{ symbol }} {% endfor -%} + {{asm_cmd}} ${CND_DISTDIR}/${CND_CONF}/{{target}}/{{name}}.elf ${CND_BUILDDIR}/${CND_CONF}/{{target}}/.link_script.ld - arm-none-eabi-gcc + {{ld_cmd}} -T ${CND_BUILDDIR}/${CND_CONF}/{{target}}/.link_script.ld {%- for symbol in opts['ld'] -%}{{" "+symbol}}{%- endfor -%} {%- for item in linker_libs -%}{{" "+item}}{%- endfor -%} From cc3a66b01168e09c5cf7b228a4c02b05aed65f26 Mon Sep 17 00:00:00 2001 From: Przemyslaw Stekiel Date: Fri, 19 Jan 2018 13:16:05 +0100 Subject: [PATCH 066/133] Provide fix for issue #5835 - Tickers update should be atomic Synchronise only (and all) the public functions. --- hal/mbed_ticker_api.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/hal/mbed_ticker_api.c b/hal/mbed_ticker_api.c index 114a5a4628..765a077c0e 100644 --- a/hal/mbed_ticker_api.c +++ b/hal/mbed_ticker_api.c @@ -110,7 +110,6 @@ static us_timestamp_t convert_timestamp(us_timestamp_t ref, timestamp_t timestam */ static void update_present_time(const ticker_data_t *const ticker) { - ticker_event_queue_t *queue = ticker->queue; uint32_t ticker_time = ticker->interface->read(); if (ticker_time == ticker->queue->tick_last_read) { @@ -252,11 +251,16 @@ static void schedule_interrupt(const ticker_data_t *const ticker) void ticker_set_handler(const ticker_data_t *const ticker, ticker_event_handler handler) { initialize(ticker); + + core_util_critical_section_enter(); set_handler(ticker, handler); + core_util_critical_section_exit(); } void ticker_irq_handler(const ticker_data_t *const ticker) { + core_util_critical_section_enter(); + ticker->interface->clear_interrupt(); /* Go through all the pending TimerEvents */ @@ -284,6 +288,8 @@ void ticker_irq_handler(const ticker_data_t *const ticker) } schedule_interrupt(ticker); + + core_util_critical_section_exit(); } void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, timestamp_t timestamp, uint32_t id) @@ -296,13 +302,14 @@ void ticker_insert_event(const ticker_data_t *const ticker, ticker_event_t *obj, ticker->queue->present_time, timestamp ); - core_util_critical_section_exit(); // defer to ticker_insert_event_us ticker_insert_event_us( ticker, obj, absolute_timestamp, id ); + + core_util_critical_section_exit(); } void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *obj, us_timestamp_t timestamp, uint32_t id) @@ -343,6 +350,7 @@ void ticker_insert_event_us(const ticker_data_t *const ticker, ticker_event_t *o schedule_interrupt(ticker); core_util_critical_section_exit(); + } void ticker_remove_event(const ticker_data_t *const ticker, ticker_event_t *obj) @@ -377,7 +385,11 @@ timestamp_t ticker_read(const ticker_data_t *const ticker) us_timestamp_t ticker_read_us(const ticker_data_t *const ticker) { initialize(ticker); + + core_util_critical_section_enter(); update_present_time(ticker); + core_util_critical_section_exit(); + return ticker->queue->present_time; } From 51b7ed1114183b9fa3570a6d803f0aced4b2d23e Mon Sep 17 00:00:00 2001 From: Martin Kojtal <0xc0170@gmail.com> Date: Wed, 17 Jan 2018 11:14:41 +0000 Subject: [PATCH 067/133] RTX idle: sleep without locked deep sleep fix If tickless is enabled, it should not be locking deepsleep --- rtos/TARGET_CORTEX/mbed_rtx_idle.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp b/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp index bb2be1c421..f41b562c54 100644 --- a/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp +++ b/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp @@ -198,9 +198,7 @@ static void default_idle_hook(void) if (ticks_to_sleep) { os_timer->schedule_tick(ticks_to_sleep); - sleep_manager_lock_deep_sleep(); sleep(); - sleep_manager_unlock_deep_sleep(); os_timer->cancel_tick(); // calculate how long we slept From 133a3ddbae34639876a19d379f28fb61eb3e9553 Mon Sep 17 00:00:00 2001 From: Jani Suonpera Date: Wed, 17 Jan 2018 10:39:16 +0200 Subject: [PATCH 068/133] Update CoAP to 4.0.11 This PR implement https://tools.ietf.org/html/rfc7959#section-2.5 "The error code 4.13 (Request Entity Too Large) can be returned at any time by a server that does not currently have the resources to store blocks for a block-wise request payload transfer that it would intend to implement in an atomic fashion. (Note that a 4.13 response to a request that does not employ Block1 is a hint for the client to try sending Block1, and a 4.13 response with a smaller SZX in its Block1 Option than requested is a hint to try a smaller SZX.) --- features/FEATURE_COMMON_PAL/mbed-coap/module.json | 2 +- .../mbed-coap/source/sn_coap_protocol.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/module.json b/features/FEATURE_COMMON_PAL/mbed-coap/module.json index 265a343e7a..454251ee02 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/module.json +++ b/features/FEATURE_COMMON_PAL/mbed-coap/module.json @@ -1,6 +1,6 @@ { "name": "mbed-coap", - "version": "4.0.10", + "version": "4.0.11", "description": "COAP library", "keywords": [ "coap", diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c index 1e14055faf..234de67866 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c +++ b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c @@ -1756,6 +1756,15 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn /* Check block size */ block_temp = (src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 & 0x07); + uint16_t block_size = 1u << (block_temp + 4); + if (block_size > handle->sn_coap_block_data_size) { + // Include maximum size that stack can handle into response + tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE!"); + src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; + src_coap_blockwise_ack_msg_ptr->options_list_ptr->size1 = handle->sn_coap_block_data_size; + sn_coap_protocol_linked_list_blockwise_payload_remove_oldest(handle); + } + if (block_temp > sn_coap_convert_block_size(handle->sn_coap_block_data_size)) { src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 &= 0xFFFFF8; src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 |= sn_coap_convert_block_size(handle->sn_coap_block_data_size); From 60b86327062672890fd18e736cd7582a47e65653 Mon Sep 17 00:00:00 2001 From: Antti Yli-Tokola Date: Wed, 17 Jan 2018 12:32:19 +0200 Subject: [PATCH 069/133] mbed-coap update to version 4.1.0 - New API to control whether coap itself sends a next GET(block2) request or not - Fixes error IOTCLT-2203 mbed-coap does not handle PUT or POST if they indicate a smaller block size preference --- .../FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md | 10 + .../mbed-coap/mbed-coap/sn_coap_protocol.h | 23 ++ .../FEATURE_COMMON_PAL/mbed-coap/module.json | 2 +- .../include/sn_coap_protocol_internal.h | 1 + .../mbed-coap/source/sn_coap_builder.c | 10 +- .../mbed-coap/source/sn_coap_protocol.c | 343 ++++++++++-------- 6 files changed, 231 insertions(+), 158 deletions(-) diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md b/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md index 15bd3813d1..395463ff02 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md +++ b/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## [v4.1.0](https://github.com/ARMmbed/mbed-coap/releases/tag/v4.1.0) + +-[Full Changelog](https://github.com/ARMmbed/mbed-coap/compare/v4.0.10...v4.1.0) + + **New feature:** + - New API to disable automatic GET(BLOCK2) request sending. + + **Closed issues:** + - IOTCLT-2203 mbed-coap does not handle PUT or POST if they indicate a smaller block size preference + ## [v4.0.10](https://github.com/ARMmbed/mbed-coap/releases/tag/v4.0.10) -[Full Changelog](https://github.com/ARMmbed/mbed-coap/compare/v4.0.9...v4.0.10) diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/mbed-coap/sn_coap_protocol.h b/features/FEATURE_COMMON_PAL/mbed-coap/mbed-coap/sn_coap_protocol.h index b9fbdc63ac..2ec2aee887 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/mbed-coap/sn_coap_protocol.h +++ b/features/FEATURE_COMMON_PAL/mbed-coap/mbed-coap/sn_coap_protocol.h @@ -213,6 +213,29 @@ extern void sn_coap_protocol_block_remove(struct coap_s *handle, sn_nsdl_addr_s */ extern int8_t sn_coap_protocol_delete_retransmission(struct coap_s *handle, uint16_t msg_id); +/** + * \fn int8_t sn_coap_convert_block_size(uint16_t block_size) + * + * \brief Utility function to convert block size. + * + * \param block_size Block size to convert. + * + * \return Value of range 0 - 6 + */ +extern int8_t sn_coap_convert_block_size(uint16_t block_size); + +/** + * \fn int8_t sn_coap_protocol_handle_block2_response_internally(struct coap_s *handle, uint8_t handle_response) + * + * \brief This function change the state whether CoAP library sends the block 2 response automatically or not. + * + * \param *handle Pointer to CoAP library handle + * \param handle_response 1 if CoAP library handles the response sending otherwise 0. + * + * \return 0 = success, -1 = failure + */ +extern int8_t sn_coap_protocol_handle_block2_response_internally(struct coap_s *handle, uint8_t handle_response); + #endif /* SN_COAP_PROTOCOL_H_ */ #ifdef __cplusplus diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/module.json b/features/FEATURE_COMMON_PAL/mbed-coap/module.json index 454251ee02..6255054aca 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/module.json +++ b/features/FEATURE_COMMON_PAL/mbed-coap/module.json @@ -1,6 +1,6 @@ { "name": "mbed-coap", - "version": "4.0.11", + "version": "4.1.0", "description": "COAP library", "keywords": [ "coap", diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/source/include/sn_coap_protocol_internal.h b/features/FEATURE_COMMON_PAL/mbed-coap/source/include/sn_coap_protocol_internal.h index 19f057f278..d8c85b54ab 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/source/include/sn_coap_protocol_internal.h +++ b/features/FEATURE_COMMON_PAL/mbed-coap/source/include/sn_coap_protocol_internal.h @@ -229,6 +229,7 @@ struct coap_s { uint8_t sn_coap_resending_count; uint8_t sn_coap_resending_intervall; uint8_t sn_coap_duplication_buffer_size; + uint8_t sn_coap_internal_block2_resp_handling; /* If this is set then coap itself sends a next GET request automatically */ }; #ifdef __cplusplus diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_builder.c b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_builder.c index 4aac0d1142..726055ad6c 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_builder.c +++ b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_builder.c @@ -63,18 +63,22 @@ sn_coap_hdr_s *sn_coap_build_response(struct coap_s *handle, sn_coap_hdr_s *coap return NULL; } - if (coap_packet_ptr->msg_type == COAP_MSG_TYPE_CONFIRMABLE) { + if (msg_code == COAP_MSG_CODE_REQUEST_GET) { + // Blockwise message response is new GET + coap_res_ptr->msg_type = COAP_MSG_TYPE_CONFIRMABLE; + coap_res_ptr->msg_code = (sn_coap_msg_code_e)msg_code; + /* msg_id needs to be set by the caller in this case */ + } + else if (coap_packet_ptr->msg_type == COAP_MSG_TYPE_CONFIRMABLE) { coap_res_ptr->msg_type = COAP_MSG_TYPE_ACKNOWLEDGEMENT; coap_res_ptr->msg_code = (sn_coap_msg_code_e)msg_code; coap_res_ptr->msg_id = coap_packet_ptr->msg_id; } - else if (coap_packet_ptr->msg_type == COAP_MSG_TYPE_NON_CONFIRMABLE) { coap_res_ptr->msg_type = COAP_MSG_TYPE_NON_CONFIRMABLE; coap_res_ptr->msg_code = (sn_coap_msg_code_e)msg_code; /* msg_id needs to be set by the caller in this case */ } - else { handle->sn_coap_protocol_free( coap_res_ptr ); return NULL; diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c index 234de67866..86020085ab 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c +++ b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c @@ -64,7 +64,6 @@ static void sn_coap_protocol_linked_list_blockwise_payload_remo static uint32_t sn_coap_protocol_linked_list_blockwise_payloads_get_len(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr); static void sn_coap_protocol_linked_list_blockwise_remove_old_data(struct coap_s *handle); static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn_nsdl_addr_s *src_addr_ptr, sn_coap_hdr_s *received_coap_msg_ptr, void *param); -static int8_t sn_coap_convert_block_size(uint16_t block_size); static sn_coap_hdr_s *sn_coap_protocol_copy_header(struct coap_s *handle, sn_coap_hdr_s *source_header_ptr); #endif #if ENABLE_RESENDINGS @@ -182,10 +181,10 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo /* If pointer = 0, then re-sending does not return error when failed */ handle->sn_coap_rx_callback = used_rx_callback_ptr; - + // Handles internally all GET req responses + handle->sn_coap_internal_block2_resp_handling = true; #if ENABLE_RESENDINGS /* If Message resending is not used at all, this part of code will not be compiled */ - /* * * * Create Linked list for storing active resending messages * * * */ ns_list_init(&handle->linked_list_resent_msgs); handle->sn_coap_resending_queue_msgs = SN_COAP_RESENDING_QUEUE_SIZE_MSGS; @@ -220,6 +219,16 @@ struct coap_s *sn_coap_protocol_init(void *(*used_malloc_func_ptr)(uint16_t), vo return handle; } +int8_t sn_coap_protocol_handle_block2_response_internally(struct coap_s *handle, uint8_t build_response) +{ + if (handle == NULL) { + return -1; + } + + handle->sn_coap_internal_block2_resp_handling = build_response; + return 0; +} + int8_t sn_coap_protocol_set_block_size(struct coap_s *handle, uint16_t block_size) { (void) handle; @@ -1841,178 +1850,204 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn else { //This is response to request we made if (received_coap_msg_ptr->msg_code > COAP_MSG_CODE_REQUEST_DELETE) { - uint32_t block_number = 0; + if (handle->sn_coap_internal_block2_resp_handling) { + uint32_t block_number = 0; - /* Store blockwise payload to Linked list */ - //todo: add block number to stored values - just to make sure all packets are in order - sn_coap_protocol_linked_list_blockwise_payload_store(handle, - src_addr_ptr, - received_coap_msg_ptr->payload_len, - received_coap_msg_ptr->payload_ptr, - received_coap_msg_ptr->options_list_ptr->block1 >> 4); + /* Store blockwise payload to Linked list */ + //todo: add block number to stored values - just to make sure all packets are in order + sn_coap_protocol_linked_list_blockwise_payload_store(handle, + src_addr_ptr, + received_coap_msg_ptr->payload_len, + received_coap_msg_ptr->payload_ptr, + received_coap_msg_ptr->options_list_ptr->block2 >> 4); + /* If not last block (more value is set) */ + if (received_coap_msg_ptr->options_list_ptr->block2 & 0x08) { + coap_blockwise_msg_s *previous_blockwise_msg_ptr = NULL; + //build and send ack + received_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVING; - /* If not last block (more value is set) */ - if (received_coap_msg_ptr->options_list_ptr->block2 & 0x08) { - coap_blockwise_msg_s *previous_blockwise_msg_ptr = NULL; - //build and send ack - received_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVING; - - ns_list_foreach(coap_blockwise_msg_s, msg, &handle->linked_list_blockwise_sent_msgs) { - if (received_coap_msg_ptr->msg_id == msg->coap_msg_ptr->msg_id) { - previous_blockwise_msg_ptr = msg; - break; + ns_list_foreach(coap_blockwise_msg_s, msg, &handle->linked_list_blockwise_sent_msgs) { + if (received_coap_msg_ptr->msg_id == msg->coap_msg_ptr->msg_id) { + previous_blockwise_msg_ptr = msg; + break; + } } - } - if (!previous_blockwise_msg_ptr || !previous_blockwise_msg_ptr->coap_msg_ptr) { - tr_error("sn_coap_handle_blockwise_message - (send block2) previous message null!"); - sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); - return 0; - } - - src_coap_blockwise_ack_msg_ptr = sn_coap_parser_alloc_message(handle); - if (src_coap_blockwise_ack_msg_ptr == NULL) { - tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate message!"); - return 0; - } - - ns_list_remove(&handle->linked_list_blockwise_sent_msgs, previous_blockwise_msg_ptr); - if( previous_blockwise_msg_ptr->coap_msg_ptr ){ - if(previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr){ - handle->sn_coap_protocol_free(previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr); - previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr = 0; + if (!previous_blockwise_msg_ptr || !previous_blockwise_msg_ptr->coap_msg_ptr) { + tr_error("sn_coap_handle_blockwise_message - (send block2) previous message null!"); + sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); + return 0; } - sn_coap_parser_release_allocated_coap_msg_mem(handle, previous_blockwise_msg_ptr->coap_msg_ptr); - previous_blockwise_msg_ptr->coap_msg_ptr = 0; - } - handle->sn_coap_protocol_free(previous_blockwise_msg_ptr); - previous_blockwise_msg_ptr = 0; - /* * * Then build CoAP Acknowledgement message * * */ + src_coap_blockwise_ack_msg_ptr = sn_coap_parser_alloc_message(handle); + if (src_coap_blockwise_ack_msg_ptr == NULL) { + tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate message!"); + return 0; + } - if (sn_coap_parser_alloc_options(handle, src_coap_blockwise_ack_msg_ptr) == NULL) { - tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate options!"); - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); - src_coap_blockwise_ack_msg_ptr = 0; - sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); - return NULL; - } + /* * * Then build CoAP Acknowledgement message * * */ - src_coap_blockwise_ack_msg_ptr->msg_id = message_id++; - if (message_id == 0) { - message_id = 1; - } + if (sn_coap_parser_alloc_options(handle, src_coap_blockwise_ack_msg_ptr) == NULL) { + tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate options!"); + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); + src_coap_blockwise_ack_msg_ptr = 0; + sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); + return NULL; + } - /* Update block option */ - block_temp = received_coap_msg_ptr->options_list_ptr->block2 & 0x07; + src_coap_blockwise_ack_msg_ptr->msg_id = message_id++; + if (message_id == 0) { + message_id = 1; + } - block_number = received_coap_msg_ptr->options_list_ptr->block2 >> 4; - block_number ++; + /* Update block option */ + block_temp = received_coap_msg_ptr->options_list_ptr->block2 & 0x07; - src_coap_blockwise_ack_msg_ptr->options_list_ptr->block2 = (block_number << 4) | block_temp; + block_number = received_coap_msg_ptr->options_list_ptr->block2 >> 4; + block_number ++; - /* Then get needed memory count for Packet data */ - dst_packed_data_needed_mem = sn_coap_builder_calc_needed_packet_data_size_2(src_coap_blockwise_ack_msg_ptr ,handle->sn_coap_block_data_size); + src_coap_blockwise_ack_msg_ptr->options_list_ptr->block2 = (block_number << 4) | block_temp; - /* Then allocate memory for Packet data */ - dst_ack_packet_data_ptr = handle->sn_coap_protocol_malloc(dst_packed_data_needed_mem); - if (dst_ack_packet_data_ptr == NULL) { - tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate packet!"); - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); - src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); - src_coap_blockwise_ack_msg_ptr = 0; - sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); - return NULL; - } - memset(dst_ack_packet_data_ptr, 0, dst_packed_data_needed_mem); + /* Set BLOCK2 (subsequent) GET msg code and copy uri path from previous msg*/ + if (received_coap_msg_ptr->msg_code == COAP_MSG_CODE_RESPONSE_CONTENT) { + src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_REQUEST_GET; + if (previous_blockwise_msg_ptr->coap_msg_ptr->uri_path_ptr) { + src_coap_blockwise_ack_msg_ptr->uri_path_len = previous_blockwise_msg_ptr->coap_msg_ptr->uri_path_len; + src_coap_blockwise_ack_msg_ptr->uri_path_ptr = handle->sn_coap_protocol_malloc(previous_blockwise_msg_ptr->coap_msg_ptr->uri_path_len); + if (!src_coap_blockwise_ack_msg_ptr->uri_path_ptr) { + sn_coap_parser_release_allocated_coap_msg_mem(handle, src_coap_blockwise_ack_msg_ptr); + tr_error("sn_coap_handle_blockwise_message - failed to allocate for uri path ptr!"); + return NULL; + } + memcpy(src_coap_blockwise_ack_msg_ptr->uri_path_ptr, previous_blockwise_msg_ptr->coap_msg_ptr->uri_path_ptr, previous_blockwise_msg_ptr->coap_msg_ptr->uri_path_len); + } + if (previous_blockwise_msg_ptr->coap_msg_ptr->token_ptr) { + src_coap_blockwise_ack_msg_ptr->token_len = previous_blockwise_msg_ptr->coap_msg_ptr->token_len; + src_coap_blockwise_ack_msg_ptr->token_ptr = handle->sn_coap_protocol_malloc(previous_blockwise_msg_ptr->coap_msg_ptr->token_len); + if (!src_coap_blockwise_ack_msg_ptr->token_ptr) { + sn_coap_parser_release_allocated_coap_msg_mem(handle, src_coap_blockwise_ack_msg_ptr); + tr_error("sn_coap_handle_blockwise_message - failed to allocate for token ptr!"); + return NULL; + } + memcpy(src_coap_blockwise_ack_msg_ptr->token_ptr, previous_blockwise_msg_ptr->coap_msg_ptr->token_ptr, previous_blockwise_msg_ptr->coap_msg_ptr->token_len); + } + } - /* * * Then build Acknowledgement message to Packed data * * */ - if ((sn_coap_builder_2(dst_ack_packet_data_ptr, src_coap_blockwise_ack_msg_ptr, handle->sn_coap_block_data_size)) < 0) { - tr_error("sn_coap_handle_blockwise_message - (send block2) builder failed!"); + ns_list_remove(&handle->linked_list_blockwise_sent_msgs, previous_blockwise_msg_ptr); + if (previous_blockwise_msg_ptr->coap_msg_ptr) { + if (previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr) { + handle->sn_coap_protocol_free(previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr); + previous_blockwise_msg_ptr->coap_msg_ptr->payload_ptr = 0; + } + sn_coap_parser_release_allocated_coap_msg_mem(handle, previous_blockwise_msg_ptr->coap_msg_ptr); + previous_blockwise_msg_ptr->coap_msg_ptr = 0; + } + handle->sn_coap_protocol_free(previous_blockwise_msg_ptr); + previous_blockwise_msg_ptr = 0; + + /* Then get needed memory count for Packet data */ + dst_packed_data_needed_mem = sn_coap_builder_calc_needed_packet_data_size_2(src_coap_blockwise_ack_msg_ptr ,handle->sn_coap_block_data_size); + + /* Then allocate memory for Packet data */ + dst_ack_packet_data_ptr = handle->sn_coap_protocol_malloc(dst_packed_data_needed_mem); + + if (dst_ack_packet_data_ptr == NULL) { + tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate packet!"); + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); + src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); + src_coap_blockwise_ack_msg_ptr = 0; + sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); + return NULL; + } + memset(dst_ack_packet_data_ptr, 0, dst_packed_data_needed_mem); + + /* * * Then build Acknowledgement message to Packed data * * */ + if ((sn_coap_builder_2(dst_ack_packet_data_ptr, src_coap_blockwise_ack_msg_ptr, handle->sn_coap_block_data_size)) < 0) { + tr_error("sn_coap_handle_blockwise_message - (send block2) builder failed!"); + handle->sn_coap_protocol_free(dst_ack_packet_data_ptr); + dst_ack_packet_data_ptr = 0; + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); + src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); + src_coap_blockwise_ack_msg_ptr = 0; + sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); + return NULL; + } + + /* * * Save to linked list * * */ + coap_blockwise_msg_s *stored_blockwise_msg_ptr; + + stored_blockwise_msg_ptr = handle->sn_coap_protocol_malloc(sizeof(coap_blockwise_msg_s)); + if (!stored_blockwise_msg_ptr) { + tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate blockwise message!"); + handle->sn_coap_protocol_free(dst_ack_packet_data_ptr); + dst_ack_packet_data_ptr = 0; + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); + src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; + handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); + src_coap_blockwise_ack_msg_ptr = 0; + sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); + return 0; + } + memset(stored_blockwise_msg_ptr, 0, sizeof(coap_blockwise_msg_s)); + + stored_blockwise_msg_ptr->timestamp = handle->system_time; + + stored_blockwise_msg_ptr->coap_msg_ptr = src_coap_blockwise_ack_msg_ptr; + stored_blockwise_msg_ptr->coap = handle; + ns_list_add_to_end(&handle->linked_list_blockwise_sent_msgs, stored_blockwise_msg_ptr); + + /* * * Then release memory of CoAP Acknowledgement message * * */ + handle->sn_coap_tx_callback(dst_ack_packet_data_ptr, + dst_packed_data_needed_mem, src_addr_ptr, param); + + #if ENABLE_RESENDINGS + uint32_t resend_time = sn_coap_calculate_new_resend_time(handle->system_time, handle->sn_coap_resending_intervall, 0); + sn_coap_protocol_linked_list_send_msg_store(handle, src_addr_ptr, + dst_packed_data_needed_mem, + dst_ack_packet_data_ptr, + resend_time, param); + #endif handle->sn_coap_protocol_free(dst_ack_packet_data_ptr); dst_ack_packet_data_ptr = 0; - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); - src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); - src_coap_blockwise_ack_msg_ptr = 0; - sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); - return NULL; } - /* * * Save to linked list * * */ - coap_blockwise_msg_s *stored_blockwise_msg_ptr; + //Last block received + else { + /* * * This is the last block when whole Blockwise payload from received * * */ + /* * * blockwise messages is gathered and returned to User * * */ - stored_blockwise_msg_ptr = handle->sn_coap_protocol_malloc(sizeof(coap_blockwise_msg_s)); - if (!stored_blockwise_msg_ptr) { - tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate blockwise message!"); - handle->sn_coap_protocol_free(dst_ack_packet_data_ptr); - dst_ack_packet_data_ptr = 0; - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr->options_list_ptr); - src_coap_blockwise_ack_msg_ptr->options_list_ptr = 0; - handle->sn_coap_protocol_free(src_coap_blockwise_ack_msg_ptr); - src_coap_blockwise_ack_msg_ptr = 0; - sn_coap_parser_release_allocated_coap_msg_mem(handle, received_coap_msg_ptr); - return 0; + /* Store last Blockwise payload to Linked list */ + uint16_t payload_len = 0; + uint8_t *payload_ptr = sn_coap_protocol_linked_list_blockwise_payload_search(handle, src_addr_ptr, &payload_len); + uint16_t whole_payload_len = sn_coap_protocol_linked_list_blockwise_payloads_get_len(handle, src_addr_ptr); + uint8_t *temp_whole_payload_ptr = NULL; + + temp_whole_payload_ptr = handle->sn_coap_protocol_malloc(whole_payload_len); + if (!temp_whole_payload_ptr) { + tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate whole payload!"); + return 0; + } + + received_coap_msg_ptr->payload_ptr = temp_whole_payload_ptr; + received_coap_msg_ptr->payload_len = whole_payload_len; + + /* Copy stored Blockwise payloads to returned whole Blockwise payload pointer */ + while (payload_ptr != NULL) { + memcpy(temp_whole_payload_ptr, payload_ptr, payload_len); + + temp_whole_payload_ptr += payload_len; + + sn_coap_protocol_linked_list_blockwise_payload_remove_oldest(handle); + payload_ptr = sn_coap_protocol_linked_list_blockwise_payload_search(handle, src_addr_ptr, &payload_len); + } + received_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED; + + //todo: remove previous msg from list } - memset(stored_blockwise_msg_ptr, 0, sizeof(coap_blockwise_msg_s)); - - stored_blockwise_msg_ptr->timestamp = handle->system_time; - - stored_blockwise_msg_ptr->coap_msg_ptr = src_coap_blockwise_ack_msg_ptr; - stored_blockwise_msg_ptr->coap = handle; - ns_list_add_to_end(&handle->linked_list_blockwise_sent_msgs, stored_blockwise_msg_ptr); - - /* * * Then release memory of CoAP Acknowledgement message * * */ - handle->sn_coap_tx_callback(dst_ack_packet_data_ptr, - dst_packed_data_needed_mem, src_addr_ptr, param); - -#if ENABLE_RESENDINGS - uint32_t resend_time = sn_coap_calculate_new_resend_time(handle->system_time, handle->sn_coap_resending_intervall, 0); - sn_coap_protocol_linked_list_send_msg_store(handle, src_addr_ptr, - dst_packed_data_needed_mem, - dst_ack_packet_data_ptr, - resend_time, param); -#endif - handle->sn_coap_protocol_free(dst_ack_packet_data_ptr); - dst_ack_packet_data_ptr = 0; } - - //Last block received - else { - /* * * This is the last block when whole Blockwise payload from received * * */ - /* * * blockwise messages is gathered and returned to User * * */ - - /* Store last Blockwise payload to Linked list */ - uint16_t payload_len = 0; - uint8_t *payload_ptr = sn_coap_protocol_linked_list_blockwise_payload_search(handle, src_addr_ptr, &payload_len); - uint16_t whole_payload_len = sn_coap_protocol_linked_list_blockwise_payloads_get_len(handle, src_addr_ptr); - uint8_t *temp_whole_payload_ptr = NULL; - - temp_whole_payload_ptr = handle->sn_coap_protocol_malloc(whole_payload_len); - if (!temp_whole_payload_ptr) { - tr_error("sn_coap_handle_blockwise_message - (send block2) failed to allocate whole payload!"); - return 0; - } - - received_coap_msg_ptr->payload_ptr = temp_whole_payload_ptr; - received_coap_msg_ptr->payload_len = whole_payload_len; - - /* Copy stored Blockwise payloads to returned whole Blockwise payload pointer */ - while (payload_ptr != NULL) { - memcpy(temp_whole_payload_ptr, payload_ptr, payload_len); - - temp_whole_payload_ptr += payload_len; - - sn_coap_protocol_linked_list_blockwise_payload_remove_oldest(handle); - payload_ptr = sn_coap_protocol_linked_list_blockwise_payload_search(handle, src_addr_ptr, &payload_len); - } - received_coap_msg_ptr->coap_status = COAP_STATUS_PARSER_BLOCKWISE_MSG_RECEIVED; - - //todo: remove previous msg from list - } - } //Now we send data to request @@ -2117,7 +2152,7 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn return received_coap_msg_ptr; } -static int8_t sn_coap_convert_block_size(uint16_t block_size) +int8_t sn_coap_convert_block_size(uint16_t block_size) { if (block_size == 16) { return 0; From 7566b814cd91f3080b3741df693f9a0f5a1f04ec Mon Sep 17 00:00:00 2001 From: Jani Suonpera Date: Thu, 18 Jan 2018 16:03:38 +0200 Subject: [PATCH 070/133] Update CoAP to 4.1.1 Combined CoAP changes 4.0.11 and 4.1.0 Fixed regression with 4.0.11 --- .../FEATURE_COMMON_PAL/mbed-coap/module.json | 2 +- .../mbed-coap/source/sn_coap_protocol.c | 46 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/module.json b/features/FEATURE_COMMON_PAL/mbed-coap/module.json index 6255054aca..38599f15c3 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/module.json +++ b/features/FEATURE_COMMON_PAL/mbed-coap/module.json @@ -1,6 +1,6 @@ { "name": "mbed-coap", - "version": "4.1.0", + "version": "4.1.1", "description": "COAP library", "keywords": [ "coap", diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c index 86020085ab..5fd71f4c0c 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c +++ b/features/FEATURE_COMMON_PAL/mbed-coap/source/sn_coap_protocol.c @@ -1739,17 +1739,9 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn return NULL; } - // Response with COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE if the payload size is more than we can handle - - uint32_t max_size = SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE; if (!blocks_in_order) { tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE!"); src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE; - } else if (received_coap_msg_ptr->options_list_ptr->size1 > max_size) { - // Include maximum size that stack can handle into response - tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE!"); - src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; - src_coap_blockwise_ack_msg_ptr->options_list_ptr->size1 = max_size; } else if (received_coap_msg_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) { src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_CONTENT; } else if (received_coap_msg_ptr->msg_code == COAP_MSG_CODE_REQUEST_POST) { @@ -1760,23 +1752,31 @@ static sn_coap_hdr_s *sn_coap_handle_blockwise_message(struct coap_s *handle, sn src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_DELETED; } - src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 = received_coap_msg_ptr->options_list_ptr->block1; - src_coap_blockwise_ack_msg_ptr->msg_type = COAP_MSG_TYPE_ACKNOWLEDGEMENT; - - /* Check block size */ - block_temp = (src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 & 0x07); - uint16_t block_size = 1u << (block_temp + 4); - if (block_size > handle->sn_coap_block_data_size) { - // Include maximum size that stack can handle into response - tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE!"); - src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; - src_coap_blockwise_ack_msg_ptr->options_list_ptr->size1 = handle->sn_coap_block_data_size; - sn_coap_protocol_linked_list_blockwise_payload_remove_oldest(handle); + // Response with COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE if the payload size is more than we can handle + if (received_coap_msg_ptr->options_list_ptr->size1 > SN_COAP_MAX_INCOMING_BLOCK_MESSAGE_SIZE) { + // Include maximum size that stack can handle into response + tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE!"); + src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; } + else { + src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 = received_coap_msg_ptr->options_list_ptr->block1; + src_coap_blockwise_ack_msg_ptr->msg_type = COAP_MSG_TYPE_ACKNOWLEDGEMENT; - if (block_temp > sn_coap_convert_block_size(handle->sn_coap_block_data_size)) { - src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 &= 0xFFFFF8; - src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 |= sn_coap_convert_block_size(handle->sn_coap_block_data_size); + /* Check block size */ + block_temp = (src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 & 0x07); + uint16_t block_size = 1u << (block_temp + 4); + if (block_size > handle->sn_coap_block_data_size) { + // Include maximum size that stack can handle into response + tr_error("sn_coap_handle_blockwise_message - (recv block1) COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE!"); + src_coap_blockwise_ack_msg_ptr->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; + src_coap_blockwise_ack_msg_ptr->options_list_ptr->size1 = handle->sn_coap_block_data_size; + sn_coap_protocol_linked_list_blockwise_payload_remove_oldest(handle); + } + + if (block_temp > sn_coap_convert_block_size(handle->sn_coap_block_data_size)) { + src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 &= 0xFFFFF8; + src_coap_blockwise_ack_msg_ptr->options_list_ptr->block1 |= sn_coap_convert_block_size(handle->sn_coap_block_data_size); + } } src_coap_blockwise_ack_msg_ptr->msg_id = received_coap_msg_ptr->msg_id; From 5cd5239047cce1202352db0cacc3dcf19157df2b Mon Sep 17 00:00:00 2001 From: Jani Suonpera Date: Mon, 22 Jan 2018 10:53:14 +0200 Subject: [PATCH 071/133] CHANGELOG updated --- features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md b/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md index 395463ff02..a80195d64d 100644 --- a/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md +++ b/features/FEATURE_COMMON_PAL/mbed-coap/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## [v4.1.1](https://github.com/ARMmbed/mbed-coap/releases/tag/v4.1.1) +**Closed issues:** +- IOTCLT-2203 mbed-coap does not handle PUT or POST if they indicate a smaller block size preference (fixed regression) + +-[Full Changelog](https://github.com/ARMmbed/mbed-coap/compare/v4.1.0...v4.1.1) + ## [v4.1.0](https://github.com/ARMmbed/mbed-coap/releases/tag/v4.1.0) -[Full Changelog](https://github.com/ARMmbed/mbed-coap/compare/v4.0.10...v4.1.0) From c4394af3343108e5fc6deb48093e606b6127c9df Mon Sep 17 00:00:00 2001 From: Ashok Rao Date: Mon, 8 Jan 2018 21:07:38 +0000 Subject: [PATCH 072/133] Adding MTB MXChip EMW3166 as a new target --- .../PeripheralNames.h | 79 +++++ .../PeripheralPins.c | 326 ++++++++++++++++++ .../TARGET_MTB_MXCHIP_EMW3166/PinNames.h | 267 ++++++++++++++ .../TARGET_MTB_MXCHIP_EMW3166/system_clock.c | 273 +++++++++++++++ targets/targets.json | 30 ++ 5 files changed, 975 insertions(+) create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralPins.c create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/system_clock.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h new file mode 100644 index 0000000000..78bc359403 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h @@ -0,0 +1,79 @@ +/* mbed Microcontroller Library + * Copyright (c) 2016 ARM Limited + * + * 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. + */ +#ifndef MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + ADC_1 = (int)ADC1_BASE +} ADCName; + +typedef enum { + UART_1 = (int)USART1_BASE, + UART_2 = (int)USART2_BASE, + UART_3 = (int)USART3_BASE, + UART_6 = (int)USART6_BASE +} UARTName; + +#define STDIO_UART_TX PD_8 +#define STDIO_UART_RX PD_9 +#define STDIO_UART UART_3 + +typedef enum { + SPI_1 = (int)SPI1_BASE, + SPI_2 = (int)SPI2_BASE, + SPI_3 = (int)SPI3_BASE, + SPI_4 = (int)SPI4_BASE, + SPI_5 = (int)SPI5_BASE +} SPIName; + +typedef enum { + I2C_1 = (int)I2C1_BASE, + I2C_2 = (int)I2C2_BASE, + I2C_3 = (int)I2C3_BASE, + FMPI2C_1 = (int)FMPI2C1_BASE +} I2CName; + +typedef enum { + PWM_1 = (int)TIM1_BASE, + PWM_2 = (int)TIM2_BASE, + PWM_3 = (int)TIM3_BASE, + PWM_4 = (int)TIM4_BASE, + PWM_5 = (int)TIM5_BASE, + PWM_8 = (int)TIM8_BASE, + PWM_9 = (int)TIM9_BASE, + PWM_10 = (int)TIM10_BASE, + PWM_11 = (int)TIM11_BASE, + PWM_12 = (int)TIM12_BASE, + PWM_13 = (int)TIM13_BASE, + PWM_14 = (int)TIM14_BASE +} PWMName; + +typedef enum { + CAN_1 = (int)CAN1_BASE, + CAN_2 = (int)CAN2_BASE +} CANName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralPins.c new file mode 100644 index 0000000000..ad824e6498 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralPins.c @@ -0,0 +1,326 @@ +/* mbed Microcontroller Library + * Copyright (c) 2016 ARM Limited + * + * 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. + */ +#include "PeripheralPins.h" + +// ===== +// Note: Commented lines are alternative possibilities which are not used per default. +// If you change them, you will have also to modify the corresponding xxx_api.c file +// for pwmout, analogin, analogout, ... +// ===== + +//*** ADC *** + +const PinMap PinMap_ADC[] = { + {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 + {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 + {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 + {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 - A0 + {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4 + {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 + {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 + {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 + {PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 - LED1 + {PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + {PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 - A1 + {PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 - A3 + {PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 + {PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13 - A2 + {PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14 - A4 + {PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 - A5 + {NC, NC, 0} +}; + +const PinMap PinMap_ADC_Internal[] = { + {ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // See in analogin_api.c the correct ADC channel used + {ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // See in analogin_api.c the correct ADC channel used + {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // See in analogin_api.c the correct ADC channel used + {NC, NC, 0} +}; + +//*** I2C *** + +const PinMap PinMap_I2C_SDA[] = { +// {PB_3, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {PB_3, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PB_4, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, + {PB_7, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, + {PB_9, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, +// {PB_9, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PB_11, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, +// {PB_14, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, +// {PC_7, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {PC_9, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, +// {PD_13, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, +// {PD_15, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {PF_0, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, +// {PF_15, FMPI2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {NC, NC, 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {PB_6, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, +// {PB_10, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_FMPI2C1)}, + {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, +// {PB_15, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, +// {PC_6, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, +// {PD_12, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, +// {PD_14, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {PF_1, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, +// {PF_14, FMP_I, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {NC, NC, 0} +}; + +//*** PWM *** + +// TIM5 cannot be used because already used by the us_ticker +const PinMap PinMap_PWM[] = { + {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 +// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 +// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 +// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 +// {PA_2, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 +// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 + {PA_3, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 +// {PA_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N +// {PA_6, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 + {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 +// {PA_7, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 + {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N +// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 +// {PA_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N + {PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + {PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + + {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N +// {PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 +// {PB_0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N + {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N +// {PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 +// {PB_1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N + {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 + {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 +// {PB_8, PWM_10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 +// {PB_9, PWM_11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 + {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 + {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N +// {PB_14, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1 + {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N +// {PB_14, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N +// {PB_15, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2 + {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N +// {PB_15, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N + + {PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 +// {PC_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 + {PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 +// {PC_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 + {PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 +// {PC_8, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 + {PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 +// {PC_9, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4 + + {PD_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 + {PD_13, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 + {PD_14, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 + {PD_15, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 + + {PE_5, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + {PE_6, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + {PE_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PE_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + {PE_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PE_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + {PE_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + {PE_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + {PE_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + +// {PF_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 +// {PF_4, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 +// {PF_5, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 + {PF_6, PWM_10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + {PF_7, PWM_11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + {PF_8, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 + {PF_9, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 +// {PF_10, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 + + {NC, NC, 0} +}; + +//*** SERIAL *** + +const PinMap PinMap_UART_TX[] = { + {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_11, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PA_15, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PC_6, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PC_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PD_5, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PG_14, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RX[] = { + {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_3, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PC_5, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PC_7, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PC_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PD_6, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PG_9, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RTS[] = { + {PA_1, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_14, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PD_4, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_12, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PG_8, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PG_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +const PinMap PinMap_UART_CTS[] = { + {PA_0, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART3)}, + {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + {PG_13, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PG_15, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NC, 0} +}; + +//*** SPI *** + +const PinMap PinMap_SPI_MOSI[] = { + {PA_1, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PA_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PA_10, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PB_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_5, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_8, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PD_6, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI3)}, + {PE_6, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, +// {PE_6, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PE_14, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PE_14, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PA_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)}, + {PA_12, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PB_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PE_5, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, +// {PE_5, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PE_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PE_13, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SCLK[] = { + {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_0, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_3, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_SPI3)}, + {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, +// {PB_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)}, + {PC_7, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PD_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PE_2, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, +// {PE_2, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PE_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PE_12, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SSEL[] = { + {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, +// {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, +// {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, +// {PB_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI4)}, + {PE_4, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, +// {PE_4, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, +// {PE_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI4)}, + {PE_11, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, + {NC, NC, 0} +}; + +//*** CAN *** + +const PinMap PinMap_CAN_RD[] = { + {PA_11, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PB_5, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {PB_8, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_CAN1)}, + {PB_12, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {PD_0, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PG_0, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PG_11, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {NC, NC, 0} +}; + +const PinMap PinMap_CAN_TD[] = { + {PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PB_6, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {PB_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_CAN1)}, + {PB_13, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {PD_1, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PG_1, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + {PG_12, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {NC, NC, 0} +}; diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h new file mode 100644 index 0000000000..c868d39bde --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h @@ -0,0 +1,267 @@ +/* mbed Microcontroller Library + * Copyright (c) 2016 ARM Limited + * + * 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. + */ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" +#include "PinNamesTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PA_0 = 0x00, + PA_1 = 0x01, + PA_2 = 0x02, + PA_3 = 0x03, + PA_4 = 0x04, + PA_5 = 0x05, + PA_6 = 0x06, + PA_7 = 0x07, + PA_8 = 0x08, + PA_9 = 0x09, + PA_10 = 0x0A, + PA_11 = 0x0B, + PA_12 = 0x0C, + PA_13 = 0x0D, + PA_14 = 0x0E, + PA_15 = 0x0F, + + PB_0 = 0x10, + PB_1 = 0x11, + PB_2 = 0x12, + PB_3 = 0x13, + PB_4 = 0x14, + PB_5 = 0x15, + PB_6 = 0x16, + PB_7 = 0x17, + PB_8 = 0x18, + PB_9 = 0x19, + PB_10 = 0x1A, + PB_11 = 0x1B, + PB_12 = 0x1C, + PB_13 = 0x1D, + PB_14 = 0x1E, + PB_15 = 0x1F, + + PC_0 = 0x20, + PC_1 = 0x21, + PC_2 = 0x22, + PC_3 = 0x23, + PC_4 = 0x24, + PC_5 = 0x25, + PC_6 = 0x26, + PC_7 = 0x27, + PC_8 = 0x28, + PC_9 = 0x29, + PC_10 = 0x2A, + PC_11 = 0x2B, + PC_12 = 0x2C, + PC_13 = 0x2D, + PC_14 = 0x2E, + PC_15 = 0x2F, + + PD_0 = 0x30, + PD_1 = 0x31, + PD_2 = 0x32, + PD_3 = 0x33, + PD_4 = 0x34, + PD_5 = 0x35, + PD_6 = 0x36, + PD_7 = 0x37, + PD_8 = 0x38, + PD_9 = 0x39, + PD_10 = 0x3A, + PD_11 = 0x3B, + PD_12 = 0x3C, + PD_13 = 0x3D, + PD_14 = 0x3E, + PD_15 = 0x3F, + + PE_0 = 0x40, + PE_1 = 0x41, + PE_2 = 0x42, + PE_3 = 0x43, + PE_4 = 0x44, + PE_5 = 0x45, + PE_6 = 0x46, + PE_7 = 0x47, + PE_8 = 0x48, + PE_9 = 0x49, + PE_10 = 0x4A, + PE_11 = 0x4B, + PE_12 = 0x4C, + PE_13 = 0x4D, + PE_14 = 0x4E, + PE_15 = 0x4F, + + PF_0 = 0x50, + PF_1 = 0x51, + PF_2 = 0x52, + PF_3 = 0x53, + PF_4 = 0x54, + PF_5 = 0x55, + PF_6 = 0x56, + PF_7 = 0x57, + PF_8 = 0x58, + PF_9 = 0x59, + PF_10 = 0x5A, + PF_11 = 0x5B, + PF_12 = 0x5C, + PF_13 = 0x5D, + PF_14 = 0x5E, + PF_15 = 0x5F, + + PG_0 = 0x60, + PG_1 = 0x61, + PG_2 = 0x62, + PG_3 = 0x63, + PG_4 = 0x64, + PG_5 = 0x65, + PG_6 = 0x66, + PG_7 = 0x67, + PG_8 = 0x68, + PG_9 = 0x69, + PG_10 = 0x6A, + PG_11 = 0x6B, + PG_12 = 0x6C, + PG_13 = 0x6D, + PG_14 = 0x6E, + PG_15 = 0x6F, + + PH_0 = 0x70, + PH_1 = 0x71, + + // Not connected + NC = (int)0xFFFFFFFF, + + //Module pins. + P_1 = NC, + P_2 = PB_2, + P_3 = NC, + P_4 = PB_15, + P_5 = PB_12, + P_6 = PB_13, + P_7 = PB_14, + P_8 = PC_6, + P_9 = PA_15, + P_10 = NC, + P_11 = NC, + P_12 = PC_7, + P_13 = NC, + P_14 = PC_0, + P_15 = NC, + P_16 = PC_13, + P_17 = PB_8, + P_18 = PB_9, + P_19 = PB_10, + P_20 = NC, + P_21 = NC, + P_22 = NC, + P_23 = NC, + P_24 = NC, + P_25 = PA_14, + P_26 = PA_13, + P_27 = PB_3, + P_28 = NC, + P_29 = PB_7, + P_30 = PB_6, + P_31 = PB_4, + P_32 = NC, + P_33 = PA_10, + P_34 = PA_5, + P_35 = PA_11, + P_36 = PA_12, + P_37 = PB_0, + P_38 = PA_4, + P_39 = NC, + P_40 = NC, + P_41 = NC, + + // ADC internal channels + ADC_TEMP = 0xF0, + ADC_VREF = 0xF1, + ADC_VBAT = 0xF2, + + + // Generic signals namings + LED1 = PB_2, + LED2 = PB_10, + LED_RED = LED1, + LED_BLUE = LED2, + USER_BUTTON = PC_13, + + // Standardized button names + BUTTON1 = USER_BUTTON, + + SERIAL_TX = P_8, + SERIAL_RX = P_12, + + I2C_SCL = P_17, + I2C_SDA = P_18, + + SPI_MOSI = P_4, + SPI_MISO = P_7, + SPI_SCK = P_6, + SPI_CS = P_16, + + //DAPLink + USBRX = MBED_CONF_TARGET_USB_RX, + USBTX = MBED_CONF_TARGET_USB_TX, + SWDIO = P_26, + SWCLK = P_25, + NTRST = P_13, + + //MTB Aliases + //Left side (top view) + TGT_SWDIO = SWDIO, + TGT_SWCLK = SWCLK, + TGT_RESET = NTRST, + PB6 = P_30, + PB7 = P_29, + PC6 = SERIAL_TX, + PC7 = SERIAL_RX, + PB9 = I2C_SDA, + PB8 = I2C_SCL, + PB15 = SPI_MOSI, + PB14 = SPI_MISO, + PB13 = SPI_SCK, + PC13 = SPI_CS, + PC0 = P_14, + PA4 = P_38, + PA5 = P_34, + PB0 = P_37, + + //Right side (top view) + GND = NC, + PA11 = P_35, + PA12 = P_36, + PB4 = P_31, //CS for LCD + PB3 = P_27, //RESET for LCD + PA15 = P_9, //A0 for LCD + PA10 = P_33, + PB12 = P_5, + PB10 = LED2, + PB2 = LED1, + +} PinName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/system_clock.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/system_clock.c new file mode 100644 index 0000000000..a804597c5d --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/system_clock.c @@ -0,0 +1,273 @@ +/* mbed Microcontroller Library +* Copyright (c) 2006-2017 ARM Limited +* +* 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. +*/ + +/** + * This file configures the system clock as follows: + *----------------------------------------------------------------------------- + * System clock source | 1- USE_PLL_HSE_EXTC (external 8 MHz clock) + * | 2- USE_PLL_HSE_XTAL (external 8 MHz xtal) + * | 3- USE_PLL_HSI (internal 16 MHz) + *----------------------------------------------------------------------------- + * SYSCLK(MHz) | 100 + * AHBCLK (MHz) | 100 + * APB1CLK (MHz) | 50 + * APB2CLK (MHz) | 100 + * USB capable | YES + *----------------------------------------------------------------------------- +**/ + +#include "stm32f4xx.h" +#include "nvic_addr.h" +#include "mbed_assert.h" + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ + + +// clock source is selected with CLOCK_SOURCE in json config +#define USE_PLL_HSE_EXTC 0x8 // Use external clock (ST Link MCO) +#define USE_PLL_HSE_XTAL 0x4 // Use external xtal (X3 on board - not provided by default) +#define USE_PLL_HSI 0x2 // Use HSI internal clock + +#if ( ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) ) +uint8_t SetSysClock_PLL_HSE(uint8_t bypass); +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) */ + +#if ((CLOCK_SOURCE) & USE_PLL_HSI) +uint8_t SetSysClock_PLL_HSI(void); +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSI) */ + +/** + * @brief Setup the microcontroller system + * Initialize the FPU setting, vector table location and External memory + * configuration. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; /* Vector Table Relocation in Internal FLASH */ +#endif + +} + + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ + +void SetSysClock(void) +{ +#if ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) + /* 1- Try to start with HSE and external clock */ + if (SetSysClock_PLL_HSE(1) == 0) +#endif + { +#if ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) + /* 2- If fail try to start with HSE and external xtal */ + if (SetSysClock_PLL_HSE(0) == 0) +#endif + { +#if ((CLOCK_SOURCE) & USE_PLL_HSI) + /* 3- If fail start with HSI clock */ + uint8_t ret_HSIclk_status = SetSysClock_PLL_HSI(); + if (ret_HSIclk_status == 0) +#endif + { + while(1) { + MBED_ASSERT(1); + } + } + } + } + + /* Output clock on MCO2 pin(PC9) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4); +} + +#if ( ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) ) +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ +uint8_t SetSysClock_PLL_HSE(uint8_t bypass) +{ + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; + + /* Enable Power Control clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /* Enable HSE oscillator and activate PLL with HSE as source */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + if (bypass == 0) { + RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 8 MHz xtal on OSC_IN/OSC_OUT */ + } else { + RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; /* External 8 MHz clock on OSC_IN */ + } + + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + + RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 1 MHz (8 MHz / 8) + RCC_OscInitStruct.PLL.PLLN = 200; // VCO output clock = 200 MHz (1 MHz * 200) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 100 MHz (200 MHz / 2) + RCC_OscInitStruct.PLL.PLLQ = 7; + RCC_OscInitStruct.PLL.PLLR = 2; + + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + /* Select PLLSAI output as USB clock source */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.PLLI2S.PLLI2SM = 8; + PeriphClkInitStruct.PLLI2S.PLLI2SQ = 4; + PeriphClkInitStruct.PLLI2S.PLLI2SN = 192; + PeriphClkInitStruct.PLLI2S.PLLI2SR = 2; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLI2SQ; + PeriphClkInitStruct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; + + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + //if (bypass == 0) + // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz with xtal + //else + // HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz with external clock + + return 1; // OK +} +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSE_XTAL) || ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC) */ + +#if ((CLOCK_SOURCE) & USE_PLL_HSI) +/******************************************************************************/ +/* PLL (clocked by HSI) used as System clock source */ +/******************************************************************************/ +uint8_t SetSysClock_PLL_HSI(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; + + /* Enable Power Control clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /* Enable HSI oscillator and activate PLL with HSI as source */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSEState = RCC_HSE_OFF; + RCC_OscInitStruct.HSICalibrationValue = 16; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 8; // VCO input clock = 2 MHz (16 MHz / 8) + RCC_OscInitStruct.PLL.PLLN = 100; // VCO output clock = 200 MHz (2 MHz * 100) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLLCLK = 100 MHz (200 MHz / 2) + RCC_OscInitStruct.PLL.PLLQ = 2; + RCC_OscInitStruct.PLL.PLLR = 2; + + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + /* Select PLLSAI output as USB clock source */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_CLK48; + PeriphClkInitStruct.PLLI2S.PLLI2SM = 16; + PeriphClkInitStruct.PLLI2S.PLLI2SN = 192; + PeriphClkInitStruct.PLLI2S.PLLI2SQ = 4; + PeriphClkInitStruct.PLLI2S.PLLI2SR = 2; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48CLKSOURCE_PLLI2SQ; + PeriphClkInitStruct.PLLI2SSelection = RCC_PLLI2SCLKSOURCE_PLLSRC; + + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); // 16 MHz + + return 1; // OK +} +#endif /* ((CLOCK_SOURCE) & USE_PLL_HSI) */ diff --git a/targets/targets.json b/targets/targets.json index adf96948c5..86877d7b1f 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1078,6 +1078,36 @@ "device_name": "STM32F412ZG", "bootloader_supported": true }, + "MTB_MXCHIP_EMW3166": { + "inherits": ["FAMILY_STM32"], + "core": "Cortex-M4F", + "extra_labels_add": ["STM32F4", "STM32F412xG", "STM32F412ZG"], + "macros_add": ["USB_STM_HAL", "USBHOST_OTHER"], + "device_has_add": ["CAN", "LOWPOWERTIMER", "SERIAL_ASYNCH", "SERIAL_FC", "TRNG", "FLASH"], + "release_versions": ["2", "5"], + "device_name": "STM32F412ZG", + "bootloader_supported": true, + "config": { + "usb_tx": { + "help": "Value PB_6", + "value": "PB_6" + }, + "usb_rx": { + "help": "Value PB_7", + "value": "PB_7" + }, + "stdio_uart": { + "help": "Value: UART_1", + "value": "UART_1", + "macro_name": "STDIO_UART" + }, + "clock_source": { + "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", + "value": "USE_PLL_HSI", + "macro_name": "CLOCK_SOURCE" + } + } + }, "DISCO_F413ZH": { "inherits": ["FAMILY_STM32"], "supported_form_factors": ["ARDUINO"], From 51207deeffff4a8d68d097e0504706a245a1c8cf Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 19 Dec 2017 16:36:48 +0100 Subject: [PATCH 073/133] BL STM32746xG: Update scatter/link files --- .../device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct | 15 ++++++++++++--- .../device/TOOLCHAIN_ARM_STD/stm32f746xg.sct | 15 ++++++++++++--- .../device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld | 11 ++++++++++- .../device/TOOLCHAIN_IAR/stm32f746xg.icf | 9 ++++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct index cb52146d47..897c962691 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct @@ -1,3 +1,4 @@ +#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -27,10 +28,18 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) -LR_IROM1 0x08000000 0x100000 { ; load region size_region +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif - ER_IROM1 0x08000000 0x100000 { ; load address = execution address +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 0x100000 +#endif + +; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) +LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region + + ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct index cb52146d47..897c962691 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct @@ -1,3 +1,4 @@ +#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -27,10 +28,18 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) -LR_IROM1 0x08000000 0x100000 { ; load region size_region +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif - ER_IROM1 0x08000000 0x100000 { ; load address = execution address +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 0x100000 +#endif + +; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) +LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region + + ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld index 198ac5c584..59c032d568 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld @@ -1,7 +1,16 @@ /* Linker script to configure memory regions. */ + +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif + +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 1024K +#endif + MEMORY { - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K + FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE RAM (rwx) : ORIGIN = 0x200001C8, LENGTH = 320K - 0x1C8 } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf index 99918b9898..4d8dfcaa4a 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf @@ -1,7 +1,10 @@ +if (!isdefinedsymbol(MBED_APP_START)) { define symbol MBED_APP_START = 0x08000000; } +if (!isdefinedsymbol(MBED_APP_SIZE)) { define symbol MBED_APP_SIZE = 0x100000; } + /* [ROM = 1024kb = 0x100000] */ -define symbol __intvec_start__ = 0x08000000; -define symbol __region_ROM_start__ = 0x08000000; -define symbol __region_ROM_end__ = 0x080FFFFF; +define symbol __intvec_start__ = MBED_APP_START; +define symbol __region_ROM_start__ = MBED_APP_START; +define symbol __region_ROM_end__ = MBED_APP_START + MBED_APP_SIZE - 1; /* [RAM = 320kb = 0x50000] Vector table dynamic copy: 114 vectors = 456 bytes (0x1C8) to be reserved in RAM */ define symbol __NVIC_start__ = 0x20000000; From 03b264c269504483d6a8f544d84f7f51721aa66e Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 19 Dec 2017 16:39:14 +0100 Subject: [PATCH 074/133] BL NUCLEO_F746ZG: enable bootloader --- targets/targets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/targets.json b/targets/targets.json index 86877d7b1f..dfd87681b4 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1294,7 +1294,8 @@ "device_has_add": ["ANALOGOUT", "CAN", "LOWPOWERTIMER", "SERIAL_ASYNCH", "TRNG", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], - "device_name": "STM32F746ZG" + "device_name": "STM32F746ZG", + "bootloader_supported": true }, "NUCLEO_F756ZG": { "inherits": ["FAMILY_STM32"], From 00003cdc47a7beb4c90c19febc423760fa693938 Mon Sep 17 00:00:00 2001 From: bcostm Date: Mon, 8 Jan 2018 10:32:54 +0100 Subject: [PATCH 075/133] BL NUCLEO_F746ZG: change scb->vector assignment --- .../TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c index 12d4d52adc..613d4da059 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c @@ -30,6 +30,7 @@ **/ #include "stm32f7xx.h" +#include "nvic_addr.h" #include "mbed_assert.h" /*!< Uncomment the following line if you need to relocate your vector Table in @@ -92,7 +93,7 @@ void SystemInit(void) #ifdef VECT_TAB_SRAM SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ + SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; /* Vector Table Relocation in Internal FLASH */ #endif } From b89be917fde952879d955e3c664d189157f7821b Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 9 Jan 2018 17:06:48 +0100 Subject: [PATCH 076/133] Check cache before enabling it The mbed_sdk_init can be called either during cold boot or during application boot after bootloader has been executed. In case the bootloader has already enabled the cache, is is needed to not enable it again. --- targets/TARGET_STM/mbed_overrides.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/mbed_overrides.c b/targets/TARGET_STM/mbed_overrides.c index fbdccb8c5f..8df4ff2958 100644 --- a/targets/TARGET_STM/mbed_overrides.c +++ b/targets/TARGET_STM/mbed_overrides.c @@ -35,9 +35,16 @@ void mbed_sdk_init() HAL_Init(); #if TARGET_STM32F7 - // Enable CPU L1-Cache - SCB_EnableICache(); - SCB_EnableDCache(); + // The mbed_sdk_init can be called either during cold boot or during + // application boot after bootloader has been executed. + // In case the bootloader has already enabled the cache, + // is is needed to not enable it again. + if (SCB->CCR & (uint32_t)SCB_CCR_IC_Msk == 0) { // If ICache is disabled + SCB_EnableICache(); + } + if (SCB->CCR & (uint32_t)SCB_CCR_DC_Msk == 0) { // If DCache is disabled + SCB_EnableDCache(); + } #endif /* TARGET_STM32F7 */ /* Configure the System clock source, PLL Multiplier and Divider factors, From 248db987bc219f8853702d0cd919099e92e0e049 Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 10 Jan 2018 10:01:56 +0100 Subject: [PATCH 077/133] NUCLEO_F767ZI: Add bootloader support --- .../TARGET_NUCLEO_F767ZI/system_clock.c | 3 ++- .../device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct | 15 ++++++++++++--- .../device/TOOLCHAIN_ARM_STD/stm32f767xi.sct | 15 ++++++++++++--- .../device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld | 11 ++++++++++- .../device/TOOLCHAIN_IAR/stm32f767xi.icf | 9 ++++++--- targets/targets.json | 3 ++- 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c index 9e6db0524a..fdb245e65b 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c @@ -30,6 +30,7 @@ **/ #include "stm32f7xx.h" +#include "nvic_addr.h" #include "mbed_assert.h" /*!< Uncomment the following line if you need to relocate your vector Table in @@ -92,7 +93,7 @@ void SystemInit(void) #ifdef VECT_TAB_SRAM SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ + SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; /* Vector Table Relocation in Internal FLASH */ #endif } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct index aaa6ed8f35..0534eeee59 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct @@ -1,3 +1,4 @@ +#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -27,10 +28,18 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) -LR_IROM1 0x08000000 0x200000 { ; load region size_region +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif - ER_IROM1 0x08000000 0x200000 { ; load address = execution address +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 0x200000 +#endif + +; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) +LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region + + ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct index aaa6ed8f35..0534eeee59 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct @@ -1,3 +1,4 @@ +#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -27,10 +28,18 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) -LR_IROM1 0x08000000 0x200000 { ; load region size_region +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif - ER_IROM1 0x08000000 0x200000 { ; load address = execution address +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 0x200000 +#endif + +; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) +LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region + + ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld index 359b884aee..e75663eb18 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld @@ -1,7 +1,16 @@ /* Linker script to configure memory regions. */ + +#if !defined(MBED_APP_START) + #define MBED_APP_START 0x08000000 +#endif + +#if !defined(MBED_APP_SIZE) + #define MBED_APP_SIZE 2048K +#endif + MEMORY { - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K + FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE RAM (rwx) : ORIGIN = 0x200001F8, LENGTH = 512K - 0x1F8 } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf index 1c73fc150d..40316b8e54 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf @@ -1,7 +1,10 @@ +if (!isdefinedsymbol(MBED_APP_START)) { define symbol MBED_APP_START = 0x08000000; } +if (!isdefinedsymbol(MBED_APP_SIZE)) { define symbol MBED_APP_SIZE = 0x200000; } + /* [ROM = 2048kb = 0x200000] */ -define symbol __intvec_start__ = 0x08000000; -define symbol __region_ROM_start__ = 0x08000000; -define symbol __region_ROM_end__ = 0x081FFFFF; +define symbol __intvec_start__ = MBED_APP_START; +define symbol __region_ROM_start__ = MBED_APP_START; +define symbol __region_ROM_end__ = MBED_APP_START + MBED_APP_SIZE - 1; /* [RAM = 512kb = 0x80000] Vector table dynamic copy: 126 vectors = 504 bytes (0x1F8) to be reserved in RAM */ define symbol __NVIC_start__ = 0x20000000; diff --git a/targets/targets.json b/targets/targets.json index dfd87681b4..4ec5655a28 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1351,7 +1351,8 @@ "device_has_add": ["ANALOGOUT", "CAN", "LOWPOWERTIMER", "SERIAL_ASYNCH", "TRNG", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], - "device_name": "STM32F767ZI" + "device_name": "STM32F767ZI", + "bootloader_supported": true }, "NUCLEO_L011K4": { "inherits": ["FAMILY_STM32"], From 1d0354d1ab6c0dbc26d6c1d93442894ffadf09a5 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 18 Jan 2018 17:48:06 +0100 Subject: [PATCH 078/133] STM32LX : HAL_RCC_OscConfig update in PLL configuration check PLL settings before retuuning error --- .../TARGET_STM32L0/device/stm32l0xx_hal_rcc.c | 14 +++++++++- .../TARGET_STM32L1/device/stm32l1xx_hal_rcc.c | 15 +++++++++-- .../TARGET_STM32L4/device/stm32l4xx_hal_rcc.c | 26 ++++++++++++++++++- 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L0/device/stm32l0xx_hal_rcc.c b/targets/TARGET_STM/TARGET_STM32L0/device/stm32l0xx_hal_rcc.c index 91bff130e3..cf1597aa1b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/device/stm32l0xx_hal_rcc.c +++ b/targets/TARGET_STM/TARGET_STM32L0/device/stm32l0xx_hal_rcc.c @@ -709,7 +709,19 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) } else { - return HAL_ERROR; + /* MBED patch - ST internal ticket 42806 */ + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLDIV) != RCC_OscInitStruct->PLL.PLLDIV) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL) { + return HAL_ERROR; + } + /* MBED patch - ST internal ticket 42806 */ } } return HAL_OK; diff --git a/targets/TARGET_STM/TARGET_STM32L1/device/stm32l1xx_hal_rcc.c b/targets/TARGET_STM/TARGET_STM32L1/device/stm32l1xx_hal_rcc.c index 4217e0bd16..c9c8f0e020 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/device/stm32l1xx_hal_rcc.c +++ b/targets/TARGET_STM/TARGET_STM32L1/device/stm32l1xx_hal_rcc.c @@ -713,10 +713,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) } else { - return HAL_ERROR; + /* MBED patch - ST internal ticket 42806 */ + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLDIV) != RCC_OscInitStruct->PLL.PLLDIV) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_CFGR_PLLMUL) != RCC_OscInitStruct->PLL.PLLMUL) { + return HAL_ERROR; + } + /* MBED patch - ST internal ticket 42806 */ } } - return HAL_OK; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c index 222237da3d..4835c433d3 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c @@ -803,7 +803,31 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) } else { - return HAL_ERROR; + /* MBED patch - ST internal ticket 42806 */ + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLN) != RCC_OscInitStruct->PLL.PLLN) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLP) != RCC_OscInitStruct->PLL.PLLP) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLQ) != RCC_OscInitStruct->PLL.PLLQ) { + return HAL_ERROR; + } + + if (READ_BIT(RCC->CFGR, RCC_PLLCFGR_PLLR) != RCC_OscInitStruct->PLL.PLLR) { + return HAL_ERROR; + } + /* MBED patch - ST internal ticket 42806 */ } } return HAL_OK; From dd9dd9bbed5281a173ac260cdf2455409e1d7588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cruz=20Monrreal=20II=C2=89?= Date: Mon, 22 Jan 2018 14:46:44 -0600 Subject: [PATCH 079/133] Removed RTC as a supported peripheral for NCS36510 --- targets/targets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/targets.json b/targets/targets.json index 4ec5655a28..45480ba47b 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -3522,7 +3522,7 @@ "post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"}, "macros": ["CM3", "CPU_NCS36510", "TARGET_NCS36510", "LOAD_ADDRESS=0x3000"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"], + "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER", "TRNG", "SPISLAVE"], "release_versions": ["2", "5"] }, "NUMAKER_PFM_M453": { From 4ea39124ff98ece764062655736687336f0c2adc Mon Sep 17 00:00:00 2001 From: bcostm Date: Mon, 22 Jan 2018 15:43:50 +0100 Subject: [PATCH 080/133] STM32: fix serial 7bit data format --- targets/TARGET_STM/serial_api.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/targets/TARGET_STM/serial_api.c b/targets/TARGET_STM/serial_api.c index 29050a5b7c..27072730ff 100644 --- a/targets/TARGET_STM/serial_api.c +++ b/targets/TARGET_STM/serial_api.c @@ -474,11 +474,17 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b } switch (data_bits) { - case 9: - MBED_ASSERT(parity == UART_PARITY_NONE); - obj_s->databits = UART_WORDLENGTH_9B; + case 7: + if (parity != UART_PARITY_NONE) { + obj_s->databits = UART_WORDLENGTH_8B; + } else { +#if defined UART_WORDLENGTH_7B + obj_s->databits = UART_WORDLENGTH_7B; +#else + error("7-bit data format without parity is not supported"); +#endif + } break; - default: case 8: if (parity != UART_PARITY_NONE) { obj_s->databits = UART_WORDLENGTH_9B; @@ -486,15 +492,16 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b obj_s->databits = UART_WORDLENGTH_8B; } break; -#if defined UART_WORDLENGTH_7B - case 7: + case 9: if (parity != UART_PARITY_NONE) { - obj_s->databits = UART_WORDLENGTH_8B; + error("Parity is not supported with 9-bit data format"); } else { - obj_s->databits = UART_WORDLENGTH_7B; + obj_s->databits = UART_WORDLENGTH_9B; } break; -#endif + default: + error("Only 7, 8 or 9-bit data formats are supported"); + break; } if (stop_bits == 2) { From 9da55ffd57cd85245fceda61800b9b7bfd7ccb69 Mon Sep 17 00:00:00 2001 From: Martin Kojtal <0xc0170@gmail.com> Date: Fri, 19 Jan 2018 13:49:25 +0000 Subject: [PATCH 081/133] RZ_A1H: cmsis nvic include fix To get cmsis nvic definitions, this header file should be included in cmsis.h file. Fixes #5886 --- targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h b/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h index 0f9a540cdd..5d8b03f68f 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h @@ -8,5 +8,6 @@ #define MBED_CMSIS_H #include "MBRZA1H.h" +#include "cmsis_nvic.h" #endif From c95ef84da6bbf7e7f1526333a6610202a369a0c9 Mon Sep 17 00:00:00 2001 From: adustm Date: Fri, 12 Jan 2018 15:49:27 +0100 Subject: [PATCH 082/133] Improve SRAM use for IAR toolchain Use the entire SRAM2 with NVIC buffer + stack Increase HEAP size to 0x10000 in SRAM1 Increase the available SRAM1 by 0x2000 --- .../device/TOOLCHAIN_IAR/stm32l475xx.icf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf index 15c4254b3f..84020a40d9 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L475xG/device/TOOLCHAIN_IAR/stm32l475xx.icf @@ -21,12 +21,11 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__] define region SRAM2_region = mem:[from __region_SRAM2_start__ to __region_SRAM2_end__]; define region SRAM1_region = mem:[from __region_SRAM1_start__ to __region_SRAM1_end__]; -/* Stack 1/8 and Heap 1/4 of RAM */ -define symbol __size_cstack__ = 0x8000; -define symbol __size_heap__ = 0xa000; +/* Stack complete SRAM2 and Heap 2/3 of SRAM1 */ +define symbol __size_cstack__ = 0x7e00; +define symbol __size_heap__ = 0x10000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; -define block STACKHEAP with fixed order { block HEAP, block CSTACK }; initialize by copy with packing = zeros { readwrite }; do not initialize { section .noinit }; @@ -34,5 +33,5 @@ do not initialize { section .noinit }; place at address mem:__intvec_start__ { readonly section .intvec }; place in ROM_region { readonly }; -place in SRAM1_region { readwrite, block STACKHEAP }; -place in SRAM2_region { }; +place in SRAM1_region { readwrite, block HEAP }; +place in SRAM2_region { block CSTACK }; From 33d2548d240c96b6d2facdb448f95760f42fad2c Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Tue, 23 Jan 2018 12:41:35 +0100 Subject: [PATCH 083/133] STM32F407 : correct ARM scatter file Alignment with STM32Cube_FW_F4_V1.18.0 done --- .../device/TOOLCHAIN_ARM_MICRO/STM32F407.sct | 17 ----- .../TOOLCHAIN_ARM_MICRO/STM32F407xx.sct | 18 +++++ ...rtup_STM32F40x.S => startup_STM32F407xx.S} | 72 ++++++++++++------- .../device/TOOLCHAIN_ARM_STD/STM32F407.sct | 17 ----- .../device/TOOLCHAIN_ARM_STD/STM32F407xx.sct | 18 +++++ ...rtup_STM32F40x.S => startup_STM32F407xx.S} | 72 ++++++++++++------- 6 files changed, 128 insertions(+), 86 deletions(-) delete mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407.sct create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407xx.sct rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/{startup_STM32F40x.S => startup_STM32F407xx.S} (84%) delete mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407.sct create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407xx.sct rename targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/{startup_STM32F40x.S => startup_STM32F407xx.S} (84%) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407.sct deleted file mode 100644 index acffd8ae00..0000000000 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407.sct +++ /dev/null @@ -1,17 +0,0 @@ -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -LR_IROM1 0x08000000 0x00100000 { ; load region size_region - ER_IROM1 0x08000000 0x00100000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - } - RW_IRAM1 0x10000000 0x00010000 { ; CCM - } - RW_IRAM2 0x20000188 0x0001FE78 { - .ANY (+RW +ZI) - } -} - diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407xx.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407xx.sct new file mode 100644 index 0000000000..7930116a81 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/STM32F407xx.sct @@ -0,0 +1,18 @@ +; ***************************************** +; *** Scatter-Loading Description File *** +; ***************************************** + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000188 0x0001FE78 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x10000000 0x00010000 { ; CCM + .ANY (CCMRAM) + } +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F40x.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F407xx.S similarity index 84% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F40x.S rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F407xx.S index 7de08f9a5b..9c458c8407 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F40x.S +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_MICRO/startup_STM32F407xx.S @@ -1,23 +1,41 @@ -;/***************************************************************************** -; * @file: startup_STM32F40x.s -; * @purpose: CMSIS Cortex-M4 Core Device Startup File -; * for the ST STM32F40x Device Series -; * @version: V1.20 -; * @date: 16. January 2012 -; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------ -; * -; * Copyright (C) 2012 ARM Limited. All rights reserved. -; * ARM Limited (ARM) is supplying this software for use with Cortex-M4 -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. -; * -; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED -; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF -; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. -; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR -; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. -; * -; *****************************************************************************/ +;******************** (C) COPYRIGHT 2017 STMicroelectronics ******************** +;* File Name : startup_stm32f407xx.s +;* Author : MCD Application Team +;* Description : STM32F407xx devices vector table for MDK-ARM_MICRO toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +;******************************************************************************* ; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs @@ -56,6 +74,8 @@ __heap_limit EQU (__initial_sp - Stack_Size) AREA RESET, DATA, READONLY EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler @@ -122,7 +142,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 - DCD FSMC_IRQHandler ; FSMC + DCD FMC_IRQHandler ; FMC DCD SDIO_IRQHandler ; SDIO DCD TIM5_IRQHandler ; TIM5 DCD SPI3_IRQHandler ; SPI3 @@ -153,10 +173,12 @@ __Vectors DCD __initial_sp ; Top of Stack DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI DCD OTG_HS_IRQHandler ; USB OTG HS DCD DCMI_IRQHandler ; DCMI - DCD CRYP_IRQHandler ; CRYP crypto + DCD 0 ; Reserved DCD HASH_RNG_IRQHandler ; Hash and Rng DCD FPU_IRQHandler ; FPU +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY @@ -268,7 +290,7 @@ Default_Handler PROC EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] EXPORT TIM8_CC_IRQHandler [WEAK] EXPORT DMA1_Stream7_IRQHandler [WEAK] - EXPORT FSMC_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] EXPORT SDIO_IRQHandler [WEAK] EXPORT TIM5_IRQHandler [WEAK] EXPORT SPI3_IRQHandler [WEAK] @@ -299,7 +321,6 @@ Default_Handler PROC EXPORT OTG_HS_WKUP_IRQHandler [WEAK] EXPORT OTG_HS_IRQHandler [WEAK] EXPORT DCMI_IRQHandler [WEAK] - EXPORT CRYP_IRQHandler [WEAK] EXPORT HASH_RNG_IRQHandler [WEAK] EXPORT FPU_IRQHandler [WEAK] @@ -351,7 +372,7 @@ TIM8_UP_TIM13_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler TIM8_CC_IRQHandler DMA1_Stream7_IRQHandler -FSMC_IRQHandler +FMC_IRQHandler SDIO_IRQHandler TIM5_IRQHandler SPI3_IRQHandler @@ -382,7 +403,6 @@ OTG_HS_EP1_IN_IRQHandler OTG_HS_WKUP_IRQHandler OTG_HS_IRQHandler DCMI_IRQHandler -CRYP_IRQHandler HASH_RNG_IRQHandler FPU_IRQHandler diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407.sct deleted file mode 100644 index acffd8ae00..0000000000 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407.sct +++ /dev/null @@ -1,17 +0,0 @@ -; ************************************************************* -; *** Scatter-Loading Description File generated by uVision *** -; ************************************************************* - -LR_IROM1 0x08000000 0x00100000 { ; load region size_region - ER_IROM1 0x08000000 0x00100000 { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - } - RW_IRAM1 0x10000000 0x00010000 { ; CCM - } - RW_IRAM2 0x20000188 0x0001FE78 { - .ANY (+RW +ZI) - } -} - diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407xx.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407xx.sct new file mode 100644 index 0000000000..7930116a81 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/STM32F407xx.sct @@ -0,0 +1,18 @@ +; ***************************************** +; *** Scatter-Loading Description File *** +; ***************************************** + +LR_IROM1 0x08000000 0x00100000 { ; load region size_region + ER_IROM1 0x08000000 0x00100000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000188 0x0001FE78 { + .ANY (+RW +ZI) + } + RW_IRAM2 0x10000000 0x00010000 { ; CCM + .ANY (CCMRAM) + } +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F40x.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F407xx.S similarity index 84% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F40x.S rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F407xx.S index 3a5d312e4b..fd60b26061 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F40x.S +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F407xG/device/TOOLCHAIN_ARM_STD/startup_STM32F407xx.S @@ -1,23 +1,41 @@ -;/***************************************************************************** -; * @file: startup_STM32F40x.s -; * @purpose: CMSIS Cortex-M4 Core Device Startup File -; * for the ST STM32F40x Device Series -; * @version: V1.20 -; * @date: 16. January 2012 -; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------ -; * -; * Copyright (C) 2012 ARM Limited. All rights reserved. -; * ARM Limited (ARM) is supplying this software for use with Cortex-M4 -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. -; * -; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED -; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF -; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. -; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR -; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. -; * -; *****************************************************************************/ +;******************** (C) COPYRIGHT 2017 STMicroelectronics ******************** +;* File Name : startup_stm32f407xx.s +;* Author : MCD Application Team +;* Description : STM32F407xx devices vector table for MDK-ARM_STD toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +;******************************************************************************* @@ -30,6 +48,8 @@ __initial_sp EQU 0x20020000 ; Top of RAM AREA RESET, DATA, READONLY EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler @@ -96,7 +116,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 - DCD FSMC_IRQHandler ; FSMC + DCD FMC_IRQHandler ; FMC DCD SDIO_IRQHandler ; SDIO DCD TIM5_IRQHandler ; TIM5 DCD SPI3_IRQHandler ; SPI3 @@ -127,10 +147,12 @@ __Vectors DCD __initial_sp ; Top of Stack DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI DCD OTG_HS_IRQHandler ; USB OTG HS DCD DCMI_IRQHandler ; DCMI - DCD CRYP_IRQHandler ; CRYP crypto + DCD 0 ; Reserved DCD HASH_RNG_IRQHandler ; Hash and Rng DCD FPU_IRQHandler ; FPU +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY @@ -242,7 +264,7 @@ Default_Handler PROC EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] EXPORT TIM8_CC_IRQHandler [WEAK] EXPORT DMA1_Stream7_IRQHandler [WEAK] - EXPORT FSMC_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] EXPORT SDIO_IRQHandler [WEAK] EXPORT TIM5_IRQHandler [WEAK] EXPORT SPI3_IRQHandler [WEAK] @@ -273,7 +295,6 @@ Default_Handler PROC EXPORT OTG_HS_WKUP_IRQHandler [WEAK] EXPORT OTG_HS_IRQHandler [WEAK] EXPORT DCMI_IRQHandler [WEAK] - EXPORT CRYP_IRQHandler [WEAK] EXPORT HASH_RNG_IRQHandler [WEAK] EXPORT FPU_IRQHandler [WEAK] @@ -325,7 +346,7 @@ TIM8_UP_TIM13_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler TIM8_CC_IRQHandler DMA1_Stream7_IRQHandler -FSMC_IRQHandler +FMC_IRQHandler SDIO_IRQHandler TIM5_IRQHandler SPI3_IRQHandler @@ -356,7 +377,6 @@ OTG_HS_EP1_IN_IRQHandler OTG_HS_WKUP_IRQHandler OTG_HS_IRQHandler DCMI_IRQHandler -CRYP_IRQHandler HASH_RNG_IRQHandler FPU_IRQHandler From e7b7bea320fa9bb193c00c834a1f9ed0a44f41cd Mon Sep 17 00:00:00 2001 From: Martin Kojtal <0xc0170@gmail.com> Date: Thu, 25 Jan 2018 11:07:01 +0000 Subject: [PATCH 084/133] Revert "STM32F7: Add bootloader support" --- .../TARGET_NUCLEO_F746ZG/system_clock.c | 3 +-- .../device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct | 13 ++----------- .../device/TOOLCHAIN_ARM_STD/stm32f746xg.sct | 13 ++----------- .../device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld | 11 +---------- .../device/TOOLCHAIN_IAR/stm32f746xg.icf | 9 +++------ .../TARGET_NUCLEO_F767ZI/system_clock.c | 3 +-- .../device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct | 13 ++----------- .../device/TOOLCHAIN_ARM_STD/stm32f767xi.sct | 13 ++----------- .../device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld | 11 +---------- .../device/TOOLCHAIN_IAR/stm32f767xi.icf | 9 +++------ targets/TARGET_STM/mbed_overrides.c | 13 +++---------- targets/targets.json | 6 ++---- 12 files changed, 23 insertions(+), 94 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c index 613d4da059..12d4d52adc 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/TARGET_NUCLEO_F746ZG/system_clock.c @@ -30,7 +30,6 @@ **/ #include "stm32f7xx.h" -#include "nvic_addr.h" #include "mbed_assert.h" /*!< Uncomment the following line if you need to relocate your vector Table in @@ -93,7 +92,7 @@ void SystemInit(void) #ifdef VECT_TAB_SRAM SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else - SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; /* Vector Table Relocation in Internal FLASH */ + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct index 897c962691..cb52146d47 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_MICRO/stm32f746xg.sct @@ -1,4 +1,3 @@ -#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -28,18 +27,10 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 0x100000 -#endif - ; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) -LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region +LR_IROM1 0x08000000 0x100000 { ; load region size_region - ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address + ER_IROM1 0x08000000 0x100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct index 897c962691..cb52146d47 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_ARM_STD/stm32f746xg.sct @@ -1,4 +1,3 @@ -#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -28,18 +27,10 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 0x100000 -#endif - ; STM32F746NG: 1024 KB FLASH (0x100000) + 320 KB SRAM (0x50000) -LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region +LR_IROM1 0x08000000 0x100000 { ; load region size_region - ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address + ER_IROM1 0x08000000 0x100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld index 59c032d568..198ac5c584 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_GCC_ARM/STM32F746xG.ld @@ -1,16 +1,7 @@ /* Linker script to configure memory regions. */ - -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 1024K -#endif - MEMORY { - FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K RAM (rwx) : ORIGIN = 0x200001C8, LENGTH = 320K - 0x1C8 } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf index 4d8dfcaa4a..99918b9898 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F746xG/device/TOOLCHAIN_IAR/stm32f746xg.icf @@ -1,10 +1,7 @@ -if (!isdefinedsymbol(MBED_APP_START)) { define symbol MBED_APP_START = 0x08000000; } -if (!isdefinedsymbol(MBED_APP_SIZE)) { define symbol MBED_APP_SIZE = 0x100000; } - /* [ROM = 1024kb = 0x100000] */ -define symbol __intvec_start__ = MBED_APP_START; -define symbol __region_ROM_start__ = MBED_APP_START; -define symbol __region_ROM_end__ = MBED_APP_START + MBED_APP_SIZE - 1; +define symbol __intvec_start__ = 0x08000000; +define symbol __region_ROM_start__ = 0x08000000; +define symbol __region_ROM_end__ = 0x080FFFFF; /* [RAM = 320kb = 0x50000] Vector table dynamic copy: 114 vectors = 456 bytes (0x1C8) to be reserved in RAM */ define symbol __NVIC_start__ = 0x20000000; diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c index fdb245e65b..9e6db0524a 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/TARGET_NUCLEO_F767ZI/system_clock.c @@ -30,7 +30,6 @@ **/ #include "stm32f7xx.h" -#include "nvic_addr.h" #include "mbed_assert.h" /*!< Uncomment the following line if you need to relocate your vector Table in @@ -93,7 +92,7 @@ void SystemInit(void) #ifdef VECT_TAB_SRAM SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else - SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; /* Vector Table Relocation in Internal FLASH */ + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct index 0534eeee59..aaa6ed8f35 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_MICRO/stm32f767xi.sct @@ -1,4 +1,3 @@ -#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -28,18 +27,10 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 0x200000 -#endif - ; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) -LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region +LR_IROM1 0x08000000 0x200000 { ; load region size_region - ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address + ER_IROM1 0x08000000 0x200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct index 0534eeee59..aaa6ed8f35 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_ARM_STD/stm32f767xi.sct @@ -1,4 +1,3 @@ -#! armcc -E ; Scatter-Loading Description File ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2016, STMicroelectronics @@ -28,18 +27,10 @@ ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 0x200000 -#endif - ; STM32F767ZI: 2048 KB FLASH (0x200000) + 512 KB SRAM (0x80000) -LR_IROM1 MBED_APP_START MBED_APP_SIZE { ; load region size_region +LR_IROM1 0x08000000 0x200000 { ; load region size_region - ER_IROM1 MBED_APP_START MBED_APP_SIZE { ; load address = execution address + ER_IROM1 0x08000000 0x200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld index e75663eb18..359b884aee 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_GCC_ARM/STM32F767xI.ld @@ -1,16 +1,7 @@ /* Linker script to configure memory regions. */ - -#if !defined(MBED_APP_START) - #define MBED_APP_START 0x08000000 -#endif - -#if !defined(MBED_APP_SIZE) - #define MBED_APP_SIZE 2048K -#endif - MEMORY { - FLASH (rx) : ORIGIN = MBED_APP_START, LENGTH = MBED_APP_SIZE + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K RAM (rwx) : ORIGIN = 0x200001F8, LENGTH = 512K - 0x1F8 } diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf index 40316b8e54..1c73fc150d 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_STM32F767xI/device/TOOLCHAIN_IAR/stm32f767xi.icf @@ -1,10 +1,7 @@ -if (!isdefinedsymbol(MBED_APP_START)) { define symbol MBED_APP_START = 0x08000000; } -if (!isdefinedsymbol(MBED_APP_SIZE)) { define symbol MBED_APP_SIZE = 0x200000; } - /* [ROM = 2048kb = 0x200000] */ -define symbol __intvec_start__ = MBED_APP_START; -define symbol __region_ROM_start__ = MBED_APP_START; -define symbol __region_ROM_end__ = MBED_APP_START + MBED_APP_SIZE - 1; +define symbol __intvec_start__ = 0x08000000; +define symbol __region_ROM_start__ = 0x08000000; +define symbol __region_ROM_end__ = 0x081FFFFF; /* [RAM = 512kb = 0x80000] Vector table dynamic copy: 126 vectors = 504 bytes (0x1F8) to be reserved in RAM */ define symbol __NVIC_start__ = 0x20000000; diff --git a/targets/TARGET_STM/mbed_overrides.c b/targets/TARGET_STM/mbed_overrides.c index 8df4ff2958..fbdccb8c5f 100644 --- a/targets/TARGET_STM/mbed_overrides.c +++ b/targets/TARGET_STM/mbed_overrides.c @@ -35,16 +35,9 @@ void mbed_sdk_init() HAL_Init(); #if TARGET_STM32F7 - // The mbed_sdk_init can be called either during cold boot or during - // application boot after bootloader has been executed. - // In case the bootloader has already enabled the cache, - // is is needed to not enable it again. - if (SCB->CCR & (uint32_t)SCB_CCR_IC_Msk == 0) { // If ICache is disabled - SCB_EnableICache(); - } - if (SCB->CCR & (uint32_t)SCB_CCR_DC_Msk == 0) { // If DCache is disabled - SCB_EnableDCache(); - } + // Enable CPU L1-Cache + SCB_EnableICache(); + SCB_EnableDCache(); #endif /* TARGET_STM32F7 */ /* Configure the System clock source, PLL Multiplier and Divider factors, diff --git a/targets/targets.json b/targets/targets.json index 45480ba47b..3552deb09e 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1294,8 +1294,7 @@ "device_has_add": ["ANALOGOUT", "CAN", "LOWPOWERTIMER", "SERIAL_ASYNCH", "TRNG", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], - "device_name": "STM32F746ZG", - "bootloader_supported": true + "device_name": "STM32F746ZG" }, "NUCLEO_F756ZG": { "inherits": ["FAMILY_STM32"], @@ -1351,8 +1350,7 @@ "device_has_add": ["ANALOGOUT", "CAN", "LOWPOWERTIMER", "SERIAL_ASYNCH", "TRNG", "FLASH"], "features": ["LWIP"], "release_versions": ["2", "5"], - "device_name": "STM32F767ZI", - "bootloader_supported": true + "device_name": "STM32F767ZI" }, "NUCLEO_L011K4": { "inherits": ["FAMILY_STM32"], From 7b7f9b4b43fbaebfdb2d18c1f75241f8ec4cf857 Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Wed, 24 Jan 2018 11:48:38 -0600 Subject: [PATCH 085/133] Update CMSIS pack Signed-off-by: Mahesh Mahadevan --- tools/arm_pack_manager/aliases.json | 2 +- tools/arm_pack_manager/index.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/arm_pack_manager/aliases.json b/tools/arm_pack_manager/aliases.json index 557a37f6b1..6c7443852e 100644 --- a/tools/arm_pack_manager/aliases.json +++ b/tools/arm_pack_manager/aliases.json @@ -1 +1 @@ -{"nRF51 PCA10028": "nRF51422_xxAC", "SAM4L-EK": "ATSAM4LC4C", "Apollo1 EVB": "APOLLO512-KBR", "NuTiny-SDK-M451": "M453VG6AE", "NuTiny-SDK-M0518": "M0518SD2AE", "STM32L073Z-EVAL": "STM32L073VZ", "TLE9879 EvalKit": "TLE9879QXA40", "STM32F401C-Discovery": "STM32F401VC", "NuTiny-SDK-M051": "M0516LDE", "Z32F0640100KITG": "Z32F06410AES", "SAMD51-XPRO": "ATSAMD51P20A", "NuTiny-SDK-NANO112": "NANO112VC2AN", "XMC4500 Relax Kit": "XMC4500-F100x1024", "TWR-K22F120M": "MK22FN512xxx12", "MCB1200": "LPC1227FBD64/301", "DB-MAX71637": "MAX71637", "XMC 2Go": "XMC1100-Q024x0064", "STM32H743I-EVAL": "STM32H743XI", "NUCLEO-L152RE": "STM32L152RE", "TWR-KV10Z32": "MKV10Z32xxx7", "XMC4800 Automation Board": "XMC4800-E196x2048", "FRDM-KW40Z": "MKW40Z160xxx4", "NuTiny-SDK-NM1200": "NM1200LBAE", "TWR-K70F120M": "MK70FN1M0xxx12", "STM32F769I-Discovery": "STM32F769NIHx", "TWR-KE18F": "MKE18F512xxx16", "MCBSTM32F400": "STM32F407IG", "SAML21-XPRO": "ATSAML21J18A", "STM32F030-Discovery": "STM32F030R8", "SAMA5D2-XULT": "ATSAMA5D27", "Apollo EVK": "APOLLO512-KBR", "NuTiny-SDK-NUC505": "NUC505YO13Y", "NuTiny-SDK-M058S": "M058SSAN", "TRK-KEA8": "SKEAZN8xxx4", "MCB1700": "LPC1758", "V2M-MPS2": "CMSDK_CM7", "MCB54110": "LPC54114J256BD64", "LPC1788-32 Developers Kit": "LPC1788", "Z32F1280100KITG": "Z32F12811ARS", "NuTiny-SDK-NUC472": "NUC472HI8AE", "EFM32GG-DK3750": "EFM32GG990F1024", "Colibri-VF50": "MVF50NN15xxxx40", "MCBSTM32F200": "STM32F207IG", "EVAL-ADuCM322EBZ": "ADuCM322", "FRDM-KL25Z": "MKL25Z128xxx4", "SN32F707B Starter Kit Rev1_0": "SN32F70*B", "NUCLEO-F446RE": "STM32F446RE", "NuTiny-SDK-NANO103": "NANO103SD3AE", "MCBNUC1xx": "NUC140VE3AN", "MCB11C14": "LPC11C14FBD48/301", "FRDM-KL02Z": "MKL02Z32xxx4", "Colibri-iMX7": "MCIMX7D7", "NuTiny-SDK-Mini55": "Mini54XZAE", "NuTiny-SDK-Mini57": "Mini57TDE", "SAM3S-EK": "ATSAM3S4C", "SF2_DEV_KIT": "M2S050", "NuTiny-SDK-NANO100BN": "NANO130KE3BN", "NuTiny-SDK-Mini58": "Mini58LDE", "uVision Simulator": "ARMCM0", "FRDM-K28F": "MK28FN2M0xxx15", "TRK-KEA64": "SKEAZN64xxx2", "XMC1200 Boot Kit": "XMC1201-T038x0200", "N5 Starter Kit": "nRF51422_xxAA", "Core031C_Board": "MM32x031", "EFM32HG-SLSTK3400A": "EFM32HG322F64", "EVAL-ADuCM320EBZ": "ADuCM320", "ADSP-CM419F EZ-BOARD M4": "ADSP-CM419F-BCZ_M4", "NOVPEK-iMX7": "MCIMX7D7", "XMC4700 Relax Kit": "XMC4700-F144x2048", "SAMG55-XPRO": "ATSAMG55J19", "Fixed Virtual Platform": "ARMCA5", "SAMHA1G16A-XPRO": "ATSAMHA1G16A", "FRDM-KE06Z": "MKE06Z128xxx4", "NUCLEO-F072RB": "STM32F072RB", "NuTiny-SDK-NUC100": "NUC100VE3DN", "MCBTMPM360": "TMPM362F10FG", "NuTiny-SDK-NUC121": "NUC121SC2AE", "NuTiny-SDK-NUC029AE": "NUC029FAE", "NuTiny-SDK-M0564": "M0564VG4AE", "V2M-MPS2 (IoT)": "IOTKit_ARMv8MML", "ADuCM4050 EZ-KIT": "ADuCM4050", "FRDM-K20D50M": "MK20DX128xxx5", "STM32756G-EVAL": "STM32F756NGHx", "SAM4L-XPRO": "ATSAM4LC4C", "FRDM-KL43Z": "MKL43Z256xxx4", "nRF52 PCA10036": "nRF52832_xxAA", "TWR-KV11Z75M": "MKV11Z128xxx7", "NuTiny-SDK-NUC029AN": "NUC029TAN", "TWR-VF65GS10": "MVF61NS15xxxx50", "TWR-KM34Z50": "MKM34Z128xxx5", "STM32L-Discovery": "STM32L152RB", "AC30M1464 MINI B/D": "AC30M1464", "IMX7-PHYBOARD-ZETA": "MCIMX7D7", "XMC1100 Boot Kit": "XMC1100-T038x0064", "TWR-KV46F150M": "MKV46F256xxx16", "Koala EVM": "STM32F429II", "EFM32WG-STK3800": "EFM32WG990F256", "MCB1313": "LPC1313FBD48", "NuTiny-SDK-M480": "M487JIDAE", "TWR-K65F180M": "MK65FN2M0xxx18", "EB_TMPM369FDFG": "TMPM369FDFG", "TS-R-IN32M3-EC": "R-IN32M3-EC", "XMC4300 Relax Kit": "XMC4300-F100x256", "LPCXpresso54114": "LPC54114J256BD64", "STM32F429I-Discovery": "STM32F429ZI", "Colibri-VF61": "MVF61NN15xxxx50", "NUCLEO-F091RC": "STM32F091RC", "SAMV71-XULTRA": "ATSAMV71Q21", "FRDM-KW41Z": "MKW41Z512xxx4", "TWR-KL43Z48M": "MKL43Z256xxx4", "STM32373C-EVAL": "STM32F373VC", "QN908XDK": "QN9080A", "STM32F746G-Discovery": "STM32F746NGHx", "TWR-K24F120M": "MK24FN256xxx12", "nRF52 PCA10040": "nRF52832_xxAA", "MCBSTM32C": "STM32F107VC", "FRDM-KL03Z": "MKL03Z32xxx4", "MCBSTM32E": "STM32F103ZG", "NUCLEO-F401RE": "STM32F401RE", "SF2_EVAL_KIT": "M2S025", "STM32303C-EVAL": "STM32F303VC", "AC33MA384A MINI B/D": "AC33MA384A", "SAML22-XPRO": "ATSAML22N18A", "XMC4800 Relax EtherCAT Kit": "XMC4800-F144x2048", "iMX7-Dual-COM": "MCIMX7D7", "TRK-KEA128": "SKEAZ128xxx4", "SAM4S-EK": "SAM4S16C", "TWR-K20D50M": "MK20DX128xxx5", "STM32F3-Discovery": "STM32F303VC", "LPCXpresso1125": "LPC1125JBD48/303", "STM32F4-Discovery": "STM32F407VG", "CMSIS_RTOS_Tutorial": "STM32F103RB", "SAM3X-EK": "ATSAM3X8H", "SF2_ADV_DEV_KIT": "M2S150", "SN32F760 Starter Kit Rev1_1": "SN32F76*", "Core103R_Board": "MM32x103", "NuTiny-SDK-Mini51": "Mini54LDE", "Apollo2 EVB": "AMAPH1KK-KBR", "FRDM-KE04Z": "MKE04Z8xxx4", "NuTiny-SDK-NUC123": "NUC123SD4AN0", "TWR-KL28Z72M": "MKL28Z512xxx7", "Apollo2 EVK": "AMAPH1KK-KBR", "LPC4330-Xplorer": "LPC4330", "NuTiny-SDK-NUC126": "NUC126VG4AE", "MCBTMPM330": "TMPM330FDFG", "NUCLEO-L476RG": "STM32L476RG", "STM32F334-Discovery": "STM32F334C8", "MCB1800": "LPC1850", "EFM32GG-STK3700": "EFM32GG990F1024", "GD32150C-START": "GD32F150C8", "AC33GA256 MINI B/D": "AC33GA256", "TS-R-IN32M3-CL": "R-IN32M3-CL", "TS-R-IN32M3-CEC": "R-IN32M3-EC", "EVAL-ADuCM320iQSPZ": "ADuCM320i", "AC33M8128/6128 MINI B/D": "AC33M8128", "SAM4S-XPRO": "ATSAM4SD32C", "STM32L053-Discovery": "STM32L053C8", "TWR-KM34Z50MV3": "MKM34Z128Axxx5", "PAC52XX EVK": "PAC52XX", "XMC4500 CPU Board - General Purpose (CPU_45A)": "XMC4500-F144x1024", "NuTiny-SDK-NUC122": "NUC122SD2AN", "Z32F3840100KITG": "Z32F38412ALS", "LPCXpresso54608": "LPC54608J512BD208", "MCIMX7ULP-EVK": "MCIMX7U5", "LPC824 LPCXpresso": "LPC824M201JHI33", "STM32439I-EVAL": "STM32F439NI", "EFM32TG-STK3300": "EFM32TG840F32", "AC33M4064/3064 MINI B/D": "AC33M4064", "NUCLEO-F030R8": "STM32F030R8", "NuTiny-SDK-NUC131": "NUC131SD2AE", "DK-TM4C129x": "TM4C129XNCZAD", "STM32F769I-EVAL": "STM32F769NIHx", "SF2_STARTER_KIT": "M2S010", "nRF51 PCA20006": "nRF51822_xxaa", "TS-R-IN32M4-CL2": "R-IN32M4-CL2", "MCIMX6SX-SABRE": "MCIMX6X1", "EVAL-ADICUP3029": "ADuCM3029", "SAM4C-EK": "ATSAM4C16C", "MCB1500": "LPC1549JBD100", "TWR-KW21D256": "MKW21D256xxx5", "STM32L476G-EVAL": "STM32L476ZG", "MCIMX7D-SABRE": "MCIMX7D7", "STM32F051-Discovery": "STM32F051R8", "NUCLEO-L053R8": "STM32L053R8", "FRDM-K64F": "MK64FN1M0VLL12", "TLE9869 EvalKit": "TLE9869QXA20", "NuTiny-SDK-NUC240": "NUC240VE3AE", "LPC84x LPCXpresso": "LPC845M301JBD64", "S32K144-EVB": "S32K144UAT0xxxx", "SAMD20-XPRO": "ATSAMD20J18", "SN32F770 Starter Kit Rev1_0": "SN32F70*B", "SAM4E-EK": "SAM4E16C", "MCB1343": "LPC1343FBD48", "LinkIt 7687 development board": "MT7687F", "XMC4500 CPU Board - General Purpose (CPU_45B)": "XMC4500-E144x1024", "SAM3N-EK": "ATSAM3N4C", "LinkIt 2523 development board": "MT2523x", "SAM3U-EK": "ATSAM3U4E", "ADSP-CM419F EZ-BOARD M0": "ADSP-CM419F-BCZ_M0", "ADuCM3029 EZ-KIT": "ADuCM3029", "NuTiny-SDK-NUC200": "NUC220VE3AN", "FRDM-KL82Z": "MKL81Z128xxx7", "XMC1300 Boot Kit": "XMC1302-T038x0200", "Bulb Board": "S6E1A12B0A", "MCBTMPM395": "TMPM395FWAXBG", "STM32F072-Discovery": "STM32F072RB", "BMSKTOPASM369": "TMPM369FDFG", "LPCXpresso54102": "LPC54102J512BD64", "NuTiny-SDK-NANO100AN": "NANO100VD3AN", "TWR-K60D100M": "MK60DN512xxx10", "TWR-K20D72M": "MK20DX256xxx7", "nRF51 PCA10031": "nRF51422_xxAC", "EK-TM4C1294XL": "TM4C1294NCPDT", "SK-FM3-176PMC-ETHERNET": "MB9BFD18T", "LPC4088-32 Developers Kit": "LPC4088FET208", "FRDM-KW36": "MKW36A512xxx4", "TLE984x Eval.Board": "TLE9844QX", "XMC4500 Relax Lite Kit": "XMC4500-F100x1024", "iMX6-SoloX-COM": "MCIMX6X4", "SAME70-XPLD": "ATSAME70Q21", "LPCXpresso11U68": "LPC11U68JBD100", "XMC4400 CPU Board - General Purpose (CPU_44A)": "XMC4400-F100x512", "NUCLEO-F103RB": "STM32F103RB", "EFM32ZG-STK3200": "EFM32ZG222F32", "XMC1400 Boot Kit": "XMC1402-Q040x0128", "MCBTWRK60": "MK60DN512xxx10", "MCB9B500": "MB9BF506R", "Z32F0642100KITG": "Z32F06423AKE", "ADSP-CM419F EZ-BOARD": "ADSP-CM419F", "LPC812 LPCXpresso": "LPC812M101JDH20", "TWR-KL82Z72M": "MKL82Z128xxx7", "SN32F100 Starter Kit": "SN32F10*", "NuTiny-SDK-M0519": "M0519VE3AE", "TWR-K64F120M": "MK64FN1M0xxx12", "MCB4300": "LPC4350", "XMC4200 CPU Board - Actuator (CPU_42A)": "XMC4200-F64x256", "EVAL-ADuCM360MKZ": "ADuCM360"} \ No newline at end of file +{"nRF51 PCA10028": "nRF51422_xxAC", "SAM4L-EK": "ATSAM4LC4C", "Apollo1 EVB": "APOLLO512-KBR", "NuTiny-SDK-M451": "M453VG6AE", "NuTiny-SDK-M0518": "M0518SD2AE", "STM32L073Z-EVAL": "STM32L073VZ", "TLE9879 EvalKit": "TLE9879QXA40", "STM32F401C-Discovery": "STM32F401VC", "NuTiny-SDK-M051": "M0516LDE", "TWR-K21D50M": "MK21DN512Axxx5", "MCB11C14": "LPC11C14FBD48/301", "TWR-K21F120M": "MK21FN1M0Axxx12", "STM32303E-EVAL": "STM32F303VE", "SAMD51-XPRO": "ATSAMD51P20A", "XMC4500 Relax Kit": "XMC4500-F100x1024", "TWR-K22F120M": "MK22FN512xxx12", "MCB1200": "LPC1227FBD64/301", "DB-MAX71637": "MAX71637", "XMC 2Go": "XMC1100-Q024x0064", "EFM32TG-STK3300": "EFM32TG840F32", "STM32H743I-EVAL": "STM32H743XI", "V2M-MPS3 (IoT)": "IOTKit_CM33_MPS3", "NUCLEO-L152RE": "STM32L152RE", "Colibri-VF61": "MVF61NN15xxxx50", "V2M-MPS2 (IoT)": "IOTKit_ARMv8MML", "FRDM-KW40Z": "MKW40Z160xxx4", "NuTiny-SDK-NM1200": "NM1200LBAE", "TWR-K70F120M": "MK70FN1M0xxx12", "STM32F769I-Discovery": "STM32F769NIHx", "HVP-KV46F150M": "MKV46F256xxx16", "S32K148-EVB": "S32K148UAxxxLQx", "MCBSTM32F400": "STM32F407IG", "SAML21-XPRO": "ATSAML21J18A", "AC33M4064/3064 MINI B/D": "AC33M4064", "SAMA5D2-XULT": "ATSAMA5D27", "Apollo EVK": "APOLLO512-KBR", "NuTiny-SDK-NUC505": "NUC505YO13Y", "NuTiny-SDK-M058S": "M058SSAN", "TRK-KEA8": "SKEAZN8xxx4", "NUCLEO-F446RE": "STM32F446RE", "Z32F0642100KITG": "Z32F06423AKE", "MCB54110": "LPC54114J256BD64", "STM32L496G-Discovery": "STM32L496AGIx", "NuTiny-SDK-NANO112": "NANO112VC2AN", "Z32F1280100KITG": "Z32F12811ARS", "NuTiny-SDK-NUC472": "NUC472HI8AE", "EFM32GG-DK3750": "EFM32GG990F1024", "Colibri-VF50": "MVF50NN15xxxx40", "MCBSTM32F200": "STM32F207IG", "FRDM-KL46Z": "MKL46Z256xxx4", "HVP-KV58F": "MKV58F1M0xxx24", "EVAL-ADuCM322EBZ": "ADuCM322", "MCBTMPM360": "TMPM362F10FG", "TWR-VF65GS10": "MVF61NS15xxxx50", "NuTiny-SDK-NANO103": "NANO103SD3AE", "MCBNUC1xx": "NUC140VE3AN", "Z32F0640100KITG": "Z32F06410AES", "LPCXpresso54114": "LPC54114J256", "Colibri-iMX7": "MCIMX7D7", "NuTiny-SDK-Mini55": "Mini54XZAE", "NuTiny-SDK-Mini57": "Mini57TDE", "FRDM-KE15Z": "MKE15Z256xxx7", "NuTiny-SDK-Mini51": "Mini54LDE", "NuTiny-SDK-NANO100BN": "NANO130KE3BN", "NuTiny-SDK-Mini58": "Mini58LDE", "XMC1400 Boot Kit": "XMC1402-Q040x0128", "FRDM-K28F": "MK28FN2M0xxx15", "NuTiny-SDK-NUC131": "NUC131SD2AE", "TRK-KEA64": "SKEAZN64xxx2", "SAM3N-EK": "ATSAM3N4C", "XMC1200 Boot Kit": "XMC1201-T038x0200", "N5 Starter Kit": "nRF51422_xxAA", "Core031C_Board": "MM32x031", "EFM32HG-SLSTK3400A": "EFM32HG322F64", "EVAL-ADuCM320EBZ": "ADuCM320", "ADSP-CM419F EZ-BOARD M4": "ADSP-CM419F-BCZ_M4", "XMC4700 Relax Kit": "XMC4700-F144x2048", "SAMG55-XPRO": "ATSAMG55J19", "Fixed Virtual Platform": "ARMCA5", "SAMHA1G16A-XPRO": "ATSAMHA1G16A", "FRDM-KE06Z": "MKE06Z128xxx4", "NUCLEO-F072RB": "STM32F072RB", "HVP-KV11Z75M": "MKV11Z128xxx7", "MCB1700": "LPC1758", "MCBTWRK60": "MK60DN512xxx10", "FRDM-K32W042": "K32W042S1M2xxx", "HVP-KV31F120M": "MKV31F512xxx12", "NuTiny-SDK-NUC029AE": "NUC029FAE", "NuTiny-SDK-M0564": "M0564VG4AE", "EV-COG-AD4050LZ": "ADuCM4x50", "FRDM-K20D50M": "MK20DX128xxx5", "STM32756G-EVAL": "STM32F756NGHx", "SAM4L-XPRO": "ATSAM4LC4C", "FRDM-KL43Z": "MKL43Z256xxx4", "nRF52 PCA10036": "nRF52832_xxAA", "TWR-KV11Z75M": "MKV11Z128xxx7", "NuTiny-SDK-NUC029AN": "NUC029TAN", "LPCXpresso54102": "LPC54102J512", "FRDM-KL02Z": "MKL02Z32xxx4", "XMC4800 Automation Board": "XMC4800-E196x2048", "STM32L-Discovery": "STM32L152RB", "IMX7-PHYBOARD-ZETA": "MCIMX7D7", "XMC1100 Boot Kit": "XMC1100-T038x0064", "TWR-KV46F150M": "MKV46F256xxx16", "Koala EVM": "STM32F429II", "EFM32WG-STK3800": "EFM32WG990F256", "MCB1313": "LPC1313FBD48", "NuTiny-SDK-M480": "M487JIDAE", "TWR-K65F180M": "MK65FN2M0xxx18", "EB_TMPM369FDFG": "TMPM369FDFG", "TS-R-IN32M3-EC": "R-IN32M3-EC", "STM32F429I-Discovery": "STM32F429ZI", "TWR-KV10Z32": "MKV10Z32xxx7", "NUCLEO-F091RC": "STM32F091RC", "LinkIt 2523 development board": "MT2523x", "SAMV71-XULTRA": "ATSAMV71Q21", "FRDM-KW41Z": "MKW41Z512xxx4", "TWR-KL43Z48M": "MKL43Z256xxx4", "STM32373C-EVAL": "STM32F373VC", "MCIMX6SX-SABRE": "MCIMX6X1", "NuTiny-SDK-NUC100": "NUC100VE3DN", "FRDM-KV31F": "MKV31F512xxx12", "STM32F746G-Discovery": "STM32F746NGHx", "TWR-KL28Z72M": "MKL28Z512xxx7", "nRF52 PCA10040": "nRF52832_xxAA", "MCBSTM32C": "STM32F107VC", "FRDM-KL03Z": "MKL03Z32xxx4", "MCBSTM32E": "STM32F103ZG", "NUCLEO-F401RE": "STM32F401RE", "MAPS-KS22": "MKS22FN256xxx12", "AC33MA384A MINI B/D": "AC33MA384A", "SAML22-XPRO": "ATSAML22N18A", "XMC4800 Relax EtherCAT Kit": "XMC4800-F144x2048", "iMX7-Dual-COM": "MCIMX7D7", "TRK-KEA128": "SKEAZ128xxx4", "TLE984x Eval.Board Rev1.4": "TLE9844QX", "SAM4S-EK": "SAM4S16C", "TWR-K20D50M": "MK20DX128xxx5", "STM32F3-Discovery": "STM32F303VC", "TWR-KE18F": "MKE18F512xxx16", "LPCXpresso1125": "LPC1125JBD48/303", "STM32F4-Discovery": "STM32F407VG", "CMSIS_RTOS_Tutorial": "STM32F103RB", "SAM3X-EK": "ATSAM3X8H", "STM32303C-EVAL": "STM32F303VC", "RTK772100-GENMAI": "R7S72100", "SN32F760 Starter Kit Rev1_1": "SN32F76*", "Core103R_Board": "MM32x103", "SAM3S-EK": "ATSAM3S4C", "Apollo2 EVB": "AMAPH1KK-KBR", "TWR-KW21D256": "MKW21D256xxx5", "FRDM-KE04Z": "MKE04Z8xxx4", "NuTiny-SDK-NUC123": "NUC123SD4AN0", "TWR-K24F120M": "MK24FN256xxx12", "Apollo2 EVK": "AMAPH1KK-KBR", "LPC4330-Xplorer": "LPC4330", "NuTiny-SDK-NUC126": "NUC126VG4AE", "MCBTMPM330": "TMPM330FDFG", "NUCLEO-L476RG": "STM32L476RG", "Bulb Board": "S6E1A12B0A", "MCB1800": "LPC1850", "EFM32GG-STK3700": "EFM32GG990F1024", "GD32150C-START": "GD32F150C8", "AC33GA256 MINI B/D": "AC33GA256", "TS-R-IN32M3-CL": "R-IN32M3-CL", "STM32072B-EVAL": "STM32F072VB", "SN32F770 Starter Kit Rev1_0": "SN32F70*B", "STM32F334-Discovery": "STM32F334C8", "EVAL-ADuCM320iQSPZ": "ADuCM320i", "STM32L4R9I-EVAL": "STM32L4R9AIIx", "AC33M8128/6128 MINI B/D": "AC33M8128", "SAM4S-XPRO": "ATSAM4SD32C", "HEXIWEAR": "MK64FN1M0xxx12", "SAME70-XPLD": "ATSAME70Q21", "A33G527/526 MINI B/D": "A33G52x", "TWR-KM34Z50MV3": "MKM34Z128Axxx5", "PAC52XX EVK": "PAC52XX", "XMC4500 CPU Board - General Purpose (CPU_45A)": "XMC4500-F144x1024", "NuTiny-SDK-NUC122": "NUC122SD2AN", "Z32F3840100KITG": "Z32F38412ALS", "LPCXpresso54608": "LPC54608J512", "MCIMX7ULP-EVK": "MCIMX7U5", "LPC824 LPCXpresso": "LPC824M201JHI33", "FRDM-KL25Z": "MKL25Z128xxx4", "STM32F030-Discovery": "STM32F030R8", "EFM32ZG-STK3200": "EFM32ZG222F32", "NuTiny-SDK-NUC240": "NUC240VE3AE", "NuTiny-SDK-M2351": "M2351KIAAE", "NuTiny-SDK-NUC121": "NUC121SC2AE", "STM32F769I-EVAL": "STM32F769NIHx", "TWR-KM34Z50": "MKM34Z128xxx5", "nRF51 PCA20006": "nRF51822_xxaa", "TS-R-IN32M4-CL2": "R-IN32M4-CL2", "HVP-KE18F": "MKE18F512xxx16", "QN908XDK": "QN9080A", "EVAL-ADICUP3029": "ADuCM3029", "SAM4C-EK": "ATSAM4C16C", "FRDM-KV11Z": "MKV11Z128xxx7", "TWR-KV31F120M": "MKV31F512xxx12", "MCB1500": "LPC1549JBD100", "TWR-K80F150M": "MK80FN256xxx15", "FRDM-K82F": "MK82FN256xxx15", "STM32L476G-EVAL": "STM32L476ZG", "MCIMX7D-SABRE": "MCIMX7D7", "STM32F051-Discovery": "STM32F051R8", "NUCLEO-L053R8": "STM32L053R8", "FRDM-K64F": "MK64FN1M0VLL12", "TLE9869 EvalKit": "TLE9869QXA20", "LPC84x LPCXpresso": "LPC845M301JBD64", "DK-TM4C129x": "TM4C129XNCZAD", "S32K144-EVB": "S32K144UAT0xxxx", "ADSP-CM419F EZ-BOARD": "ADSP-CM419F", "SAMD20-XPRO": "ATSAMD20J18", "STM32091C-EVAL": "STM32F091VC", "SAM4E-EK": "SAM4E16C", "MCB1343": "LPC1343FBD48", "TWR-KV58F220M": "MKV58F1M0xxx24", "XMC4500 CPU Board - General Purpose (CPU_45B)": "XMC4500-E144x1024", "FRDM-KL28Z": "MKL28Z512xxx7", "ADuCM4050 EZ-KIT": "ADuCM4050", "LPCXpresso54618": "LPC54618J512", "SN32F100 Starter Kit": "SN32F10*", "SAM3U-EK": "ATSAM3U4E", "ADSP-CM419F EZ-BOARD M0": "ADSP-CM419F-BCZ_M0", "ADuCM3029 EZ-KIT": "ADuCM3029", "LPC812 LPCXpresso": "LPC812M101JDH20", "NuTiny-SDK-NUC200": "NUC220VE3AN", "STM32F072-Discovery": "STM32F072RB", "FRDM-KL82Z": "MKL81Z128xxx7", "XMC1300 Boot Kit": "XMC1302-T038x0200", "LPC1788-32 Developers Kit": "LPC1788", "NuTiny-SDK-NUC2201": "NUC2201LE3AE", "MCBTMPM395": "TMPM395FWAXBG", "SN32F707B Starter Kit Rev1_0": "SN32F70*B", "BMSKTOPASM369": "TMPM369FDFG", "uVision Simulator": "ARMCM0", "NuTiny-SDK-NANO100AN": "NANO100VD3AN", "TWR-K60D100M": "MK60DN512xxx10", "TWR-K20D72M": "MK20DX256xxx7", "EV-COG-AD3029LZ": "ADuCM3029", "nRF51 PCA10031": "nRF51422_xxAC", "EK-TM4C1294XL": "TM4C1294NCPDT", "SK-FM3-176PMC-ETHERNET": "MB9BFD18T", "LPC4088-32 Developers Kit": "LPC4088FET208", "FRDM-KW36": "MKW36A512xxx4", "LinkIt 7687 development board": "MT7687F", "XMC4500 Relax Lite Kit": "XMC4500-F100x1024", "FRDM-K66F": "MK66FN2M0xxx18", "iMX6-SoloX-COM": "MCIMX6X4", "STM32L053-Discovery": "STM32L053C8", "LPCXpresso11U68": "LPC11U68JBD100", "XMC4400 CPU Board - General Purpose (CPU_44A)": "XMC4400-F100x512", "LPCXpresso54628": "LPC54628J512", "NUCLEO-F103RB": "STM32F103RB", "SAMC21N-XPRO": "ATSAMC21N18A", "FRDM-KE02Z40M": "MKE02Z64xxx4", "NUCLEO-F030R8": "STM32F030R8", "MCB9B500": "MB9BF506R", "V2M-MPS2": "DS_CM3", "FRDM-KL27Z": "MKL27Z64xxx4", "AC30M1464 MINI B/D": "AC30M1464", "XMC4300 Relax Kit": "XMC4300-F100x256", "TWR-KL82Z72M": "MKL82Z128xxx7", "TS-R-IN32M3-CEC": "R-IN32M3-EC", "NuTiny-SDK-M0519": "M0519VE3AE", "TWR-K64F120M": "MK64FN1M0xxx12", "MCB4300": "LPC4350", "iMX7-Meerkat-96Boards": "MCIMX7D7", "XMC4200 CPU Board - Actuator (CPU_42A)": "XMC4200-F64x256", "EVAL-ADuCM360MKZ": "ADuCM360"} \ No newline at end of file diff --git a/tools/arm_pack_manager/index.json b/tools/arm_pack_manager/index.json index f9c50df30a..271fe6002f 100644 --- a/tools/arm_pack_manager/index.json +++ b/tools/arm_pack_manager/index.json @@ -1 +1 @@ -{"S6E2H16E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2H16G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MKE16F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE16F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TM4C1290NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1290NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC029LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC029AN\\Include\\NUC029xAN.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC029AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC120LC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMA5D26": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D26.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D27": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D27.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D24": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D24.svd", "processor": {"fpu": "DP_FPU"}}, "S6E2H16F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMA5D22": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D22.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D23": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D23.svd", "processor": {"fpu": "DP_FPU"}}, "STM32F417IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "ATSAMA5D21": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D21.svd", "processor": {"fpu": "DP_FPU"}}, "MB9BF317S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32WG390F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG390F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1302-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF317T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MK24FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK24F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "AMAPH1KK-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo2.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/apollo2.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NANO130SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32F423RH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M452RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MK60DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "N572P072": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\N572F072_v3.svd", "processor": {"clock": "48000000"}}, "MB9BF106R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF415N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF106N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MK21FN1M0Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F722RC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMC21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1237H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4300-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4300_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4300c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4300_series/Include/XMC4300.h", "define": "XMC4300_F100x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x0FFC0"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4300.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM383FSEFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "AC30M1364": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG230F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG230F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG230F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMR21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F109F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM383FWEFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F411RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F417IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LM3S6422": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6422.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S6420": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6420.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S2965": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2965.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32BG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC100RD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S600": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s600.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD09C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD09_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMD09\\Include\\samd09.h", "define": "__SAMD09D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD09\\ATSAMD09C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F105R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK22FX512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM066FWUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M066.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F412VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NANO100ND2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "XMC1201-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Mini57EDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F105RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF328S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF32xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MB9BF328T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF32xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MK26FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK26F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11U24FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TLE9879QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "MKV11Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P128_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV1x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV11Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M452LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L451CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1402-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L451CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK02FN64xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK0x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K00_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK02F12810.h", "define": "MK02FN64xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K00_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK02F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC54607J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "XMC1301-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKS20FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKS20F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF529T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF52xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "Z32F06410AES": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0641.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0641.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0641.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF166R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF529S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF52xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "GD32F150G8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG232F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG232F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG232F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK63FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK63F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC230VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F150G4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F150G6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMA5D28": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D28.svd", "processor": {"fpu": "DP_FPU"}}, "STM32F071RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO130KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LPC11U35FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ARMv8MML_DSP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MKL46Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL46Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM380FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "M4TKRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32LG295F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG295F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC18S50": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "TLE9844QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9844.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xF000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAML21E18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21E18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF128S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF12xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "TMPM395FWAXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM395_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM395.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M395.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9BF128T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF12xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MK22DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S308": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s308.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NUC100RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "nRF51422_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "ATSAM3A8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3A8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3A8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "nRF51422_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F722IC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F722IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TM4C1237H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM061FWFG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M061.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F756NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32HG220F32R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F32R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F767IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1202-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32HG220F32R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F32R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK52DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK52D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32HG220F32R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F767II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7661BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L496RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG220F32R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ARMSC000": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMSC000/Include/ARMSC000.h", "define": "ARMSC000"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMSC000.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F334K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32LG330F64R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334K4": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM462F10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F64R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK82FN256xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK82F25615.h", "define": "MK82FN256xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK82F25615.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MKE04Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P8KB.FLM": {"default": "1", "ramsize": "0x400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKE04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C129DNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129DNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F64R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "STM32L475RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F766J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "S6E2CC8J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TM4C1230C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1230C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F121E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F121E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO110SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32L031C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L031C4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5G36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F410CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAML22G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1292NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1292NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ISD9160": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"clock": "48000000"}}, "EZR32WG230F64R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L486VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32WG230F64R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK22FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK22F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1102LVUK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1115JET48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV30F64xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV30F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MK20DN32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F446ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F302CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F446ZC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1301-Q024x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG990F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG990F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F303VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MKE14Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE14Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKE16F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE16F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F303VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F777BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32WG295F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG295F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32HG320F32R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TM4C1236D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1236D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32WG230F64R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1102UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC1102_04.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32WG230F64R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2HG4E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32GG330F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG330F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG330F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL05Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM376FDDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M376.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG330F256R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4S16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4S16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MAX71617": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "MAX71616": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "NANO120VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFM32TG230F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG230F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1100-Q024x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AFB42N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB42L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB42M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F439II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Z32F06423EKE": {"core": "Cortex-M0", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0642.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0642.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TLE9873QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9873.FLM": {"default": "1", "ramsize": null, "size": "0xC000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100AFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0xAFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM342FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM342_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00009000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F439IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "TMPM380FYDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32H743II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "TLE9845QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9845.FLM": {"default": "1", "ramsize": null, "size": "0xC000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xB000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG942F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG942F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG942F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK64FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK64F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG210F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG210F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NANO130SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9BF429S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF42xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "GD32F407IE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TLE9867QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "M452VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM4F122H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F122H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC200SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32LG330F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG330F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1778": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM4F122H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F122H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F411RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1774": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1777": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1776": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F411CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L100R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC240SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "S6E2C29H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG390F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG390F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5752": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5752.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M4TKVG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NM1120XB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "Mini54ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "MT2523x": {"core": "Cortex-M4", "vendor": "MediaTek:129", "algorithm": {"tools/keil/mt2523/2523_32M_MXIC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00400000", "ramstart": "0x04008000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://download.labs.mediatek.com/MediaTek.MTx.4.5.0.pack", "compile": {"header": "driver/CMSIS/Device/MTK/mt2523/Include/mt2523.h"}, "pdsc_file": "http://download.labs.mediatek.com/MediaTek.MTx.pdsc", "memory": {"IRAM1": {"start": "0x00000000", "size": "0x00400000"}, "IRAM2": {"start": "0x04008000", "size": "0x00020000"}, "IROM1": {"start": "0x08000000", "size": "0x00400000"}}, "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "208000000"}}, "S6E2DH5GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC11A12FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "ATSAMD21G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F479AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F378VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA1J14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1J14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "LM4F111E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F111E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMDA1J14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1J14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "TMPM373FWDUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M373.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M058LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F469BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1346FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S2412": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2412.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F401VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "MK30DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ARMv8MML_DSP_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "TMPM067FWQG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M067.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC220LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32TG822F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG822F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TM4C129XNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129XNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S6637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK51D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMR21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F108F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1201-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C58J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M2S050": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "S6E2C3AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L486JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F407VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32G880F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G880F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F407VE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MCIMX7D2": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D2_A7.svd", "processor": {"fpu": "SP_FPU"}}, "MCIMX7D5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "MCIMX7D7": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D7_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NANO112LB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFM32LG895F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG895F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG990F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG990F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG990F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1201-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG980F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG980F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAME70J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAME70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "TLE9842QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9842.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x800"}, "IROM1": {"start": "0x11000000", "size": "0x8000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LPC1317FBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC131LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F479AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC4088FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC130LE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F100RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NM1120TB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAML22G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1100-T016x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F479ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F100RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "M452RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32F100RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAMA5D35": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D35.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAM3U1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x20080000", "size": "0x00002000"}, "IROM1": {"start": "0x00080000", "size": "0x00010000"}}, "debug": "SVD/SAM3U/ATSAM3U1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "TM4C1231H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMA5D36": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D31.svd", "processor": {"fpu": "DP_FPU"}}, "GD32F450VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S2911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F038C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG895F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG895F1024"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG895F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F450VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F450VE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EZR32WG330F128R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32FG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LPC11U12FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F412RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M052ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F469ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F479II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F479IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1114FDH28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F469ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC442KG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "EFM32G290F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G290F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1232D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1232D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "Mini55TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC844M201JHI48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "NM1200ZBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F423VH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L433CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK22FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4CMS16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F190T4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L152VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F190T6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "M052ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F190T8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC230SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV71N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV71N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EFM32LG990F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG990F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF112N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L432KB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L432xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L432KC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L432xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK11DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L051K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L081CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L081xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL28Z512xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_KL28.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MKL28Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF112R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM368FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M368.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11C22FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MKS22FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKS22F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF314N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32LG230F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG230F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1538": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1538.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO102SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "NUC472VI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "S6E2C38H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NM1120FC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "XMC1302-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1100-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4104-F64x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF314R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMC20G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG942F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG942F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK50DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAMD21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Mini52LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "ATSAM4SD32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4SD32C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SD32B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4SD32B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L443RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F302ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG900F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG900F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG900F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F706J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F112E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F112E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG942F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG942F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2DH5G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG840F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG840F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF105N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M451MRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ATSAMD09D14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD09_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMD09\\Include\\samd09.h", "define": "__SAMD09D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD09\\ATSAMD09D14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM367FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F150R6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F150R4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L476ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F228F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F220_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F220"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x3FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L476ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F100ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "M451YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "GD32F150R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5D56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5791": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5791.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF464K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1937": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1937.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F121H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F121H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF464L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG890F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG890F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG980F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG980F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "TM4C123FH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123FH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F210E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F210E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1114FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C1AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC11E67JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L151C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC4315": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4317": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4310": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "ATSAM3S2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM4F232H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC4313": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "ATSAMD21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2B93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2b93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F756VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S1968": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1968.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF528T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF52xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MB9BF528S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF52xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "EFM32G880F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G880F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1823EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MK22FN512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}, "Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F51212.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151UC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC140VE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M451MRD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L462VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF341L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF341M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF341N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF465K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC1224FBD48/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LPC11E11FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC126VG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MVF62NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF62NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "MB9BF406R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF112N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F101CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F102CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF406N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M0518SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1225FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LM3S5P36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5P31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C18H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NANO120LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "EFM32G842F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G842F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F413RH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32JG12B500F512GL125": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F512GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F512GL125.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC120RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO100SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "S6E2C19L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAME54P19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME54P19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKL02Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M452SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "Generic_NUC400_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "TM4C1294KCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C1294KCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1402-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F401RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "EFM32GG840F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG840F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG840F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M451MLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFR32BG12P332F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P332F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P332F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S1P51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1p51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F707BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4700-F144x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9BN2": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2HE4G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L431KC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L431KB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9BN6": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC100VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "Generic_NUC200_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F051T8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1120EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMDA0E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMv8MBL": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MBL/Include/ARMv8MBL.h", "define": "ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "Mini52TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "XMC1301-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G200F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32G/EFM32G200F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO120SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "SN32F765J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD51J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKW21D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S5P3B": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5632.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1768": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1769": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F101C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM366FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML22G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1763": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "Mini52FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "STM32F101C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LPC1766": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1767": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32GG380F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG380F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG380F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1765": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S5747": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5747.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "CMSDK_CM7_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7_DP.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32L475JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC220SE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC11U35FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F378CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5749": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5749.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF467M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC1785": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1786": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1787": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM3U2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x000020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x000004000"}, "IRAM2": {"start": "0x20080000", "size": "0x000004000"}, "IROM1": {"start": "0x00080000", "size": "0x000020000"}}, "debug": "SVD/SAM3U/ATSAM3U2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32L063R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L063xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L063x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C48J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1788": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "XMC4200-Q48x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4200_4100_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4200_series/Include/XMC4200.h", "define": "XMC4200_Q48x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x5FC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4200.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F439ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMHA1G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_16_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000200", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000200"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "N572F072": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\N572F072_v3.svd", "processor": {"clock": "48000000"}}, "MCIMX7U5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/MCIMX7U5_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7U5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NUC121ZC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MCIMX7U3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/MCIMX7U5_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7U3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "STM32L071RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F121C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F121C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG940F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG940F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F131H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F131H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L071RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM376FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M376.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32H743VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "STM32L471RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC100RE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L471RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC240SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F091CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC442KI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "LPC11U34FHN33/311": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_40.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xA000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xA000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC220LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9AFB41N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB41M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB41L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L162VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F412CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F412CG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32LG980F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG980F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L052K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1114FHN33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L052K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32LG230F64R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F030C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123BE6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123BE6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM367FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11C24FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1347FBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG360F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG360F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L100C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L071V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C123BE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123BE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32HG350F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG350F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG350F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F215VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F215VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S1F11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1f11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF102R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK65FX1M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/MKD256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK65F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM4LS8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC812M101JDH16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "M452VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF315N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F479ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF315R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9AF312K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32HG321F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG321F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG321F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF102N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC11E14FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U67JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMC20G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32PG12B500F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF104R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1233H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK20FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK20F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451MLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32F778AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC120RD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMC21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini51LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "LPC11A14FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF104N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1G21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1g21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1233H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32TG230F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG230F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L053C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMR21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC43S37": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "S6E2D55GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L053C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC43S30": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "TM4C1231H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32W108CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32W108CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F756IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TM4C1231H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK10FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK10F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F413CG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32LG230F64R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32FG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F207VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMC20J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F207VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMV71N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMV71N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMV71N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV71N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ARMCM7_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "TMPM372FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M372.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG890F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG890F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM380FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM4F231E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F231E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM3N1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9879QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L021K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM368FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M368.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F301C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK21DX128Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F301C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "S6E1A11B0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A11X0A.FLM": {"default": "1", "ramsize": null, "size": "0xE000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F103VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAM4LC8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3748": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3748.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM4LC8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF321K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM037FWUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM03x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM037.h", "define": "TMPM037FWUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M037.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MKL26Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2GK6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gkxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F437ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L151ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKV42F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F437ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMC21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1517JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "NUC120LD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "S6E2H14F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC1403-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54606J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "EFM32TG110F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG110F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1237E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1237E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M0518SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMC21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6X4": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LPC1112FDH28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6X1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MCIMX6X2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MCIMX6X3": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "S6E2D35GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32G232F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G232F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1200TBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1401-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C5AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F103ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMC20N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20N/ATSAMC20N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF512R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S3634": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3634.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC230SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TM4C123AE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123AE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2GM6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gmxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L051T6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2GM6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gmxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L151R6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F427ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Mini51LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "STM32F103V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF512N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F427ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S1850": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1850.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG280F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG280F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC20N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20N/ATSAMC20N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4320": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4323": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4322": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4325": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F302CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG880F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG880F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F1654": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0xFC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F1655": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F1656": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x3FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO110SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "EFM32GG940F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG940F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG940F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "nRF51422_xxAC": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "HT32F1653": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA0E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5K31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5k31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD51J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAMD51J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32F777VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "Mini57TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG880F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG880F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32FG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ADSP-CM419F-BCZ_M4": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/CM41x_FlashB_512.FLM": {"default": "0", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11080000"}, "Flash/CM41x_FlashA_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M4_DFP.1.0.0.pack", "compile": {"header": "Device/inc/M4/CM41x_M4_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M4_DFP.pdsc", "memory": {"IROM2": {"start": "0x11001000", "size": "0x000FF000"}, "IRAM1": {"start": "0x10000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20010000", "size": "0x00018000"}, "IROM1": {"start": "0x11000000", "size": "0x00001000"}}, "debug": "SVD/CM41x_M4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "240000000"}}, "LM3S5G56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1404-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E37HFBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADSP-CM419F-BCZ_M0": {"core": "Cortex-M0", "vendor": "Analog Devices:1", "algorithm": {}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M0_DFP.1.0.0.pack", "compile": {"header": "Device/inc/M0/CM41x_M0_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x200F0000", "size": "0x00008000"}}, "debug": "SVD/CM41x_M0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F446VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "SN32F227F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F220_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F220"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x3FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F446VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F412RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM367FWXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M451RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NUC200SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F245J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3A4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3A8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3A4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "ATSAMD11C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD11\\ATSAMD11C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F229F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F220_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F220"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x3FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG895F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG895F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "Z32F12811ARS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F1281.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F1281.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F1281.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C28J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F417ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LPC4072FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC11E36FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3S2B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "NUC120RD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32TG232F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG232F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C59H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HT32F1251": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F1252": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F1253": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x7C00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32TG225F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG225F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF465L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "Mini51TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "ATSAM4CMP32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM32/Include/sam4cm32.h", "define": "__SAM4CMS32C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4CM32/ATSAM4CMP32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M058LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F302C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32PG1B200F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "XMC1402-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5C31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F302C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF566K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TM4C129LNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129LNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM462F10XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L071CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4400-F100x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4400_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1301-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2DF5J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TMPM370FYDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM370_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M370.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32GG395F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG395F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG395F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F058R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L071CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32LG230F64R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F64R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123GE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG230F64R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M485KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TLE9867QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "LM4F131E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F131E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG230F64R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO112VC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "NM1820EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TM4C123GE6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123GE6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C29J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAM4LC2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG895F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG895F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC20E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L433RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG880F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG880F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK40DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "SKEAZN16xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": null, "size": "0x00000100", "ramstart": null, "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "NANO110KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9AF311K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM366FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG840F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG840F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ARMv8MML_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "M451MRC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "Mini58LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L071C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S2776": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2776.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M052LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M052LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M0519SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC131SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMD10D13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD10\\ATSAMD10D13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4088FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKL04Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G280F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G280F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F773S": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F773T": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G210F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G210F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G210F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MAX71637": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "MAX71636": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "STM32F030CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG840F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG840F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG840F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM440F10XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM440_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM440.h", "define": "TMPM440F10XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Configurable", "clock": "100000000"}}, "LM4F111B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F111B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD11D14AM": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11D14AM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE18F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE18F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD11D14AS": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11D14AS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429NE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMC21N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21N/ATSAMC21N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M0519VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TM4C1294NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1294NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF314L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC11A04UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO120KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAME51J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAME51J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "TM4C129CNCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129CNCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1403-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F122E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F122E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S9L71": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9l71.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "Z32F12811ATS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F1281.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F1281.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F1281.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG380F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG380F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54102J512BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAMS70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LPC11U35FET48/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "AC33MA384A": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33MA384A/Flashloader/AC33Mx384A_384.flm": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33MA384A\\Core\\include\\AC33Mx384A.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33MA384A\\SVD\\AC33Mx384A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "M0564LE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32HG308F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG308F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG308F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1549JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M052ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L151RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3X4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3X4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "LPC11E67JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SKEAZ128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P128KB.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/SKEAZ1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32GG890F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG890F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG890F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123SC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M481LGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMD21G18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2G28J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g2xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F732VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL16Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1302-Q024x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32WG330F64R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G230F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G230F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG222F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F078CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3826": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s3826.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L471QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKE02Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L471QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC43S20": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NANO100LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFM32LG980F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG980F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F405ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S9B95": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b95.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F405ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S9B96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9B90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32G230F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G230F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK21DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L051R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4108-Q48x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L051R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F303RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F048G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U67JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F303RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA0G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152VBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKM33Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM33Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF114R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "PAC5250": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2H46F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF114N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "S6E2D35J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG895F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG895F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG880F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG880F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG880F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM461F10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM461_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M461.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L452VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32HG222F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG222F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG222F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC54616J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "ATSAME70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAME70Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32L452VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9GN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9gn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1231C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1231C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF312N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32JG1B100F256GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F256GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "EFM32TG825F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG825F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F469NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F303R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "M0516LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF312R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F303R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NUC230RC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F469NE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32LG890F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG890F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F722ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC1224FBD64/121": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "XMC4104-F64x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1302-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F722ZC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMDA0J14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1224FBD64/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "STM32F746VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M451MSD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "GD32F130K8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F407ZE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F407ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TMPM365FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM365_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M365.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5G31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "CMSDK_CM0plus": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM0plus/Include/CMSDK_CM0plus.h", "define": "CMSDK_CM0plus"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM0plus.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "GD32F130K6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130K4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1510LC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC54S616J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "STM32F302R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L073VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F302R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C129DNCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129DNCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F246J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6Y1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6Y0": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32L073VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F427II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F779NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F427IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F072CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF524K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK40DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF524L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF524M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF466N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMR21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5B91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5b91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC505DL13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "NM1820ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF466R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG995F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG995F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC442VI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "EZR32WG330F256R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4C16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}, "Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK21FN1M0xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MK21FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG995F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG995F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM381FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM381_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M381.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L151V8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L476JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG842F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG842F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME54N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME54N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "ATSAME53N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME53N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "TM4C123GH6ZRB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6ZRB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG220F32R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF164K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F072C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123ZD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32GG232F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG232F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG232F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L073V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMC21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD10C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD10\\ATSAMD10C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120VE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF116T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAM4SA16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SA16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SA16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SA16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F302RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MK40DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG290F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG290F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG290F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4800-E196x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F030K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM34Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM34ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC125LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF568M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC845M301JBD48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "MB9BF404R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C4AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9BF404N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4800-F100x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9DN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9dn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11E12FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2G36J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g3xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2G36H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g3xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MKM14Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM14Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC120RD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F758F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1958": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1958.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "M4LEDLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32WG842F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG842F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "nRF51802_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "STM32L475ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKV10Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P128_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV10Z1287.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "DS_CM3": {"core": "Cortex-M3", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_DSx_BSP.1.0.0.pack", "compile": {"header": "Device/DS_CM3/Include/DS_CM3.h", "define": "DS_CM3"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_DSx_BSP.pdsc", "memory": {}, "debug": "SVD/DS_CM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "MB9BF428T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF42xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "LPC4330": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "SN32F774T": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F217VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F774S": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F411VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ARMv8MML_DSP_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MKL04Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1231D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1231D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F132H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F132H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F132H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F132H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F051R4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F415OG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F051R6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA0E14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F767NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKV46F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV46F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F358VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32G200F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G200F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F051R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U24FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1225FBD64/321": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_80.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x14000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x14000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LM3S8738": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8738.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "nRF51824_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "MKV10Z64xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV10Z1287.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "STM32F038K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S8733": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8733.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L152C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF366R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9AFA44N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "M452LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32TG840F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG840F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4800-F144x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "NANO100SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LM3S8933": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8933.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NM1823ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S8930": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8930.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C19J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32WG232F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG232F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC123SD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "TM4C129ENCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129ENCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1345FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1403-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MCIMX7S5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7S5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "STM32F205VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG232F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG232F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MCIMX7S3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7S3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "ATSAM3U4E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128_B1.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00100000"}, "Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00100000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U4E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M451VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M052ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1112FHI33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHI33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM4050": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM4x50.FLM": {"default": "1", "ramsize": null, "size": "0x7F000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/ADuCM4050/Releases/AnalogDevices.ADuCM4x50_DFP.1.0.0.pack", "compile": {"header": "Include/ADuCM4050.h", "define": "__ADUCM4050__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/ADuCM4050/Releases/AnalogDevices.ADuCM4x50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x7F000"}}, "debug": "SVD/ADuCM4050.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "52000000"}}, "LPC54607J256BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "EZR32HG220F64R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NM1100FBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32HG220F64R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F64R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1850": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "SN32F236J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32HG320F32R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "CMSDK_CM4": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM4/Include/CMSDK_CM4_FP.h", "define": "CMSDK_CM4_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "EZR32HG220F64R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F64R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "CMSDK_CM0": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM0/Include/CMSDK_CM0.h", "define": "CMSDK_CM0"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM0.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "TLE9861QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9861.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x11007FFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0x7FFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MK30DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "CMSDK_CM3": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM3/Include/CMSDK_CM3.h", "define": "CMSDK_CM3"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "MB9BF416T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "GD32F450IG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32PG1B100F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "GD32F450IK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M058LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F450II": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG900F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG900F256"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG900F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF121K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF121J": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B120J_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xJ.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG290F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG290F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKV31F128xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV31F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC140RD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF121L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1401-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MK10FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK10F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF416R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM4F130C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F130C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F469BE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3N00B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00400000", "size": "0x00004000"}}, "debug": "SVD/SAM3N/ATSAM3N00B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N00A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00400000", "size": "0x00004000"}}, "debug": "SVD/SAM3N/ATSAM3N00A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "S6E2G38H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g3xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2G38J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g3xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2HG4G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2HG4F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC54S618J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "NM1820LB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC4108-F64x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5762": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5762.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKW41Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW41Z4.h", "define": "MKW41Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW41Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F102R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F038F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMS70J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMS70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "NANO100VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "M481SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32ZG210F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC4800-F144x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32WG942F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG942F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1112FHN33/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHN33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG290F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG290F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F303CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MK24FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK24F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1225FBD48/321": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_80.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x14000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x14000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "ATSAME54N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME54N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32L051C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32WG330F64R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MKL15Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "M2S005": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "LPC11U34FBD48/311": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_40.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xA000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xA000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM374FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M374.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E1A12B0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A12X0A.FLM": {"default": "1", "ramsize": null, "size": "0x16000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x16000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32TG230F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG230F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1403-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC43S57": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC43S50": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F429BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC140LD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9AF141M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC4500-F144x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F767VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1202-T016x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F413MG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M452VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L485JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L485xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F413MH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAM3S1B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32L443CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32WG330F128R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKE02Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFE00", "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EZR32WG330F128R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F100ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F303C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAME51J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME51J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EZR32WG330F128R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKE14F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE14F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG390F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG390F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GH6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F091RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4088FET208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMV71Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV71Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F102RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G890F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G890F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S2276": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2276.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKL02Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2678": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2678.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1233C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1233C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1346FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM475FYFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC54S616J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "TLE9844-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9844_2.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xF000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F103TB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4700-F100x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "ADuCM320i": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM320i.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M0516ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LPC1517JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32TG232F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG232F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F072RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2CC9L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F150C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "AC33M6128": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx128/Flashloader/ac33m8128_PFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33Mx128\\Core\\include\\AC33Mx128.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx128\\SVD\\AC33Mx128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LPC1343FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2GK8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gkxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11A12FBD48/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L072CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32JG1B200F256GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "GD32F150C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L152V8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F415RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32LG895F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG895F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L072CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F071VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF565K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NUC120LD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO100NE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9AF344N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF344M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF344L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NM1120DC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "nRF51822_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F410T8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TLE9877QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF322L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF322M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC100VD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ISD9360": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "M4TKLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MKL46Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL46Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F071V8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L062K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L062xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L062x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM361FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32HG110F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG110F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFR32BG12P332F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P332F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P332F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MKL24Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL24Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2620": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2620.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S3654": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3634.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U14FET48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S3651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M485SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "HT32F1251B": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA0G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F479VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF115R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAME70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F103T4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5U91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5u91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H46E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F103T8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F437VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F101R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "S6E2DH5J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F101R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LM3S1651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM330FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F437VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11A02UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54S608J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "NUC122ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "NUC131LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TMPM384FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M384.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA41N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO120ZD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "MB9AFA41L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC11C12FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L031G6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L031G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C2AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M453LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MK53DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK53D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1104UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC1102_04.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F205RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F225J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F220_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F220"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x3FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L073CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L011G3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1114LVFHI33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD51N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "NUC130RE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32GG995F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG995F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG995F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F410RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S9792": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9792.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG880F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG880F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM366FWXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F437II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM4SP32A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4SP_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4SP/sam4sp.h", "define": "__SAM4SP32A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4SP/ATSAM4SP32A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG980F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG980F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG980F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK12DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F415ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MB9AF156R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1316FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK60FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK60F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC11U14FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SN32F247F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1827YB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L162RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L162RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F051C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L162RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32HG310F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG310F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG310F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAMR21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF467R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F103ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C123GH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F051C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "MB9AF104R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F101RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM068FWXBG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M068.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Z32F06410AKS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0641.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0641.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0641.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM330FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F429AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "AC33M8128": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx128/Flashloader/ac33m8128_PFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33Mx128\\Core\\include\\AC33Mx128.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx128\\SVD\\AC33Mx128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32H753ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EFM32WG360F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG360F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F768F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK80FN256xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK82F25615.h", "define": "MK82FN256xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK80F25615.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "NANO100SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "TM4C1297NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1297NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F745IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F745IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "IOTKit_ARMv8MBL": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_ARMv8MBL/Include/IOTKit_ARMv8MBL.h", "define": "IOTKit_ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "NUC200SE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MK20DN128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC824M201JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "EFR32FG12P431F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P431F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P431F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NANO100SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "M451YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32F777ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM343FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S815": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s815.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L475VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMG51N18": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG51\\samg51.h", "define": "__SAMG51N18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD\\SAMG51\\ATSAMG51N18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG230F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG230F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3N26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s3n26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC120LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG890F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG890F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG942F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG942F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C129CNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129CNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMC20E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120SD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "STM32L151RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F103RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC100VD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF405R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F107RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "M4TKVE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L082KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L082xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F107RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C28H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9AF156N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "SKEAZN32xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "SN32F759F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF405N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L082KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L082xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1115FET48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F358CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AFA31N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TMPM362F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M362.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32LG842F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG842F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG280F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG280F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAM4S16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4S16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMG54J19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54J19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "NUC472HG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "EFR32BG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EZR32HG220F64R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF429T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF42xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "M052LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F378RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NUC100RE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L152R6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M481SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC100LD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKV58F1M0xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P1024_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x2F000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00100000"}}, "debug": "SVD/MKV58F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "HT32F52220": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO120ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "AC33GA256": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33GA256/Flashloader/AC33GA256_CDFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33GA256\\Core\\include\\AC33GA256.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33GA256\\SVD\\AC33GA256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "16000000"}}, "EFM32JG12B500F1024IM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F512GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024IM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32TG842F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG842F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11A11FHN33/001": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1435": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005C00"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1435.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "CMSDK_ARMv8MML_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML_DP.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "25000000"}}, "TMPM341FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM341_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "54000000"}}, "S6E2C2AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG360F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG360F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL33Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL33Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F217IE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F217IG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG350F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG350F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG350F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini54TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "TM4C123AH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123AH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H46G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2C39H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NM1320LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1320_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1320_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1320_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NM1320AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO103SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1202-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4800-E196x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM364F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M364.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ARMCM7_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "LPC812M101JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F413RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F038G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100RD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC120VD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MK20DN64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C3AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L053R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L053R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1549JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M0564RE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F450ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F091CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F450ZI": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F405OE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MKL43Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMHA1G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000800"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG222F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG222F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F450ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F450ZE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M2S010": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "XMC1302-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "nRF51801_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x30000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "NUC240VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L475QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK70FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK70F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MK70FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK70F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG295F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG295F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2G26J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g2xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L072RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF321M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF321L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM4F110C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F110C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L475QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK20DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F417VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "NANO120LC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MKE02Z64xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TM4C1236H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1236H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1112FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F767VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC1112FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F301R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC824M201JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F301R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L072RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAME51N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME51N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32L051T8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF116S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF116R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC54101J512UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "S6E1A12C0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A12X0A.FLM": {"default": "1", "ramsize": null, "size": "0x16000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x16000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32MG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P232F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG332F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG332F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "STM32L152RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Mini52LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "NUC240SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC54114J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54114_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32GG295F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG295F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG295F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM333FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EZR32LG330F128R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF218S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF218T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF116N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32H743BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "MB9AF131N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S610": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s610.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F423CH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC126LE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32TG825F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG825F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKE02Z32xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32L152R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M0519LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F706BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F303C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG995F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG995F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG995F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1232C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1232C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MVF50NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NN151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMC20J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E68JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2D55GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM3X4E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3X4E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "LPC4078FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M0518LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F031K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F031K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32HG108F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG108F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG108F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ARMCM4_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM4/Include/ARMCM4_FP.h", "define": "ARMCM4_FP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM4.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "NANO112SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "AC30M1332": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L162VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S9DN6": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9dn6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4S2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "NANO120KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "TMPM37AFSQG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M37A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF118S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF118T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC4078FBD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F058C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F746VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F031E6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC200LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S6633": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6633.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFM32GG380F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG380F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG380F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54102J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF121M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKE18F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE18F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG990F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG990F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C38L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG995F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG995F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120RD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F170R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF141N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F469NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9AF141L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L021F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F429BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3S1A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LPC54606J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "ATSAM3S1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "MKL26Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F100V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NANO120VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "N572F065": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\N572F065_v3.svd", "processor": {"clock": "48000000"}}, "LPC844M201JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "S6E2H44F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F105V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L4A6ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H44E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC54113J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MT7687F": {"core": "Cortex-M4", "vendor": "MediaTek:129", "algorithm": {"tools/keil/mt7687/7687_32M_MXIC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://download.labs.mediatek.com/MediaTek.MTx.4.5.0.pack", "compile": {"header": "driver/CMSIS/Device/MTK/mt7687/Include/mt7687.h"}, "pdsc_file": "http://download.labs.mediatek.com/MediaTek.MTx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x00100000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00200000"}}, "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "192000000"}}, "MKW35Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW35Z4.h", "define": "MKW35Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW35Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO103LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG395F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG395F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NM1200LBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC11E36FHN33/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1301-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMC21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L031F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO120KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32L031F6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "BlueNRG-1": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STBlueNRG1.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x28000", "ramstart": "0x200002CC", "start": "0x10040000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STBlueNRG_DFP.1.1.1.pack", "pdsc_file": "http://www.keil.com/pack/Keil.STBlueNRG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x10040000", "size": "0x28000"}}, "debug": "SVD/BlueNRG1.svd", "processor": {"fpu": "0", "endianness": "Little-endian"}}, "MCIMX7D3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.6.1.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NANO120SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "MB9BF564L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO100ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "MB9BF564K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "M054ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9AFA31M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AFA31L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF156M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "R-IN32M3-EC": {"core": "Cortex-M3", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M3_S25FL064P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29AL032D.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/R-IN32M3_S25FL032P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.1.3.0.pack", "compile": {"header": "Device/Include/RIN32M3.h", "define": "RIN32M3_EC"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M3_EC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "AC33M4064": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx064/Flashloader/AC33Mx064_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33Mx064\\Core\\include\\AC33Mx064.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx064\\SVD\\AC33Mx064.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TM4C123BH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1402-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F398VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4800-F100x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "MKL14Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL14Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE02Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32PG1B200F256IM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256IM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "NUC122LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "STM32H753II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "TM4C1299KCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C1299KCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F756J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AF312L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF312M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF312N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO130SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "HT32F1755": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x1FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "Mini54XFHC": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKW20Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW20Z4.h", "define": "MKW20Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW20Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100RD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L052T8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1224FBD48/121": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "TM4C1233E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1233E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC4350": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F767BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC4353": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NANO102LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "LPC4357": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "EFM32LG940F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG940F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1233E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKV42F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LPC54101J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4502-F100x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F767BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NM1100FAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TMPM343F10XBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV42F64xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP64_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MKM14Z64Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM14ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F401VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LPC54616J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "STM32F423MH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MKL34Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL34Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6G1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G0": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G3": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC4327": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "MB9BF366K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NUC505YLA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "S6E2C58L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MKS20FN128xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKS20F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "LM4F120H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F120H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1138": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1138.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AFA42N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA42M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK60FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK60FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "EZR32LG230F64R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK21DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1133": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1133.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U67JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "APOLLO512-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32G842F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G842F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK50DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F030F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCM23": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM23/Include/ARMCM23_TZ.h", "define": "ARMCM23_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "QN9083A": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xA_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908X.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F769AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "QN9083C": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xC_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XC.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F769AG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC845M301JBD64": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAMC20G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG842F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG842F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1403-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MKV56F512xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P512_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00080000"}}, "debug": "SVD/MKV56F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "NANO120LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "LM4F211E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F211E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U35FHI33/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK51D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F745VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F745VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32JG1B200F128GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F128GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "STM32F217ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F217ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S2533": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2533.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F733IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32LG395F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG395F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL26Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM367FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F110E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F110E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK61FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK61F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L471VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK61FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK61F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "LM3S1R21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1r21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAML21J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21J16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG942F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG942F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG942F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK28FN2M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x1FFC0000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK28F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "LPC11U34FBD48/421": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK10DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MCIMX6Y2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EFR32BG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32HG322F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG322F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG322F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AFA42L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "M452LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32ZG210F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC220VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1100-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C48L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC4402-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32ZG210F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini51FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "ATSAMC20E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G232F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G232F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1F16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1f16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4402-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C4AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMG51G18": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG51\\samg51.h", "define": "__SAMG51N18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD\\SAMG51\\ATSAMG51G18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L083VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G280F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G280F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F231H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F231H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM073FSDUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M073.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F405ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32ZG210F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32HG308F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG308F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG308F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32GG940F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG940F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG940F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "AU9110LF3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/AU9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}, "Flash/AU9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/AU9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAM4LS4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123SD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ATSAM4LS4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1547JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "STM32F469AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L083VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG230F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG230F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG230F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4104-Q48x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO100KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "NANO103ZD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1225FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "TMPM332FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M332.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G230F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G230F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54607J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "MKL24Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL24Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123SC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L152C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "QN9083B": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xB_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XB.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "Mini58ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG390F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG390F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF421L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A420L\\mb9a420l.h", "define": "MB9AF421L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF42xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF421K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A420L\\mb9a420l.h", "define": "MB9AF421L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF42xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TM4C1299NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1299NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M453VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ATSAM4N8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAM4N8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4100-F64x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L162QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32PG12B500F1024IM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024IM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1313FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11A14FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG840F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG840F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54S606J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "XMC4500-F100x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1764": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2D55J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F048T6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-F064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F207ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S8938": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8938.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F207ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "PAC5220": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMA5D31": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D31.svd", "processor": {"fpu": "DP_FPU"}}, "NUC029FAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC029AE\\Include\\NUC029FAE.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NUC029AE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "PAC5223": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1120EC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1202-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKV10Z16xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P16_1KB_SEC.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x00004000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKV10Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MKW21Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW21Z4.h", "define": "MKW21Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW21Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F427VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32G280F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G280F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M453RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9AF131M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF131L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F427VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3U1E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x20080000", "size": "0x00002000"}, "IROM1": {"start": "0x00080000", "size": "0x00010000"}}, "debug": "SVD/SAM3U/ATSAM3U1E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC1313FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF131K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9BFD17S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "XMC1404-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S800": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC4078FET208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BFD17T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32TG232F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG232F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO102LB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "MKW22D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM4LC4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF567R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM4LC4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21J15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG222F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK64FN1M0VLL12": {"core": "Cortex-M4", "vendor": "Freescale:78", "algorithm": {"addon_cmsis/Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_SDK_DFP.2.2.0.pack", "compile": {"header": "platform/devices/fsl_device_registers.h", "define": "CPU_MK64FN1M0VLL12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "platform\\devices\\MK64F12\\MK64F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F446MC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC4078FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M4LEDRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MKL25Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F100VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC43S70": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "MB9BF567N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF567M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NM1330LC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1330_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1330_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1330_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1330AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKM33Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM33Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO112LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "M058SZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "M482LIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F215ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "M484SIDAE2U": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC11U23FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG995F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG995F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F215ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1111FDH20/002": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G290F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G290F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMDA0G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1313FBD48/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L452CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152QE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L452CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF117S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "M453YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L152C8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM4F110H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F110H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1114FHN33/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK22FX512Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S9D90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF617S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF617T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32H753XI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "ATSAMC20J17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20J17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C4AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1301-Q040x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Mini57FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC11U37FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F101T8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EFM32WG895F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG895F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100VE3DE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAME53J20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME53J20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "NUC100VE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L431VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32HG309F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG309F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG309F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F070F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M451VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L031E4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKM13Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM13Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L031E6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32LG280F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG280F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "QN9080A": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xA_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908X.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F446RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "QN9080C": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xC_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XC.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "QN9080B": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xB_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XB.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54102J512UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC1402-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F051C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U13FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC125SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKL43Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1512": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MB9BF518T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC11U36FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1100-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AF155N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF518S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32GG895F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG895F1024"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG895F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L031K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK30DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L031K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKM34Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM34Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32JG1B200F128GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F128GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "MKV58F512xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P512_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00080000"}}, "debug": "SVD/MKV58F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "LM3S6952": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6952.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM4CP16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4CP/sam4cp.h", "define": "__SAM4CP16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CP/ATSAM4CP16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF155R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMG55G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG55\\samg55.h", "define": "__SAMG55J19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG55\\ATSAMG55G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKL27Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL27Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC230LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMR21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF521M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MCIMX6V7": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6V7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EFM32GG880F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG880F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG880F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6V2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6V2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "M453LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF521K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF142N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF142M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF142L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L151CBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152QC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F101TB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM072FSUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M072.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NM1520RD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC4367": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "ARMCM33_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "EFM32WG330F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG330F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM372FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M372.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2CC8H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S1R26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1r26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG330F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG330F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL36Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK21DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F042K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G222F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11U35FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S2601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AFB44L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E1A11C0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A11X0A.FLM": {"default": "1", "ramsize": null, "size": "0xE000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB44N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1112FHN24/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1751": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1114FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FBD48/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ARMCM33": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ADuCM361": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCMxxx_128.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x20000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM36x_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\ADuCM361.h", "define": "ADuCM361"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM36x_DFP.pdsc", "memory": {}, "debug": "SVD\\ADuCM361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "16000000"}}, "MKL17Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL17Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG990F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG990F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F212E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F212E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM390FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM39x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM395.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M395.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32LG290F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG290F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG280F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG280F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG280F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "N571P032": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N571E000.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\N571P032_v3.svd", "processor": {"clock": "23000000"}}, "TMPM367FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NANO130KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "M483SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L152QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5956": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5956.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F757F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MVF51NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF51NN151MK50.svd", "processor": {"fpu": "DP_FPU"}}, "LM3S5951": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5951.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF315M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK40DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF315N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G890F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G890F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MCIMX6Y7": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.4.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "XMC1404-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NUC125ZC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAM4E8E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4E/ATSAM4E8E.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32WG230F256R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4078FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK02FN128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK0x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K00_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK02F12810.h", "define": "MK02FN64xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K00_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK02F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM4F112C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F112C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U24FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F102C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF124M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG232F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG232F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCA9": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCA9/Include/ARMCA9.h", "define": "ARMCA9"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "EFM32TG842F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG842F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32LG332F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG332F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32PG1B200F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "STM32F102C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME53J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME53J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32GG900F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG900F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG900F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini55LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M481LIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1201-T028x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1100-Q024x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F415VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "Z32F06423AKE": {"core": "Cortex-M0", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0642.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0642.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF305N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F746ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F746ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TM4C1230H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1230H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK20DX32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC822M101JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "NUC130VE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S5737": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5737.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV31F512xxx12": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKV31F51212.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4N16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4N/ATSAM4N16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1111FHN33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG840F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG840F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG230F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG230F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK66FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK66F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFR32FG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC123ZC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM4F122C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F122C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC21G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCA7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCA7/Include/ARMCA7.h", "define": "ARMCA7"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "TMPM361F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "MVF50NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NS151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "LPC11U34FHN33/421": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKE15Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE15Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1201-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK22FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MVF60NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "S6E2C18J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1115JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1402-Q048x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9843QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9843.FLM": {"default": "1", "ramsize": null, "size": "0xC000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xB000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "EFM32ZG222F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F413VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAML21J17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21J17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG222F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32LG230F256R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S9B92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "CMSDK_CM7_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7_SP.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "MB9AF116N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF116M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC220LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO110RE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MK12DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F779AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F756BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11E14FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC230LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F098CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM36BFYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM365_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M36B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "PAC5210": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC126RE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFR32MG12P332F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P332F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P332F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MKW24D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW24D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMV71Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV71Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMV71Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMV71Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EZR32WG230F64R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF616S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F303VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MK70FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK70F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MK70FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK70F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F303VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF616T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "nRF52832_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf52.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32WG230F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG230F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1403-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F410C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF618T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC120RE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L452RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1342FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L452RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF618S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAME51N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME51N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LPC11E68JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F469BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK10DX32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32LG995F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG995F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC230LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32JG1B100F256IM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F256IM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "EFR32BG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB44M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM366FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1403-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "M452RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ATSAM4E16E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4E/ATSAM4E16E.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "ATSAM4E16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4E/ATSAM4E16C.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1547JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32G800F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G800F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G800F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC43S67": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "TM4C1232H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1232H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F105RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO120SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9AF154M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF154N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO102ZB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "ATSAM4S4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC54608J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "TM4C129ENCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129ENCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG110F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG110F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG110F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "AC30M1464": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NM1530VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L081KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L081xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F031G4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F031G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF154R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMD11C14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11C14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GH6ZXR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6ZXR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4C32E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C32/sam4c32.h", "define": "__SAM4C32E_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4C32/ATSAM4C32E_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4C32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C32/sam4c32.h", "define": "__SAM4C32E_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4C32/ATSAM4C32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKW40Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW40Z4.h", "define": "MKW40Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW40Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L073RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L021D4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "version": "0.1.0", "STM32L073RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M453VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32WG980F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG980F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1114FHN33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BFD18S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1114FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG295F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG295F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG295F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BFD18T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKL33Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL33Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110RD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAMD20J14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20J15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BFD16T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S2D93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s2d93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F131C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F131C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1332": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1332.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Mini51XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BFD16S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMD20J17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK11DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD21J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1520RC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMD21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2HE6G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF506N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1233D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1233D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF506R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAML21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21E17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21E17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC21J18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21J18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1519JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MB9BF566L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG230F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG230F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6610": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6610.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MKE04Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE04Z1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L476RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ARMCM0P": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM0plus/Include/ARMCM0plus.h", "define": "ARMCM0P"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0P.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MB9BF329T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF32xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "STM32F429NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM4C4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4C_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C4C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C49J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9AF314N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S1751": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1751.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK60DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9AF314M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK11DX128Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC4504-F100x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L431CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L431CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG390F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG390F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4337": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32L151CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF428S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF42xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "XMC1404-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11A13FHI33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F232E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F232E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M452LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L475ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "Mini54XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F239F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC4370": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "EFM32TG210F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG210F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F705BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ADuCM320": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM320.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L041K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO130KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9BF105R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF568R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC1100-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1233H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L151C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F268F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112LVFHI33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9BF568N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F358RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F217VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MKL13Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL13Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMSC300": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMSC300/Include/ARMSC300.h", "define": "ARMSC300"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMSC300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F765BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L151C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK30DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "M451RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "TMPM380FWDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA44M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA44L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC4076FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1404-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML22J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMDA1G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1G16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1G16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "TM4C129EKCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C129EKCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L486QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2GM8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gmxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469AE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK10DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NUC442JI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "TMPM367FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L011K3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC100LE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L011K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG210F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG210F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1439": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1439.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2DF5GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MK20FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK20F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L011D4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32WG940F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG940F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMHA1G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000400", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000400"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "nRF51822_xxAC": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "nRF51822_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F412ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32WG230F256R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21G18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F765NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32WG230F256R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKL82Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL82Z7.h", "define": "MKL82Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFA000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL82Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC18S10": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32PG1B200F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "STM32F205RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1810": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "NUC505DS13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "LPC1812": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1813": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1815": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1817": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L162RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L475VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L475VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L151C8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMD10D14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD10\\ATSAMD10D14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2U93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s2u93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MK61FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK61F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK61FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK61F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "NM1120TC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TMPM036FWFG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM03x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM037.h", "define": "TMPM037FWUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M036.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "NM1520LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAML22J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1231D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1231D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC4088FBD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F707F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F439NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F439NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMC20J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC130LD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM4F121B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F121B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9B81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F111C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F111C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NM1120XC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC029TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC029AN\\Include\\NUC029xAN.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC029AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "Mini54FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "LPC1124JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x08000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC112x\\LPC112x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\LPC112x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C5AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MK53DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK53D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC1402-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F091VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F091VC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG880F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG880F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L471JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MVF50NS15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NS151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "LM3S9C97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9c97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F098RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM440FEXBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM440_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM440.h", "define": "TMPM440F10XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Configurable", "clock": "100000000"}}, "STM32F767NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NANO110RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "TMPM462F15FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MVF60NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "XMC4504-F144x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM3S8B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "SVD/SAM3SD8/ATSAM3S8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32F101VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM074FSUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M074.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1302-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK20DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32LG230F256R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "Mini58TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F101VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EZR32WG230F64R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG360F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG360F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EFM32LG280F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG280F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF368R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF368M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF368N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "M2S025": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "Mini57XDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32TG840F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG840F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF304N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ADuCM3027": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM302x.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.2.0.0.pack", "compile": {"header": "Include/ADuCM3029.h", "define": "__ADUCM3029__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/ADuCM302x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "26000000"}}, "ATSAMC21N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21N/ATSAMC21N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1311FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC240LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32GG390F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG390F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG390F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M4TKRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM3S1635": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1635.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM3029": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM302x.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.2.0.0.pack", "compile": {"header": "Include/ADuCM3029.h", "define": "__ADUCM3029__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/ADuCM302x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "26000000"}}, "STM32F100VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MKW21Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW21Z4.h", "define": "MKW21Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW21Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F130H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F130H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F100VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "SN32F7651BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1313FHN33/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6950": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6950.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF304R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F103RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F439BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NANO120LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "Mini54TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "LM3S8730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F110B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F110B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9G97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9g97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C123BH6ZRB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6ZRB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMA5D34": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D34.svd", "processor": {"fpu": "DP_FPU"}}, "EFM32ZG108F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC130RC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO130KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "S6E2C5AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1201-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG330F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG330F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG330F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini51TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "EFM32ZG222F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F373C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG330F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG330F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2GM8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gmxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F072VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2G28H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g2xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAML21E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "MB9BF505R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "nRF52832_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\nrf52.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3X8E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "STM32L433VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4CMS8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9877QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMD20J18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1233D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF115N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF115M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMC20G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMD20J16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "Mini55ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F072V8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F373CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F373CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F031F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F031F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK22DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKL04Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M058SSAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F413VH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M452YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M487SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF168N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "M054LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF168M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F405VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MB9BF168R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAME70N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAME70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EFM32HG222F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG222F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F407VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "TMPM475FZFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EZR32WG230F128R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4N8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32WG332F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG332F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32H753VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EZR32WG230F128R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM383FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2D35G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F301K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1960": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1960.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L496ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L151RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M058ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F301K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L151RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M058ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F769BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9BF412R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMA5D33": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D33.svd", "processor": {"fpu": "DP_FPU"}}, "NUC123ZC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "XMC4200-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4200_4100_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4200_series/Include/XMC4200.h", "define": "XMC4200_Q48x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x5FC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4200.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32TG110F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG110F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG110F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF412N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAML22N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL16Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F769BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9AFA32L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AFA32M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AFA32N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F423ZH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAMC21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKW01Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW01Z4.h", "define": "MKW01Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKW01Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F120B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F120B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M484SGAAE2U": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S817": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s817.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472JI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "M453VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "HT32F1765": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x1FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC812M101JTB16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32L151R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM366FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM14Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM14Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF122K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF122L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF122M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAM3S4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3S4B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3S4A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3N1B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L162VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L162VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMG54G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F334C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF144M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF144L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F107VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F334C4": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5K36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5k36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1202-T028x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32GG890F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG890F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG890F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L462CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO100NC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LM3S1N11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1n11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F302K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "R-IN32M4-CL2": {"core": "Cortex-M4", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M4_MX25L6433F.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M4_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M4_DFP.1.0.1.pack", "compile": {"header": "Device/Include/RIN32M4.h", "define": "RIN32M4_CL2"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M4_CL2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F429NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC240LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F302K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "M058LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC100LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "S6E2C39L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S301": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s301.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S300": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s300.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F439AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32HG320F64R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "S6E2HE4F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MKV44F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "TM4C1236E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1236E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1316FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1114FBD48/323": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F232H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NM1120ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMD51N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "M452VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NUC123ZD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MK60DN256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NUC505DSA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "MKM38Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM38Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472HI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "TMPM369FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKV30F128xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV30F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4800-E196x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32LG395F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG395F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC4312": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NUC505YO13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "MKM33Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM33ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1825": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "SN32F755J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54628J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54628.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "LPC1820": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1823": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1822": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F205VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MK51DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK51D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S9781": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9781.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKL16Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1B21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1b21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S617": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s617.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1100-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F212H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U66JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407IK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1100-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32HG322F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG322F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG322F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM4F132C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F132C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L071K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC121SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAM3U4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128_B1.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00100000"}, "Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00100000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "MB9BF367M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF367N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F411CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC123LD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32G840F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G840F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L041F6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F042G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042G4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LPC1857": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32HG220F64R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NANO112SB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "ARMCM4": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM4/Include/ARMCM4_FP.h", "define": "ARMCM4_FP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMCM7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMCM0": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM0/Include/ARMCM0.h", "define": "ARMCM0"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMCM3": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM3/Include/ARMCM3.h", "define": "ARMCM3"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "LPC1853": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32G840F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G840F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1N16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1n16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMC21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F723VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC845M301JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "CMSDK_CM7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32L151R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF505N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG380F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG380F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM14Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM14ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2CCAH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L071KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC442JG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "S6E2GH8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2ghxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ADSP-CM419F": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/CM41x_FlashB_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11080000"}, "Flash/CM41x_FlashA_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM4xx_DFP.1.2.0.pack", "compile": {"header": "Device/inc/M0/CM41x_M0_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM4xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x11080000", "size": "0x00080000"}, "IRAM1": {"start": "0x200F0000", "size": "0x00008000"}, "IRAM2": {"start": "0x10000000", "size": "0x00010000"}, "IROM1": {"start": "0x11000000", "size": "0x00080000"}}, "debug": "SVD/CM41x_M4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L071KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC18S57": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MKL36Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "EZR32LG230F128R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F128R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6537": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6537.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9997": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9997.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F746NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32LG230F128R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746NE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11E68JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L072VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC844M201JBD48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "LM3S2110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MB9AF114L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L072VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AF114N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK40DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NANO100KC3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAM3N1A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA1E14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1E14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F103C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKL26Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F211H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F211H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG840F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG840F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKV11Z64xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV1x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV11Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32G890F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G890F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L083CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M054LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM4F230E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F230E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54101J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L083CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F769F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SKEAZ64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P64KB.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SKEAZ1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "XMC1402-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F373R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1302-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54113J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F373RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F373RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F101V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LPC54618J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "S6E2DH5JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F048C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1125JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC112x\\LPC112x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC112x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKL27Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL27Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C18L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S1626": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1626.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG222F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG222F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1113FHN33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AF144N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC200LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F479VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L072V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO100ZD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFR32FG12P231F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P231F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P231F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMG55J19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG55\\samg55.h", "define": "__SAMG55J19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG55\\ATSAMG55J19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S9D96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC20J18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20J18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32JG1B100F128GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F128GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "NUC472JG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "MK22FN1M0Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TM4C1231E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1231E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC131SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC4104-Q48x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF121K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A120L\\mb9a120l.h", "define": "MB9AF121L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML21E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML21_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IRAM2": {"start": "0x30000000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\SAML21\\ATSAML21E15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2D35GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML21_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IRAM2": {"start": "0x30000000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\SAML21\\ATSAML21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1231E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1231E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MVF50NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NN151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "GD32F130C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "GD32F130C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMG53G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG53\\samg53.h", "define": "__SAMG53N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG53\\ATSAMG53G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E13FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG108F4": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG108F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32TG/EFM32TG108F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F190R6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F190R4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32WG330F256R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3Z26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s3z26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F190R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMD51G18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAMD51G18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "GD32F450VI": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32TG108F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG108F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG108F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3N0B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF522M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAM3N0A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF522K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TLE9867QXW20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L4A6VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO120LD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "M451SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "EFM32WG230F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG230F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF132L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF132M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF132N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32HG309F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG309F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG309F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF132K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F722RE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL13Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL13Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG110F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG110F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG110F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M0519SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC4400-F64x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4400_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S3739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC4500-F100x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "NUC442RI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "M0564RG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF504R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM470FZFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F405RK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F768AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC100LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M0564VG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF504N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC123LC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MKV46F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV46F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "NUC120VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F405RE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "S6E2C38J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F405RG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32WG900F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG900F256"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG900F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L451VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM330FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L451VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1301-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NUC120RE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32HG310F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG310F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG310F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S5R36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5r36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1776": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1776.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F777II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMC20E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF316M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF316N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MKL05Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMG53N19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG53\\samg53.h", "define": "__SAMG53N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG53\\ATSAMG53N19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32MG12P132F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P132F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P132F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "M052LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32GG395F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG395F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG395F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1302-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF316N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F765VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL17Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL17Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG940F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG940F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120RC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32G222F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G222F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L433CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1232E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1232E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD51J20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51J20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LM4F120E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F120E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32PG12B500F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152CBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L100C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F302ZD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC4074FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F235J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32PG1B100F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "XMC1403-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MK20DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S310": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s310.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MK20DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S316": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s316.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S317": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s317.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LPC11E37FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S315": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s315.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MK22DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32FG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF415R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMDA1G14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1G14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "NM1827UB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMDA1G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1G14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "EFM32TG842F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG842F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC120LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1114FBD48/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F207IE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "M452SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32L011E4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM341FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM341_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "54000000"}}, "NUC121LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TLE9842-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9842_2.FLM": {"default": "1", "ramsize": null, "size": "0xA000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x800"}, "IROM1": {"start": "0x11000000", "size": "0x9000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1226FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "EFM32TG822F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG822F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG210F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2HE4E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD21E16BU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG842F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG842F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG842F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ADuCM322i": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM322.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F030C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG110F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1833": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1830": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF316R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1837": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11D14FBD100/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11D14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC18S30": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MKW36Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_D256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/KW36x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW36Z4.h", "define": "MKW36Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM461F15FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM461_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M461.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC18S37": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MK51DN256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK11DX256Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO120SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "XMC1402-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L100RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL14Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL14Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF117T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F437IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "nRF52840_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\nrf52840.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "STM32F745ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1200-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32JG12B500F1024GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F512GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F101ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "AMAPH1KK-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo2.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/apollo2.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F102R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F446ME": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F101C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EFM32LG940F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG940F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKW41Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW41Z4.h", "define": "MKW41Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW41Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F412VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NANO110SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32F410R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4700-F144x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM370FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM370_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M370.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F407RK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L041G6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC442RG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "NANO102ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "LM3S818": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s818.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F101ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "ATSAMG54N19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54N19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F042F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MM32x031": {"core": "Cortex-M0", "vendor": "MindMotion:132", "algorithm": {"Flash/MM32x031_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x031_DFP.1.0.0.pack", "compile": {"header": "Device/Include/MM32x031.h", "define": "MM32x031"}, "pdsc_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x031_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/MM32x031.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F405OG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFR32BG12P132F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P132F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P132F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S2671": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2671.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1347FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1315FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F429ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC4333": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F429ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "M451MSC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M0519LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L083RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK11DN512Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F401CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401CD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LPC54608J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "NUC120VD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MK65FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK65F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Generic_Mini51_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "STM32F042T6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042T4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1342FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKM32Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM32Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L083RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NANO112RB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "TMPM46BF10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM46B_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}, "IRAM2": {"start": "0x20080000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M46B.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F479BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F479BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S5Y36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s5y36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9790": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9790.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMS70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "NUC120RC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L052C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F411VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM470FDFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L021G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1302-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L052C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32HG320F32R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG320F32R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG320F32R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L471ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG320F32R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L471ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG320F32R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC11U14FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32LG230F128R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1317FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKM33Z64Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM33ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1202-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M483KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S828": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s828.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G880F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G880F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAME53N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME53N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "HT32F52352": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x1FE00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0200", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG12P132F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P132F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P132F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF366N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF500N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BF500_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF366L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF366M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG330F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG330F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MVF60NS15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NS151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "MB9BF306N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F107F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SN32F766BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC832M101FDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC832M101FDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC83x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F078VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF306R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1C21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1c21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "CMSDK_CM4_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM4/Include/CMSDK_CM4_FP.h", "define": "CMSDK_CM4_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM4_FP.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F401RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LM3S1C26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1c26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4700-F100x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM383FSUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L051C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK60FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK60F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "XMC4500-F144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "TLE9879QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F101T6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "MB9AF104N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L476MG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476ME": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5C36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32ZG108F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1402-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F105VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1112JHI33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9BN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKE06Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE06Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE06Z4.h", "define": "MKE06Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE06Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U68JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "MB9BF102N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M453LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NM1120DB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF102R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM462F15XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1302-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2DF5JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC4700-E196x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S5D91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NANO130SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "EFM32LG360F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG360F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC130LC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F417VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "M4LEDLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "AC30M1432": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2C48H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMD21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1827": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.7.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF324L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF324M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1100-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32PG1B100F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "MB9BF324K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC220SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG890F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG890F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1230E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1230E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2DF5G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM4CMS32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM32/Include/sam4cm32.h", "define": "__SAM4CMS32C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4CM32/ATSAM4CMS32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMDA1E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1E15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1E15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAME53J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAME53J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32LG390F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG390F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F102R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32PG12B500F1024IL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024IL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2H44G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC1202-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M487JIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32JG12B500F1024IL125": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F512GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024IL125.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG390F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG390F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG390F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LPC54113J128BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MKW36A512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_D256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/KW36x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW36Z4.h", "define": "MKW36Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW36A4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1114LVFHN24/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1100DBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1302-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M058SFAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1518JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LPC54605J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54605.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "Mini54LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "STM32L431RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L431RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFR32MG12P132F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P132F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P132F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32LG332F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG332F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L451RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M058ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32JG1B200F256IM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256IM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "MB9BF414R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L451RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x1_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF414N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMS70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "SN32F226J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F220_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F220"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x3FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L486RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TLE9877QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "M452YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M451MLC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NUC120LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO100LC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "TMPM333FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32FG12P431F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P431F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P431F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1301-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKL43Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM333FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32WG295F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG295F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NM1100XBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG942F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG942F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101T4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F030RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD51G19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51G19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKE15Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE15Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32HG321F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG321F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG321F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF124L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L4A6AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF124K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF514N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF514R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAM4N16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4N/ATSAM4N16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "SN32F767BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKV44F64xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP64_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "M0564LG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKL03Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKS22FN128xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKS22F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32MG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P433F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NM1200TAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NM1530VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L063C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L063xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L063x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L475JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKE14F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE14F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NUC123LD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "TM4C123BH6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F328C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "Mini58FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F745ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM4F212H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F769NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MK21DX256Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32LG295F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG295F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1519JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MK30DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S1165": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1165.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F030R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2HE6E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1162": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1162.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK51D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2HE6F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO112RC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "SN32F768BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC130RD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S9U92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9U90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9U96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG840F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG840F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ADuCM322": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM322.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U68JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G222F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G222F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4400-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "MKL17Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL17Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5662": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5662.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L011D3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MVF61NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF61NN151MK50.svd", "processor": {"fpu": "SP_FPU"}}, "STM32L476QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG320F64R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L476QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAML22J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMDA1G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1G15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F100ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAMDA1G15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1G15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F429IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L052R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC140LC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F401CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LPC811M001JDH16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00002000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32L162ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L162ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG225F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG225F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3S8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM3SD8/ATSAM3S8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32L052R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F777NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7652BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC200LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32H753BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EFM32PG1B200F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "LPC4078FBD100": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S3J26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3j26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3U2E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U2E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F765II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S8630": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8630.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Generic_Nano100_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "NUC505DLA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "clock": "100000000"}}, "LPC1110FD20": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_4.FLM": {"default": "1", "ramsize": "0x03E0", "size": "0x1000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0400"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L496VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4CMS4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS4C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F765IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7741J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52331": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0200", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMV71J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV71J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "S6E2C39J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "SKEAZN64xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": null, "size": "0x00000100", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TM4C1237D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1237D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ISD9130": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"clock": "48000000"}}, "MB9BF365L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF365K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG880F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG880F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9871QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9871.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x11007FFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0x7FFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF155M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "Mini52ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "EFM32WG840F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG840F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F058T8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F091RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M058SLAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S102": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s102.h", "define": "LM3S102"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\lm3s102.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S101": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s102.h", "define": "LM3S102"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\lm3s101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "S6E2D55G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MKL27Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL27Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120LD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M0516ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC54114J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54114_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK40DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x0008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC120LD2DE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC122SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "M453VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "NUC100LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "S6E2CC8L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAM4CMP16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMP16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "Mini51ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "LPC1227FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "M451LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32F401RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F207IC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S5D51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F207IF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207IG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F401RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "EFM32WG395F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG395F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32W108HB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TLE9869QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9869.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1302-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F439ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC220LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L152ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMD21E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE02Z16xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFE00", "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TMPM369FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF112L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF112M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF112K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC844M201JBD64": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAM4CP16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4CP/sam4cp.h", "define": "__SAM4CP16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CP/ATSAM4CP16B_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S811": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s811.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M2S090": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "LM3S812": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s812.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407RG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HT32F52342": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0200", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52341": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0xFE00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0200", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFE00"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32MG12P332F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P332F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P332F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG980F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG980F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG980F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC140RC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MVF60NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NS151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "XMC1302-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NANO120LE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "NUC120VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M4TKLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "M054LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NM1520LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMV70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "MB9BF165K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMDA1E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1E16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "MB9BF165L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TMPM3H6FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM3Hx_code_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/TMPM3Hx_data_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x30000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TXZ3_DFP.1.0.0.pack", "compile": {"header": "Device/Include/TMPM3H6.h", "define": "TMPM3H6FWFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TXZ3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M3H6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMDA1E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1E16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "TM4C1237H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32TG108F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG108F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG108F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC140LE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32WG360F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG360F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21G17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAML21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG990F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG990F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA0J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK20DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG990F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG990F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG990F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "R-IN32M3-CL": {"core": "Cortex-M3", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M3_S25FL064P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29AL032D.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/R-IN32M3_S25FL032P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.1.3.0.pack", "compile": {"header": "Device/Include/RIN32M3.h", "define": "RIN32M3_EC"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M3_CL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC54101J512BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F031C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F12365": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x3FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M451MLD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "S6E2CCAJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HT32F12366": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x3FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "HT32F52231": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F52230": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x7C00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S1Z16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s1z16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C1AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAM4S8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4S8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1226FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "NM1200LAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NANO100SD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "STM32F413ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32JG1B200F256GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "NUC200VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F417ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MB9BF521L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F429BE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L152ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54S608J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "ARMCM33_DSP_FP_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F334R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L152ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F334R4": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F334R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F031C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4100-Q48x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4S8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4S8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32PG12B500F512GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F512GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2C59J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMD51P20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51P20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32GG332F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG332F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG332F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL03Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00002000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F427AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32JG12B500F1024GL125": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F512GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024GL125.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F070CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LM3S2939": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2939.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD51P19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51P19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "M0516ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF515N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F427AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF515R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC100LC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32LG330F128R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G842F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G842F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M482LGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M451LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM3S5P51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5C51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG380F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG380F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5632": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5632.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F303ZD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L443VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKL02Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F070C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F150C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG290F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG290F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM411F20XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM41xA_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/TMPM41xB_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM411_unitB.h", "define": "TMPM411F20XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20008000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54102J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK20DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAMC21J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M453RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "TMPM330FDWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32LG395F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG395F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M483SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F746BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F746BE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC100LD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "S6E2GK8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gkxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC4800-F144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L476VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L476VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD20E18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4076FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD20E15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M453LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "LM3S3W26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s3w26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF468M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF468N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAML21J18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21J18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C29L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F733VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM330FYWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF565L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F469ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC810M021FN8": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_4.FLM": {"default": "1", "ramsize": "0x03E0", "size": "0x00001000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "Mini52XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC140RE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32LG842F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG842F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F071CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5T36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s5t36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2CC9H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TM4C1290NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1290NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKV10Z32xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P32_1KB_SEC.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKV10Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "STM32F756ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC122SC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "ATSAM3N2A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N2B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151QC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F237F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L151QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151QE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1620": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1620.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S1621": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1621.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1150": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1150.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1625": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1625.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHI33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHI33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF417S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1315FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S8530": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s8530.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF417T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S8538": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s8538.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG842F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG842F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG842F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M487KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "SN32F248F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9U81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1301-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKV44F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32L462RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x2_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF166L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L011G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11U24FET48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32HG320F64R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF322K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA1E14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1E14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F765ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M0516ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC4072FET80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG320F64R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32LG332F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG332F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1237D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1237D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M0516LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F767ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F767ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NANO120LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "clock": "32000000"}}, "EFM32ZG110F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK30DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG380F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG380F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4800-F100x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F105VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4700-E196x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "ISD9361": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9300_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9300_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9300_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "S6E2D55JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1D21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1d21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD20G17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M482SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S1D26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1d26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ARMv8MML_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ATSAMD20G16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F212H5BB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5BB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFR32MG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P432F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMV71J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMV71J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMV71J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV71/include/sam.h", "define": "__SAMV71Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV71J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F446RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1301-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1302-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F769IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L475RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAML22N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G840F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G840F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKV56F1M0xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P1024_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x2F000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00100000"}}, "debug": "SVD/MKV56F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "STM32F769II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L475RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "IOTKit_ARMv8MML": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_ARMv8MML/Include/IOTKit_ARMv8MML.h", "define": "IOTKit_ARMv8MML"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S1J16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1j16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1J11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1j11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC122LC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "EFM32HG210F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG210F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG210F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S2616": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2616.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1823LB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC812M101JD20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F439BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32LG330F256R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F256R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4500-E144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F256R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC230SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32LG330F256R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F256R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F256R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL03Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL27Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL27Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2432": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2432.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21G16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M2S150": {"core": "Cortex-M3", "vendor": "Microsemi:112", "algorithm": {"Flash/M2Sxxx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.actel-ip.com/repositories/CMSIS-Pack/Microsemi.M2Sxxx.1.0.61.pack", "compile": {"header": "CMSIS\\m2sxxx.h"}, "pdsc_file": "http://www.actel-ip.com/cwps/CMSIS-Core/Microsemi.M2Sxxx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\M2Sxxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "166000000"}}, "STM32L071VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TLE9843-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9843_2.FLM": {"default": "1", "ramsize": null, "size": "0xD000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\TLE984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xC000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1101LVUK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L071VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L051K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC126LG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MKW35A512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW35Z4.h", "define": "MKW35Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW35A4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK11DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2DH5GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO100LE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "NUC123LC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ATSAM4LS2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32MG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P432F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F098VC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C49L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32H743ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "ATSAMDA0J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S328": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s328.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LPC11U37FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Mini51XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32LG230F128R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG110F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC472KI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "EZR32LG230F128R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG380F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG380F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S801": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s801.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32ZG110F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S808": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s808.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32LG230F128R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F303K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F22366": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x3FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC11U14FHI33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM360": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCMxxx_128.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x20000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM36x_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\ADuCM361.h", "define": "ADuCM361"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM36x_DFP.pdsc", "memory": {}, "debug": "SVD\\ADuCM360.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F303K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F072R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F230H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F230H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1237E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1237E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF364K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF364L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F215RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F215RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM369FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F723IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M452RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "nRF52810_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.14.1.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x30000"}}, "debug": "SVD\\nrf52810.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "APOLLO256-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F723IC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F100R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF114M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC54S618J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "STM32F469II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC120LC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F150K8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5P56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H14G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "GD32F150K4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2H14E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "GD32F150K6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F469IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MKL33Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL33Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F469IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK10DN128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG232F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG232F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F070RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "IOTKit_CM33": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAMA5D44": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D44.svd", "processor": {"fpu": "DP_FPU"}}, "S6E2C49H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L4A6QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMA5D41": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D41.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D42": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D42.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D43": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.0.0.pack", "compile": {"define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D43.svd", "processor": {"fpu": "DP_FPU"}}, "EFM32GG290F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG290F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG290F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF115N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "M0516LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "HT32F52243": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F52241": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0xFC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L072KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F705J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F429II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11U24FHI33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L072KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L433RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4LC2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC472VG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "GD32F190C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6611": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6611.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472KG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "TM4C123BH6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD21E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-F064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MK64FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK64F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1114JHN33/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G290F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G290F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F130F4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC220SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EFM32LG942F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG942F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M481ZIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TMPM36BF10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040800"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M36B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM3S9971": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9971.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32TG825F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG825F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AF111K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F405RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "MK12DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1120FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "XMC1201-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "AC33M3064": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx064/Flashloader/AC33Mx064_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack", "compile": {"header": "AC33Mx064\\Core\\include\\AC33Mx064.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx064\\SVD\\AC33Mx064.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S2948": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2948.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9D81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F407ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "NANO110RC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32F407ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EZR32WG330F256R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32WG330F256R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32WG330F256R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM470FYFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32WG330F256R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F256R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF164L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG280F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG280F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1811": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1811.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32W108C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F103R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1816": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1816.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MVF61NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF61NS151MK50.svd", "processor": {"fpu": "SP_FPU"}}, "STM32F107VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM343FEXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_768.FLM": {"default": "1", "ramsize": null, "size": "0x000C0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x000C0000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407IG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC240LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMV70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EZR32WG230F64R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32WG/Include/em_device.h", "define": "EZR32WG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG295F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG295F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1301-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F101ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32L041C4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMD10C14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD10\\ATSAMD10C14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LPC1549JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M054LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "TM4C129XKCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C129XKCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF416S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1112FD20/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF468R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9AF342M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF342L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF342N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "SN32F249F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F410TB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32ZG108F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32LG330F128R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F128R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120LD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF416N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EZR32LG330F128R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F128R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F128R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG108F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32ZGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ML630Q466": {"core": "Cortex-M0+", "vendor": "Lapis Semiconductor:10", "algorithm": {"Flash/ML630Q466.FLM": {"default": "1", "ramsize": "0x400", "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.1.0.0.pack", "compile": {"header": "Device/Include/ML630Q466.h"}, "pdsc_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/ML630Q466.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ML630Q464": {"core": "Cortex-M0+", "vendor": "Lapis Semiconductor:10", "algorithm": {"Flash/ML630Q464.FLM": {"default": "1", "ramsize": "0x400", "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.1.0.0.pack", "compile": {"header": "Device/Include/ML630Q466.h"}, "pdsc_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/ML630Q464.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1402-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2CC9J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F051K8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM381FWDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM381_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M381.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F051K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4074FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F051K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U24FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1330LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1330_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1330_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1330_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1330AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF217T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF217S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC122ZC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "clock": "60000000"}}, "LM4F232H5BB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5BB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKW31Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW31Z4.h", "define": "MKW31Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW31Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LM3S6965": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000B800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6965.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1402-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF516N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC100RD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L151V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F103RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF516T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF516S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF516R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F103RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1518JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "XMC1201-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1548JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LM4F210H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F210H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG842F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG842F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1301-T038x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF418S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "S6E2C28L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM4F111H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F111H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M451VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF418T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "S32K144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/S32K144_P512_4KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.1.0.0.pack", "compile": {"header": "platform/devices/device_registers.h", "define": "CPU_S32K144HFT0VLLT"}, "pdsc_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "platform/devices/S32K144/S32K144.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "112000000"}}, "ATSAML22N16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22N16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ARMv8MML": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "S6E2G26H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g2xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM4F112H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F112H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54605J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54605.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "LM3S1637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Z32F38412ALS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F3841.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F3841.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F3841.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MK10DN64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F112H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F112H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54618J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "STM32F429VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Mini52TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "LPC1112LVFHN24/003": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U68JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG395F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG395F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG232F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG232F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL36Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32W108CZ": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_192.FLM": {"default": "1", "ramsize": null, "size": "0x30000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x08000000", "size": "0x30000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1202-T028x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Generic_NUC100_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC845M301JHI48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "EFM32LG890F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG890F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM34Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP256_2KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34Z7.h", "define": "MKM34Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKM34Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32WG280F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG280F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4C8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}, "Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32LG290F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG290F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F779II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32PG1B200F128GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F128GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "38400000"}}, "EFM32HG108F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32HG/Include/em_device.h", "define": "EFM32HG108F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32HGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK21FX512Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L073CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG990F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG990F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG225F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG225F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL15Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG330F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG330F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK66FX1M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/MKD256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK66F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2HG6G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2HG6F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2HG6E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F413CH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2C2AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMC20J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AFA41M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MKL25Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL25Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1W16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s1w16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F733ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "GD32F170C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5656": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5656.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F238F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.3.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114LVFHN24/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC100RC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "GD32F170C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F779BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1202-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S2793": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2793.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1401-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "CMSDK_ARMv8MBL": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MBL/Include/CMSDK_ARMv8MBL.h", "define": "CMSDK_ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F469VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2C58H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC442VG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "clock": "84000000"}}, "S6E2C3AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S628": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s628.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F042C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMS70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "NUC120LE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "APOLLO512-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1201-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1403-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G200F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G200F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1752": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "APOLLO256-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1756": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1754": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L152RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L011F3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1759": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1758": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.3.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L011F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F207VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ARMCM23_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM23/Include/ARMCM23_TZ.h", "define": "ARMCM23_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "LM3S5739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F102C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE06Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE06Zxxx_P128KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE06Z4.h", "define": "MKE06Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE06Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5732": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5732.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ARMCA5": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCA5/Include/ARMCA5.h", "define": "ARMCA5"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "M0518LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F078RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG232F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG232F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407RE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MK22FN1M0xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM4F132E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F132E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "SKEAZN8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P8KB.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/SKEAZN84.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S8962": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8962.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M4LEDRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "STM32F413ZH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NANO100KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "STM32F469AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F407VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F723ZC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "S6E2D35JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F723ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11E37FBD48/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S5G51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMDA1J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1J16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1J16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "LM3S2730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3S2A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM3S2739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK21DN512Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C19H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S1911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK20DX64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK20DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF329S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF32xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "STM32F318K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1227FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LM3S6618": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6618.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L100RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L100RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M054ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "M054ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "NUC126RG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF167R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F373V8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11U36FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F2755": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x1FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM366FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2139": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2139.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "TM4C1230D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1230D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG330F64R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG330F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF167N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF167M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S6100": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s6100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "S6E2GH6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2ghxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2GH6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2ghxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F412ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32TG108F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG108F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC834M101FHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC832M101FDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC83x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAM3X8H": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8H.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "MKL15Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2DF5GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "IOTKit_CM23": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM23/Include/IOTKit_CM23.h", "define": "IOTKit_CM23"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F101VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "ATSAM3X8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "TM4C1292NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1292NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F12345": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0xFC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F12345.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M0516LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S6753": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6753.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F373VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F373VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MKL17Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL17Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1112FDH20/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M054ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F407IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "HT32F52253": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x1FC00", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x0400", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.8.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F407IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LPC1115FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L100R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK22FN128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK22F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32HG320F64R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF318S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF318T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKL05Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG332F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG332F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4SD16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SD16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SD16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SD16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NANO120SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "ATSAMD21E15BU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15BU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130G8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130G6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130G4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2GH8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2ghxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF216T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC11C14FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF216S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MK10DN32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK50DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK50D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6432": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6432.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MM32x103": {"core": "Cortex-M3", "vendor": "MindMotion:132", "algorithm": {"Flash/MM32x103_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x103_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MM32x103.h", "define": "MM32x103_MD"}, "pdsc_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x103_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/MM32x103.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "MB9BF129S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF12xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "LM3S618": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s618.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1821FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "MB9BF129T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF12xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "LM3S2950": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2950.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S613": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s613.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S612": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s612.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S611": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s611.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF517S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF517T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9D92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S615": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s615.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L486ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x10000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F479NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK27FN2M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x1FFC0000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK27F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "STM32F103VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100LD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "LM3S1627": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1627.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3SD8B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00440000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3SD8/ATSAM3SD8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3SD8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00440000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3SD8/ATSAM3SD8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAMC21J17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21J17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F103VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "M451MRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "ARMCM33_DSP_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.1.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "S6E2CCAL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9AF121L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A120L\\mb9a120l.h", "define": "MB9AF121L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG332F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG332F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG332F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C1AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L4A6RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFR32MG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P232F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF316S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKW21D256xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF316T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9L97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9l97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKL33Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL33Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1401-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF500R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BF500_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M481ZGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S6911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32JG1B200F256IM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.1.1.0.pack", "compile": {"header": "Device/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F128GM32"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256IM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "38400000"}}, "STM32F722VC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NM1824FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32F722VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NANO120KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "GD32F405VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMS70Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "TMPM475FDFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S3749": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3749.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L052T6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF305R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M453SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "GD32F405VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMC21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.3.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F038E6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}, "Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.1.5.0.pack", "compile": {"header": "Device/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M482SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM4F120C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F120C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG290F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG290F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F103ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11E14FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1294NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1294NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S5R31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5r31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C59L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S5C56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG980F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG980F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G232F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G232F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK21FX512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32WG380F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32WG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32WGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG380F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK21FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.5.2.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32MG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P433F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM4CMP8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMP8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM361FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LPC11U12FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV31F256xxx12": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV31F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L496QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD21G17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE14Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE14Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F429AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1302-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2GK6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gkxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFR32FG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF467N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM3N4B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3N/ATSAM3N4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x06000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3N/ATSAM3N4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N4A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3N/ATSAM3N4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S2918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C123GH6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1607": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1607.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK50DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1114FN28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F302VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MWPR1516xxx": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKPR1516_P16KB.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00004000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWPR1516_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MWPR1516.h", "define": "MWPR1516xxx"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWPR1516_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MWPR1516.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F302VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F769NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1402-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "M058ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1548JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M453RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "clock": "72000000"}}, "MB9BF367R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "IOTKit_CM33_FP": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "NUC120RD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32HG320F64R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC4400-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.8.0.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "LPC54S606J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC54S618.h", "define": "LPC54S618"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54S606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "EFM32LG940F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG940F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20G18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L496AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "SVD/STM32L4x6_v1r1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103T6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK10DX64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK10DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "Mini51ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "ATSAMD20G15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20G14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMR21E19A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E19A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF522L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1100-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "CMSDK_ARMv8MML_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML_SP.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "25000000"}}, "ATSAMD21G15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM375FSDMG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M375.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM3N0C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA1J15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1J15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1J15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "LPC11E66JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32PG12B500F512GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.1.0.0.pack", "compile": {"header": "Device/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F512GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F512GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F765NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAM4E8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4E/ATSAM4E8C.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1202-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1113FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG822F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG822F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1113FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FBD48/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L041C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKE04Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P128KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.0.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE04Z1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1311FHN33/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32HG320F64R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.1.1.0.pack", "compile": {"header": "Device/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini52XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ATSAMS70N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMS70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LM3S2637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100ND3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "42000000"}}, "SN32F767F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F732ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM4F130E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F130E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1345FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F429VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "TMPM363F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M363.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM3S5651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F732IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S5652": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5652.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F429VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "CMSDK_ARMv8MML": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S2608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1404-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.6.0.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1111FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32FG12P231F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P231F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P231F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32TG110F4": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.1.3.0.pack", "compile": {"header": "Device/EFM32TG/Include/em_device.h", "define": "EFM32TG110F4"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32TGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32TG/EFM32TG110F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM369FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MVF51NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF51NS151MK50.svd", "processor": {"fpu": "DP_FPU"}}, "LM3S8971": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8971.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S8970": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8970.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKW30Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW30Z4.h", "define": "MKW30Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW30Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E67JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U37HFBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1120ZC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1317FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F205ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MKW31Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW31Z4.h", "define": "MKW31Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW31Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "NM1100XAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "EZR32LG230F256R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.1.2.0.pack", "compile": {"header": "Device/EZR32LG/Include/em_device.h", "define": "EZR32LG230F256R69"}, "pdsc_file": "http://www.keil.com/pack/Keil.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32H743XI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.1.0.1.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "LPC1113FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC822M101JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.5.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F479NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F439VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32LG995F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32LG.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.1.5.0.pack", "compile": {"header": "Device/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32LGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG995F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100RC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LPC1343FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F439VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32GG280F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.4.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG280F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG280F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F437AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ISD9341": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x18000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "MKL16Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.13.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "ISD9340": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x18000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "Generic_M051_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "STM32L083V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.1.6.0.pack", "compile": {"header": "Device/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C123FE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123FE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F190RB": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F732RE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S6938": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6938.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Mini52ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "clock": "24000000"}}, "STM32F318C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.1.4.0.pack", "compile": {"header": "Device/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAME54P20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME54P20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LM3S1H11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1h11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1H16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1h16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMV70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.3.0.pack", "compile": {"header": "SAMV70/include/sam.h", "define": "__SAMV70N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMV70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LPC1347FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S2410": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2410.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NUC100RD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.1.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "clock": "50000000"}}, "LM3S6110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s6110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}} \ No newline at end of file +{"S6E2H16E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2H16G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF166N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TM4C1290NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1290NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC029LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC029AN\\Include\\NUC029xAN.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC029AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC120LC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMA5D26": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D26.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D27": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D27.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D24": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D24.svd", "processor": {"fpu": "DP_FPU"}}, "S6E2H16F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H16X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h1xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMA5D22": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D22.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D23": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D23.svd", "processor": {"fpu": "DP_FPU"}}, "HT32F12345_46QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12345"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F12345.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "IOTKit_CM33_FP_MPS3": {"core": "Cortex-M33", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS3_IOTKit_BSP.1.0.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS3_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "MB9BF317S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32WG390F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG390F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1302-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMA5D28": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D28.svd", "processor": {"fpu": "DP_FPU"}}, "MK24FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK24F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "AMAPH1KK-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo2.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/apollo2.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NANO130SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "M452RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "NUC100VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TM4C1237H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "N572P072": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\N572F072_v3.svd", "processor": {"clock": "48000000"}}, "MB9BF106R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F1655_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F5826": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F5826"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F5826.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF106N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MK21FN1M0Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32TG110F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG110F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F1755_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMC21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1237H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4400-F64x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4400_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM383FSEFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L011E4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "AC30M1364": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG230F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG230F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG230F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMR21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F109F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM383FWEFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F411RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M052ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F417IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LM3S2601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG942F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG942F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6422": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6422.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S6420": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6420.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S2965": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2965.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32BG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG11B420F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9BN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S600": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s600.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG11B110F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B110F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B110F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L4R7ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD09C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD09_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMD09\\Include\\samd09.h", "define": "__SAMD09D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD09\\ATSAMD09C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F105R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK22FX512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM066FWUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M066.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NANO100ND2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "XMC1201-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Mini57EDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F105RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK50DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF328T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF32xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "EFR32BG1P233F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P233F256GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P233F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MK26FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK26F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11U24FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TLE9879QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM470FZFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M452LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F078RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L451CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMA5D21": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D28"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D21.svd", "processor": {"fpu": "DP_FPU"}}, "STM32L451CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK02FN64xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "arm/MK0x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK02F12810_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK02FN64VFM10"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK02F12810_DFP.pdsc", "debug": "MK02F12810.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC54607J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "XMC1301-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKS20FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKS20F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B510F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF529T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF52xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "Z32F06410AES": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0641.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0641.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0641.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF166R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF529S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF52xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "HT32F50231_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "GD32F150G8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC2201LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC2201\\Include\\NUC2201.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32GG232F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG232F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG232F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK63FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK63F12_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK63FN1M0VMD12"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK63F12_DFP.pdsc", "debug": "MK63F12.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC230VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EZR32HG320F64R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "GD32F150G4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F150G6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F2755_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF317T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F071RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F2755_48QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S612": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s612.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SN32F707F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ARMv8MML_DSP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "M2351SIAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M2351_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M2351_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS_MKROM.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M2351\\Include\\M2351.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M2351_v1.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "64000000"}}, "STM32F756IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM380FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F303RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F091RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M4TKRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32LG295F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG295F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9844QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9844.FLM": {"default": "1", "ramsize": null, "size": "0xF000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE9844_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1100F000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0x10000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAML21E18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21E18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF128S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF12xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "TMPM395FWAXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM395_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM395.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M395.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFR32BG1P232F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P232F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P232F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF128T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF12xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MK22DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S308": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s308.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NUC100RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "nRF51422_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "ATSAML22J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3A8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3A8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3A8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "nRF51422_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "HT32F50241": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F722IC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "HC32F146J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32F146FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F146JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK60DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM061FWFG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M061.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "HT32F52253_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F756NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC100LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EZR32HG220F32R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F32R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F767IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "HT32F52352_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1202-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32HG220F32R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F32R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK52DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK52D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32HG220F32R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F767II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7661BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L496RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ARMv8MML_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMSC000": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMSC000/Include/ARMSC000.h", "define": "ARMSC000"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMSC000.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F334K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32LG330F64R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334K4": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM462F10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F64R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK82FN256xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MK82F25615.h", "define": "MK82FN256xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK82F25615.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MKE04Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P8KB.FLM": {"default": "1", "ramsize": "0x400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKE04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C129DNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129DNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F64R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG390F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG390F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC122ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "STM32L475RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F766J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "S6E2CC8J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TM4C1230C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1230C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F121E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F121E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO110SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32GG11B110F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B110F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B110F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "HC32F156F8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F156FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L031C4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5G36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F410CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L082KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L082xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAML22G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1292NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1292NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ISD9160": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"clock": "48000000"}}, "EZR32WG230F64R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120LD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F267J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F64R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F358CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1102LVUK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M0519VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKV30F64xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV30F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F446ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F302CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F446ZC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1301-Q024x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F1654": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5C31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKE14Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE14Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKE16F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE16F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EZR32WG230F64R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F777BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F302CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F1656": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C1236D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1236D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F070CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F64R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B520F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1102UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC1102_04.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32WG230F64R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2HG4E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32GG330F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG330F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG330F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL05Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM376FDDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M376.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG330F256R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F732ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MAX71617": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "MAX71616": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "NANO120VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "MKW22D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F100C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AFB42N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB42L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB42M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F439II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Z32F06423EKE": {"core": "Cortex-M0", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0642.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0642.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TLE9873QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9873.FLM": {"default": "1", "ramsize": null, "size": "0xC000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100AFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0xAFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM342FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM342_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00009000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F439IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "TMPM380FYDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32H743II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "TLE9845QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9845.FLM": {"default": "1", "ramsize": null, "size": "0xB000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9845_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1100B000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xC000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "MKL46Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL46Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA0E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32HG210F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG210F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFR32BG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "TLE9867QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "M452VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LPC11C12FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC200SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EZR32HG220F64R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1778": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM4F122H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F122H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F411RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1774": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F411CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1776": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F411CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L100R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC240SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "S6E2C29H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HT32F52341_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFE00"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG390F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG390F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5752": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5752.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M4TKVG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "NM1120XB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "Mini54ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "HT32F52231_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MT2523x": {"core": "Cortex-M4", "vendor": "MediaTek:129", "algorithm": {"tools/keil/mt2523/2523_32M_MXIC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00400000", "ramstart": "0x04008000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://download.labs.mediatek.com/MediaTek.MTx.4.6.1.pack", "compile": {"header": "driver/CMSIS/Device/MTK/mt2523/Include/mt2523.h"}, "pdsc_file": "http://download.labs.mediatek.com/MediaTek.MTx.pdsc", "memory": {"IRAM1": {"start": "0x00000000", "size": "0x00400000"}, "IRAM2": {"start": "0x04008000", "size": "0x00020000"}, "IROM1": {"start": "0x08000000", "size": "0x00400000"}}, "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "208000000"}}, "MKL24Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL24Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5P51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11A12FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ATSAMD21G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F479AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "HT32F50241_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F378VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA1J14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1J14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "EFR32MG12P132F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P132F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P132F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMDA1J14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1J14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "GD32F170C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M058LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L452RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1346FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S2412": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2412.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F401VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "ARMv8MML_DSP_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "TMPM067FWQG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M067.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC220LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32TG822F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG822F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TM4C129XNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129XNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC120LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S6637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK51D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMR21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F108F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C58J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "S6E2C3AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L486JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F407VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32G880F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G880F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F407VE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MCIMX7D2": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D2_A7.svd", "processor": {"fpu": "SP_FPU"}}, "MCIMX7D5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "MCIMX7D7": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D7_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NANO112LB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32LG895F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG895F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG990F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG990F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG990F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M487KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1201-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "HC32L150K8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L150KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK10DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NUC472HI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "ATSAME70J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAML21G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21G16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9842QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9842_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x11008000"}, "Flash/TLE9842.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x800"}, "IROM1": {"start": "0x11000000", "size": "0x9000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "EFM32GG11B840F1024GL192": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GL192.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "M451MRD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F479AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "HC32L156K8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L156KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC4088FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC130LE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L071VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52243": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML22G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M453LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "XMC1100-T016x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "M452RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "HC32L156KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L156KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAMA5D35": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D35.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAM3U1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x20080000", "size": "0x00002000"}, "IROM1": {"start": "0x00080000", "size": "0x00010000"}}, "debug": "SVD/SAM3U/ATSAM3U1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "TM4C1231H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMA5D36": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D31.svd", "processor": {"fpu": "DP_FPU"}}, "GD32F450VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S2911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F450VI": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG895F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG895F1024"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG895F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F450VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F450VE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HC32L150KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L150KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFR32FG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC100RD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG11B820F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U12FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M052ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC126LE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F469ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F479II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F479IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1114FDH28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F469ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC442KG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "EFM32G290F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G290F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1232D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1232D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC844M201JHI48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "NM1200ZBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFR32BG1P332F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P332F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P332F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MK22FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4CMS16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F190T6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "M052ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F190T8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1Z16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s1z16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMV71N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71/svd/ATSAMV71N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC54114J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54114_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54114J256UK49_cm0plus"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54114_DFP.pdsc", "debug": "LPC54114_cm4.xml", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "M0519SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF112N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L432KB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L432xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152C8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK11DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L051K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L081CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L081xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL28Z512xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_KL28.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MKL28Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF112R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM368FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M368.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F1755_48QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11C22FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MKS22FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKS22F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F330K8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "EFM32LG230F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG230F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1538": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1538.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO102SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "NANO100LE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32PG1B100F128IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F128IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC472VI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "GD32F330K4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "GD32F330K6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "NM1120FC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70/svd/ATSAMV70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "XMC1302-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "IOTKit_CM33_MPS3": {"core": "Cortex-M33", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS3_IOTKit_BSP.1.0.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS3_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAM4LS2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4104-F64x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF314R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMC20G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG942F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG942F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF328S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF32xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MKL13Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL13Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Mini52LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAM4SD32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4SD32C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SD32B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4SD32B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L443RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F302ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG900F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG900F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG900F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F706J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F112E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F112E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG942F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG942F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52241_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F1765_48QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2DH5G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG840F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG840F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF105N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M451MRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAMD09D14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD09_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMD09\\Include\\samd09.h", "define": "__SAMD09D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD09_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD09\\ATSAMD09D14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM367FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F150R6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F150R4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1313FHN33/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L476ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "GD32F150R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMV70J19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70b/svd/ATSAMV70J19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LM3S5D56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5791": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5791.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F52220_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF464K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1937": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1937.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F121H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F121H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF464L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG890F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG890F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG980F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG980F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LM4F210E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F210E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F22366_46QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "XMC1202-T028x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG290F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG290F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B820F2048IL152": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048IL152.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11E67JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC8N04FHI24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8N04_30.FLM": {"default": "1", "ramsize": null, "size": "0x00007800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8N04.h", "define": "LPC8N04FHI24"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00007800"}}, "debug": "SVD/LPC8N04.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "8000000"}}, "LPC11E36FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L151C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F232H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC4317": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4310": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "ATSAM3S2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM4F232H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC4313": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "ATSAMD21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52341": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFE00"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2B93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2b93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC21N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21N/ATSAMC21N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F756VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S1968": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1968.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF528T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF52xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MB9BF528S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF52xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "NUC123ZD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32G880F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G880F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1823EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MK22FN512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}, "Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22F51212.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151UC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK22FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F50231_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "HT32F50230_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32L462VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF341L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF341M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF341N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F1251": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1224FBD48/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LPC11E11FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F211H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F211H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F1253": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C49L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC126VG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MVF62NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF62NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "MB9BF406R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG230F64R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F102CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF406N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M0518SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1225FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "LM3S5P36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F723IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "S6E2C18H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9BF516R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32G842F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G842F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52230_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F413RH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC120RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO100SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "S6E2C19L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "PAC5223": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAME54P19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME54P19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MB9BF415N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "M452SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "Generic_NUC400_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "TM4C1294KCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C1294KCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F302C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG840F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG840F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG840F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M451MLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LPC804M111JDH24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC804.h", "define": "LPC804M101JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC80X.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "EFR32BG12P332F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P332F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P332F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S1P51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1p51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F12365_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "SN32F707BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4700-F144x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9BN2": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2HE4G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC11U14FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1202-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S9BN6": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9bn6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC100VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "Generic_NUC200_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F051T8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1120EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMDA0E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMv8MBL": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MBL/Include/ARMv8MBL.h", "define": "ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "Mini52TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "XMC1301-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G200F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32G/EFM32G200F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F1755_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "SN32F765J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD51J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKW21D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S5P3B": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5632.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5K31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5k31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1768": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1769": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F101C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM366FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML22G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1763": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "Mini52FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "STM32F101C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LPC1766": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1767": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32GG380F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG380F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG380F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1765": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S5747": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5747.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "CMSDK_CM7_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7_DP.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F745ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC220SE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC11U35FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F378CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5749": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5749.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF467M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC1785": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM3U2E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U2E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC1787": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM3U2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x000020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x000004000"}, "IRAM2": {"start": "0x20080000", "size": "0x000004000"}, "IROM1": {"start": "0x00080000", "size": "0x000020000"}}, "debug": "SVD/SAM3U/ATSAM3U2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "EFM32WG840F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG840F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C48J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1788": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L071CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4200-Q48x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4200_4100_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4200_series/Include/XMC4200.h", "define": "XMC4200_Q48x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x5FC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4200.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F439ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "GD32F350R4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "ATSAMHA1G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_16_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000200", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000200"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "N572F072": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\N572F072_v3.svd", "processor": {"clock": "48000000"}}, "MCIMX7U5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/MCIMX7U5_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7U5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NUC121ZC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MCIMX7U3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/MCIMX7U5_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7U3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "STM32L071RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F121C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F121C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG940F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG940F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F131H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F131H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG220F64R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "S6E2CC9H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TMPM376FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M376.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32H743VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "STM32L471RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B840F1024IL152": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024IL152.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L471RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC100RE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L471RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC240SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F091CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC442KI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "NUC2201SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC2201\\Include\\NUC2201.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LPC11U34FHN33/311": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_40.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xA000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xA000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC220LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9AFB41N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB41M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB41L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L162VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F412CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F412CG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC54616J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54616_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54616J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54616_DFP.pdsc", "debug": "LPC54616.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L052K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1114FHN33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21J18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21J18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F64R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F030C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123BE6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123BE6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM367FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11C24FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1347FBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG360F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG360F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L100C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L071V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C123BE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123BE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32HG350F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG350F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG350F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NM1120TB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F215VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F215VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S1F11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1f11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F479ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK65FX1M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "arm/MKD256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK65F18_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK65FX1M0VMI18"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK65F18_DFP.pdsc", "debug": "MK65F18.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM4LS8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LS8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC812M101JDH16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "M452VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9BF315N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F479ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF315R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32HG321F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG321F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG321F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC4104-Q48x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF102N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO130KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "LPC11E14FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1201-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMC20G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32PG12B500F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF104R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1233H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32W108C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "M451MLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F778AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC120RD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMC21J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini51LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "LPC11A14FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF104N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1G21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1g21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1115JET48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG230F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG230F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S9DN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9dn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM3N1A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1P332F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P332F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P332F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L053C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMR21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21G18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMR21\\ATSAMR21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32W108CZ": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_192.FLM": {"default": "1", "ramsize": null, "size": "0x30000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x08000000", "size": "0x30000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "S6E2D55GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L053C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC43S30": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "TM4C1231H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32W108CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32W108CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1114LVFHN24/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L476VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F264S/X": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1231H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1231H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC100RD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MK10FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK10F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C1AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC54102J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54102_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54102J512UK49_cm0plus"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54102_DFP.pdsc", "debug": "LPC54102_cm4.xml", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F413CG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC11U34FBD48/311": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_40.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xA000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xA000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32FG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F207VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMC20J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F207VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B510F2048IQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048IQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F350K8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "ATSAMV71N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71/svd/ATSAMV71N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "ATSAMV71N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71/svd/ATSAMV71N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "ARMCM7_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "TMPM372FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M372.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG890F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG890F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM380FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HC32L150FA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L150FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3N1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9879QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L021K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM368FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M368.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TLE9867QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F301C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK21DX128Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54101J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54101_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54101J256UK49"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54101_DFP.pdsc", "debug": "LPC54101.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F103VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E1A11B0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A11X0A.FLM": {"default": "1", "ramsize": null, "size": "0xE000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F103VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAM4LC8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3748": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3748.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM4LC8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/SAM4L/ATSAM4LC8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F110C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F110C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM037FWUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM03x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM037.h", "define": "TMPM037FWUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M037.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MKL26Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1820EB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "S6E2GK6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gkxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F437ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L151ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKV42F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F437ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMC21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1517JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "NUC120LD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "S6E2H14F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC1403-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B420F2048GL112": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048GL112.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG11B420F2048IL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048IL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54606J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "EFM32TG110F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F030CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M0518SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMC21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6X4": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LPC1112FDH28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6X1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MCIMX6X2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MCIMX6X3": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6SX_A9.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "S6E2D35GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32G232F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G232F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1200TBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1401-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C5AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F423RH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L4R5VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B320F2048GL112": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B320F2048GQ100"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B320F2048GL112.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMC20N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20N/ATSAMC20N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF512R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L100RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S3634": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3634.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C123AE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123AE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2GM6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gmxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L051T6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2GM6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gmxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L151R6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F427ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Mini51LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "STM32F103V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F50241_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9BF512N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F427ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S1850": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1850.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG280F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG280F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC20N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20N/ATSAMC20N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M451MSD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LPC4320": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4323": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4322": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4325": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4327": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "EFM32LG880F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG880F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG990F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG990F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "HC32F146F8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32F146FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F146FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG295F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG295F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32GG940F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG940F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG940F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "nRF51422_xxAC": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "HT32F1653": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ADuCM320i": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM320i.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F12366_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "MK64FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK64F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM330FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMD51J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAMD51J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32WG880F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG880F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "Mini57TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32WG880F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG880F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32FG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L052R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ADSP-CM419F-BCZ_M4": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/CM41x_FlashB_512.FLM": {"default": "0", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11080000"}, "Flash/CM41x_FlashA_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M4_DFP.1.0.0.pack", "compile": {"header": "Device/inc/M4/CM41x_M4_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M4_DFP.pdsc", "memory": {"IROM2": {"start": "0x11001000", "size": "0x000FF000"}, "IRAM1": {"start": "0x10000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20010000", "size": "0x00018000"}, "IROM1": {"start": "0x11000000", "size": "0x00001000"}}, "debug": "SVD/CM41x_M4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "240000000"}}, "LM3S5G56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1404-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E37HFBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADSP-CM419F-BCZ_M0": {"core": "Cortex-M0", "vendor": "Analog Devices:1", "algorithm": {}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M0_DFP.1.0.0.pack", "compile": {"header": "Device/inc/M0/CM41x_M0_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM41x_M0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x200F0000", "size": "0x00008000"}}, "debug": "SVD/CM41x_M0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32GG11B420F2048GL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048GL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F446VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F412RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F446VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F412RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F722IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM367FWXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M451RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "NUC200SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F245J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAM3A4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3A8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3A4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "ATSAMD11C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD11\\ATSAMD11C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HC32L110C6PA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B6_C6.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HC32L110C.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC804M101JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC804.h", "define": "LPC804M101JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC80X.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "HC32F156J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F156JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG895F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG895F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "Z32F12811ARS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F1281.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F1281.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F1281.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C28J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "S6E1A12C0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A12X0A.FLM": {"default": "1", "ramsize": null, "size": "0x16000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x16000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC4072FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1114FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3S2B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "NUC120RD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32TG232F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG232F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C59H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1104UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC1102_04.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF465K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F1252": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF116T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF465L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMV70Q19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}, "samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv70b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70b/svd/ATSAMV70Q19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "Mini51TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAM4CMP32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM32/Include/sam4cm32.h", "define": "__SAM4CMS32C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4CM32/ATSAM4CMP32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1402-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF566K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F302C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F207IC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "TM4C129LNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129LNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM462F10XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG1B132F128GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F128GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F0008_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0008"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F0008.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "XMC4400-F100x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4400_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1301-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2DF5J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L4R5QI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM370FYDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM370_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M370.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32GG395F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG395F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG395F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F058R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L071CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "N572F065": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N572Fxxx.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\N572F065_v3.svd", "processor": {"clock": "48000000"}}, "EZR32LG230F64R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F64R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123GE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG230F64R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M485KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1301-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F131E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F131E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG230F64R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO112VC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ATSAMV71N19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71b/svd/ATSAMV71N19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "TM4C123GE6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123GE6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C29J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L433RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32LG895F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG895F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC20E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F777VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MK40DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "SKEAZN16xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": null, "size": "0x00000100", "ramstart": null, "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "NANO110KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9AF311K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF311N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM366FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG840F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG840F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32HG220F32R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "M451MRC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "Mini58LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32LG332F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG332F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2776": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2776.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L071C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF216S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32GG11B510F2048GL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048GL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "NUC131SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L433CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD10D13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD10\\ATSAMD10D13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4088FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G280F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G280F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F773S": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F773T": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G210F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G210F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G210F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MAX71637": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "MAX71636": {"core": "Cortex-M3", "vendor": "Maxim:23", "algorithm": {"Flash/MAX716xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\max716xx.h", "define": "MAX71637"}, "pdsc_file": "http://www.keil.com/pack/Keil.ZEUS_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x00400000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "108000000"}}, "MK21DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG840F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG840F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG840F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM440F10XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM440_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM440.h", "define": "TMPM440F10XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Configurable", "clock": "100000000"}}, "LM4F111B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F111B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M052LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "HT32F0008_46QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0008"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F0008.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "ATSAMD11D14AM": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11D14AM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE18F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE18F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD11D14AS": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11D14AS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429NE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK20DN32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1751": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1751.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1294NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1294NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F429NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11A04UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG11B840F1024IL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024IL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAME51J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAME51J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "TM4C129CNCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129CNCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1403-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F122E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F122E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK64FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "arm/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK64F12_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK64FX512VMD12"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK64F12_DFP.pdsc", "debug": "MK64F12.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M2351KIAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M2351_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M2351_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS_MKROM.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M2351\\Include\\M2351.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M2351_v1.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "64000000"}}, "LM3S9L71": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9l71.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L051R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F415OG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32LG380F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG380F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54102J512BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAMS70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LPC11U35FET48/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F1656_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "AC33MA384A": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33MA384A/Flashloader/AC33Mx384A_384.flm": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33MA384A\\Core\\include\\AC33Mx384A.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33MA384A\\SVD\\AC33Mx384A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG11B820F2048GL152": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GL152.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "HC32L110B6PA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B6_C6.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HC32L110B.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F303R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC54606J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54606_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54606J256BD100"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54606_DFP.pdsc", "debug": "LPC54606.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1549JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32GG11B840F1024GL152": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GL152.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MKL04Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3X4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3X4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "LPC11E67JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SKEAZ128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P128KB.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/SKEAZ1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32GG890F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG890F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG890F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123SC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M481LGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMD21G18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2G28J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g2xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F732VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL16Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1302-Q024x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32WG330F64R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G230F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G230F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG222F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F078CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3826": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s3826.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L471QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L471QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F12366_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC43S20": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NANO100LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32LG980F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG980F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F405ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S9B95": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b95.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F405ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S9B96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S9B90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32G230F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G230F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52331_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52352_64LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1B132F256GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F256GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "XMC4108-Q48x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L051R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L4S5VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F303RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F048G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U67JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F303RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMG54J19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54J19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "ATSAMDA0G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152VBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKM33Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM33Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF114R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "HT32F50220_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "PAC5250": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2H46F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF114N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L496AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2D35J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG895F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG895F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG880F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG880F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG880F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM461F10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM461_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M461.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC120LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L031C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L452VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG222F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG222F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG222F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC54616J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "ATSAME70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAME70Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F423MH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S9GN5": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9gn5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1231C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1231C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF312N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32JG1B100F256GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F256GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F401CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F469NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F303R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "M0516LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF312R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MK12DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NUC230RC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F469NE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F722ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F746VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC4104-F64x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM373FWDUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M373.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F722ZC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMDA0J14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F2641J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1224FBD64/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "STM32F746VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "GD32F330F6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "GD32F130K8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F407ZE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG11B420F2048IQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048IQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F042T6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B420F2048IL112": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048IL112.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "CMSDK_CM0plus": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM0plus/Include/CMSDK_CM0plus.h", "define": "CMSDK_CM0plus"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM0plus.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "GD32F130K6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130K4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1510LC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG11B520F2048IQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048IQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F302R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MCIMX6Y7": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32F302R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C129DNCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129DNCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "R7S72100": {"core": "Cortex-A9", "vendor": "Renesas:117", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.RZ_DFP.1.1.0.pack", "compile": {"header": "Device/Include/RZ_A1H.h", "define": "RZ_A1H"}, "pdsc_file": "http://www.keil.com/pack/Keil.RZ_DFP.pdsc", "memory": {}, "processor": {"fpu": "DP_FPU"}}, "SN32F246J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6Y1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6Y0": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32L073VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F12366_46QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F427II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F779NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F427IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F072CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF524K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L162QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L051C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF524L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF524M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF466N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF466K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460L/Include/mb9b460l.h", "define": "MB9BF466L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMR21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5B91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5b91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC505DL13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "NM1820ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF466R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L486VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC442VI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "EZR32WG330F256R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4C16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}, "Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK21FN1M0xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MK21FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK21F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG995F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG995F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM381FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM381_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M381.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC54628J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54628_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54628J512ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54628_DFP.pdsc", "debug": "LPC54628.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L151V8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAME53J20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME53J20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32L476JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF514N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32WG842F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG842F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F256R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME53N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME53N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "TM4C123GH6ZRB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6ZRB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32HG220F32R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG220F32R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF164K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F072C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52243_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC123ZD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "HT32F52342_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F256R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L073V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMC21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD10C13A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\SAMD10\\ATSAMD10C13A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120VE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAM4SA16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SA16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SA16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SA16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MK53DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK53D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F302RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1224FBD48/121": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "EFM32GG290F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG290F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG290F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4800-E196x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F030K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM34Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM34ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC125LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF568M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC845M301JBD48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "MB9BF404R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C4AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9BF404N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4800-F100x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "GD32F350C4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "LPC11E12FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2G36J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g3xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2G36H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g3xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MKM14Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM14Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC120RD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F758F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F350C8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "LM3S1958": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1958.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MIMXRT1051": {"core": "Cortex-M7", "vendor": "NXP:11", "algorithm": {"Flash/MIMXRT105x_HYPER_256KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x4000000", "ramstart": null, "start": "0x60000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.iMXRT_DFP.1.0.2.pack", "compile": {"header": "Device/Include/MIMXRT1052.h", "define": "MIMXRT1052"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.iMXRT_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IRAM2": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MIMXRT1051.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MIMXRT1052": {"core": "Cortex-M7", "vendor": "NXP:11", "algorithm": {"Flash/MIMXRT105x_HYPER_256KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x4000000", "ramstart": null, "start": "0x60000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.iMXRT_DFP.1.0.2.pack", "compile": {"header": "Device/Include/MIMXRT1052.h", "define": "MIMXRT1052"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.iMXRT_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IRAM2": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MIMXRT1052.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "M4LEDLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32WG842F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG842F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC131LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "nRF51802_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "LPC4337": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "MKV10Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P128_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV10Z1287.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "DS_CM3": {"core": "Cortex-M3", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_DSx_BSP.1.1.0.pack", "compile": {"header": "Device/DS_CM3/Include/DS_CM3.h", "define": "DS_CM3"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_DSx_BSP.pdsc", "memory": {}, "debug": "SVD/DS_CM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LPC4333": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC4330": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F217VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F217VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F774S": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F411VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "ARMv8MML_DSP_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MKL04Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F765NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM4F132H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F132H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MK61FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK61F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F330G8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "LM4F132H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F132H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1231D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1231D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F051R6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA0E14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0E14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F767NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKV46F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV46F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F358VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32G200F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G200F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52243_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC11U24FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MIMXRT1052xxxxx": {"core": "Cortex-M7", "vendor": "NXP:11", "algorithm": {"Flash/MIMXRT105x_QSPI_256KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x800000", "ramstart": null, "start": "0x60000000"}, "Flash/MIMXRT105x_HYPER_256KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x4000000", "ramstart": null, "start": "0x60000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MIMXRT1052_DFP.2.3.0.pack", "compile": {"header": "Device/Include/fsl_device_registers.h", "define": "CPU_MIMXRT1052DVL6A"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MIMXRT1052_DFP.pdsc", "debug": "SVD/MIMXRT1052.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "600000000"}}, "GD32F350CB": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "nRF51824_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "EFM32GG11B310F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B310F2048GQ100"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B310F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "HC32F156KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32F156KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L052C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F038K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S8733": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8733.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L152C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9BF366R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC4076FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG320F32R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32TG840F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG840F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32HG320F32R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ARMCA9": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCA9/Include/ARMCA9.h", "define": "ARMCA9"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "LM3S8933": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8933.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NM1823ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S8930": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8930.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C19J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32WG232F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG232F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC123SD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "TM4C129ENCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129ENCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1345FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L471ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MCIMX7S5": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7S5_A7.svd", "processor": {"fpu": "SP_FPU"}}, "STM32F205VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MCIMX7S3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_M4.h", "define": "iMX7D_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7S3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "ATSAM3U4E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128_B1.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00100000"}, "Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00100000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U4E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M451VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M052ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1112FHI33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHI33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM4050": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM4x50.FLM": {"default": "1", "ramsize": null, "size": "0x7F000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/ADuCM4050/Releases/AnalogDevices.ADuCM4x50_DFP.3.0.0.pack", "compile": {"header": "Include/ADuCM4050.h", "define": "__ADUCM4050__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/ADuCM4050/Releases/AnalogDevices.ADuCM4x50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x7F000"}}, "debug": "SVD/ADuCM4050.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "52000000"}}, "STM32F031E6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32HG220F64R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L4R7VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG220F64R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1857": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1850": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAMD10C14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD10\\ATSAMD10C14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1853": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC18S50": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32HG220F64R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "CMSDK_CM7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "CMSDK_CM0": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM0/Include/CMSDK_CM0.h", "define": "CMSDK_CM0"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM0.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "TLE9861QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9861.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x11007FFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0x7FFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MK30DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC18S57": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF416T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "GD32F450IG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32PG1B100F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F450IK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M058LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F450II": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC54618J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "MB9BF121K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF121J": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B120J_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xJ.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG332F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG332F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG332F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F0008_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0008"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F0008.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MB9BF321K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKV31F128xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV31F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC140RD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF121L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK10FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK10F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF416R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM4F130C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F130C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F469BE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3N00B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00400000", "size": "0x00004000"}}, "debug": "SVD/SAM3N/ATSAM3N00B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N00A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00400000", "size": "0x00004000"}}, "debug": "SVD/SAM3N/ATSAM3N00A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME70J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EFM32HG308F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG308F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG308F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "S6E2G38H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g3xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2G38J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G3XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G3/Include/S6E2G3xJ/s6e2g3xj.h", "define": "S6E2G38J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g3xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2HG4G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2HG4F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hgxf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NM1820LB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32TG842F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG842F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5762": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5762.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F102R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F102R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCM23": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM23/Include/ARMCM23_TZ.h", "define": "ARMCM23_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F038F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMS70J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F102R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M481SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32ZG210F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC4800-F144x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "M2351ZIAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M2351_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M2351_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS_MKROM.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M2351\\Include\\M2351.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M2351_v1.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "64000000"}}, "EFM32WG942F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG942F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1112FHN33/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F100C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1112FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG290F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG290F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F303CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MK24FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK24F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F22366_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "MKM33Z64Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM33ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAME54N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME54N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32L432KC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L432xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32WG330F64R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MKL15Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F64R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3X4E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000A0000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3XA/ATSAM3X4E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "EFR32BG1B132F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F429BE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E1A12B0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A12X0A.FLM": {"default": "1", "ramsize": null, "size": "0x16000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x16000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32TG230F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG230F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1403-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC43S57": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "LPC43S50": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F429BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC140LD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC100LE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L021F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4500-F144x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L011K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F413MG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M452VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L485JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L485xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F413MH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32WG230F256R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3S1B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32L443CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32WG330F128R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F100ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F303C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAME51J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME51J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EZR32WG330F128R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F128R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKE14F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE14F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EZR32LG330F128R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GH6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F091RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4088FET208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMV71Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71/svd/ATSAMV71Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32F102RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G890F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G890F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32H753XI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EFM32ZG108F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S2678": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2678.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1233C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1233C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1346FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM475FYFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TLE9844-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9844_2_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1100F000"}, "Flash/TLE9844_2.FLM": {"default": "1", "ramsize": null, "size": "0xF000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0x10000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F103TB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4700-F100x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMC21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC21/ATSAMC21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52253_46QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "M0516ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70/svd/ATSAMV70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "HT32F1653_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1517JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32TG232F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG232F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F072RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2CC9L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F150C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F150C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1343FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2GK8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gkxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11A12FBD48/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2GK8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gkxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32JG1B200F256GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F150C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L152V8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F415RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32LG895F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG895F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L072CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F071VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF565K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD51N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "NANO100NE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9AF344N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF344M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF344L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L011D4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "nRF51822_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F051K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9877QXA40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF322L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF322M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC100VD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ISD9360": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "M4TKLE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32GG942F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG942F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG942F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F071V8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2H44G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TMPM361FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32HG110F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG110F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFR32BG12P332F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P332F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P332F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1114FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKL24Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL24Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2620": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2620.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S3654": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3634.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F479VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S3651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F52341_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFE00"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F1251B": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F125x/ht32f125x.h"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/HT32F125x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA0G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F479VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF115R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAME70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F103T4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFR32BG1B232F256GM56": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F256GM56.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S5U91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5u91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H46E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F103T8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F437VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F101R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "HT32F50241_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F101R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "XMC1302-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F101R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LM3S1651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM330FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F437VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11A02UK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SN32F265J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC131LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EZR32WG230F256R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1P332F256GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P332F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P332F256GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM384FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M384.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA41N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA41L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM4F122H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F122H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F350R8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "GD32F170C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C2AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M453LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MK60FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK60F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "EFM32LG232F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG232F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F410R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L073CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L011G3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1114LVFHI33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F413VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "NUC130RE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG995F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG995F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG995F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F410RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S9792": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9792.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG880F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG880F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM366FWXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4SP32A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4SP_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4SP/sam4sp.h", "define": "__SAM4SP32A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00500000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4SP/ATSAM4SP32A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG980F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG980F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG980F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK12DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F350RB": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "EFM32GG11B120F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B120F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B120F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F415ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "HT32F1654_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF156R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1316FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK60FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK60F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG1V132F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F413VH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "SN32F247F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1827YB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L162RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L162RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F051C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L162RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32HG310F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG310F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG310F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAMR21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF467R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F103ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C123GH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F101RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32L476ME": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F101RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM068FWXBG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM06x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM068.h", "define": "TMPM068FWXBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M068.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Z32F06410AKS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0641.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0641.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0641.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMG53N19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG53\\samg53.h", "define": "__SAMG53N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG53\\ATSAMG53N19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "AC33M8128": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx128/Flashloader/ac33m8128_PFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33Mx128\\Core\\include\\AC33Mx128.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx128\\SVD\\AC33Mx128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32H753ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EFM32WG360F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG360F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "SN32F768F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C123GH6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC802M001JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC802.h", "define": "LPC802M001JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC802.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "NANO120LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "TM4C1297NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1297NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F745IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F745IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "IOTKit_ARMv8MBL": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_ARMv8MBL/Include/IOTKit_ARMv8MBL.h", "define": "IOTKit_ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F302RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L475VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC824M201JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "EFR32FG12P431F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P431F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P431F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NANO100SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "STM32L151V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L475VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F777ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM343FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S815": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s815.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L475VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2DH5GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMG51N18": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG51\\samg51.h", "define": "__SAMG51N18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD\\SAMG51\\ATSAMG51N18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG230F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG230F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3N26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s3n26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF516T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "SN32F248BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240B.h", "define": "SN32F240B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54616J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54616.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "MB9BF516S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "TM4C129CNCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129CNCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMC20E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120SD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "STM32L151RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NUC100VD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF405R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF40xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54607J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54607_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54607J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54607_DFP.pdsc", "debug": "LPC54607.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F103RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "M4TKVE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L082KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L082xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F12365_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F107RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C28H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9AFA31M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "SKEAZN32xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "SN32F759F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54101J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54101_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54101J256UK49"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54101_DFP.pdsc", "debug": "LPC54101.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF405N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B400A\\mb9b400r.h", "define": "MB9BF406R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF40xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U14FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1115FET48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK22FN256xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK22F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AFA31N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TMPM362F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M362.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32LG842F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG842F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG280F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG280F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AFA41M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM4S16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4S16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4S/ATSAM4S16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B520F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472HG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "MB9BF429S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF42xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "EFM32LG330F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG330F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF429T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF42xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "M052LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F378RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NUC100RE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L152R6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M481SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC100LD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKV58F1M0xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P1024_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x2F000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00100000"}}, "debug": "SVD/MKV58F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "HT32F52220": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NANO120ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "AC33GA256": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33GA256/Flashloader/AC33GA256_CDFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33GA256\\Core\\include\\AC33GA256.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33GA256\\SVD\\AC33GA256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32JG12B500F1024IM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024IM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F051R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG842F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG842F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1120DB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC11A11FHN33/001": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1435": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005C00"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1435.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "CMSDK_ARMv8MML_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML_DP.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "25000000"}}, "TMPM341FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM341_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "54000000"}}, "S6E2C2AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG360F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG360F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL33Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL33Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F217IE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F217IG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG350F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG350F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG350F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini54TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "TM4C123AH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123AH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H46G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H46X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2h4xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "S6E2C39H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NM1320LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1320_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1320_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1320_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NM1320AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO103SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1202-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4800-E196x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM364F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M364.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32L475JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ARMCM7_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "LPC812M101JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F413RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F038G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100RD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC120VD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "K32W022S1M2xxx": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/K32W0x2_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x01000000"}, "Flash/K32W0x2_P1024_4KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.1.0.0.pack", "compile": {"header": "Device/Include/K32W042S1M2_cm0plus.h", "define": "K32W042S1M2_CM0PLUS"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.pdsc", "memory": {"IRAM1": {"start": "0x09000000", "size": "0x00020000"}, "IRAM2": {"start": "0x08000000", "size": "0x00010000"}, "IROM1": {"start": "0x01000000", "size": "0x00040000"}}, "debug": "SVD/K32W022S1M2_cm4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "72000000"}}, "MK20DN64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C3AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC54616J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54616_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54616J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54616_DFP.pdsc", "debug": "LPC54616.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L053R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F246BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240B.h", "define": "SN32F240B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1549JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M0564RE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F450ZK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F091CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F450ZI": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_2MB.FLM": {"default": "1", "ramsize": null, "size": "0x0200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x070000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0200000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F405OE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F405OG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "ATSAMHA1G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000800"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG222F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG222F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F450ZG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x0100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F450ZE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F450 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x030000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1302-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "nRF51801_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x30000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "NUC240VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L475QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK70FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK70F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MK70FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK70F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG295F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG295F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S32K142": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/S32K142_P256_2KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.1.2.0.pack", "compile": {"header": "platform/devices/device_registers.h", "define": "CPU_S32K148"}, "pdsc_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "platform/devices/S32K142/S32K142.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "112000000"}}, "STM32L475JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L072RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF321M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF321L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1547JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "STM32L475QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK20DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F417VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32LG990F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG990F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32H753II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "TM4C1236H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1236H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1112FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC230SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LPC1112FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1112FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1404-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NUC122ZC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "STM32F437II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L072RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAME51N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME51N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32L051T8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF116S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF116R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC54101J512UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFR32BG1B232F128GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F128GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32MG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P232F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1402-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG332F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG332F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "STM32L152RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Mini52LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "NUC123ZC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9AF312N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG295F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG295F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG295F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM333FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EZR32LG330F128R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF218S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF218T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF116N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKM14Z64Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM14ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S610": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s610.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L4S7AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F423CH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M4TKRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32TG825F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG825F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKE02Z32xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MKE02Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P32KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "M0519LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F706BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L152R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG825F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG825F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG995F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG995F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG995F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1232C3PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_32.FLM": {"default": "1", "ramsize": null, "size": "0x008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x003000"}, "IROM1": {"start": "0x00000000", "size": "0x008000"}}, "debug": "SVD/TM4C123/TM4C1232C3PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF324L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMC20J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E68JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2D55GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC4078FET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M0518LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1112LVFHN24/003": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F031K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F031K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32HG108F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG108F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG108F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ARMCM4_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM4/Include/ARMCM4_FP.h", "define": "ARMCM4_FP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM4.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "NANO112SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "AC30M1332": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L162VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S9DN6": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9dn6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4S2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x20000"}}, "debug": "SVD/SAM4S/ATSAM4S2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "NANO120KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "TMPM37AFSQG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M37A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF118S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF118T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC4078FBD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F058C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B420F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54607J256BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "NUC200LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S6633": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6633.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32GG380F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG380F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG380F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54102J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF121M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKE18F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE18F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG990F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG990F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C38L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S5C56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG995F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG995F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120RD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F170R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF141N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32LG890F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG890F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1B132F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF141M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F429BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3S1A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LPC54606J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54606.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "ATSAM3S1C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3S/ATSAM3S1C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "MKL26Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG890F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG890F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LPC1224FBD64/121": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "EFM32GG11B820F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2H44F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMDA1E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1E15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32L4A6ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2H44E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H44X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H4/Include/S6E2H4xG/s6e2h4xg.h", "define": "S6E2H46G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h4xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LPC54113J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MT7687F": {"core": "Cortex-M4", "vendor": "MediaTek:129", "algorithm": {"tools/keil/mt7687/7687_32M_MXIC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://download.labs.mediatek.com/MediaTek.MTx.4.6.1.pack", "compile": {"header": "driver/CMSIS/Device/MTK/mt7687/Include/mt7687.h"}, "pdsc_file": "http://download.labs.mediatek.com/MediaTek.MTx.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x00100000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00200000"}}, "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "192000000"}}, "MKW35Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW35Z4.h", "define": "MKW35Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW35Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO103LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L162VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG395F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG395F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NM1200LBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC11E36FHN33/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M452LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAMC21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG880F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG880F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L031F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO120KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "STM32L031F6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "BlueNRG-1": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STBlueNRG1.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x28000", "ramstart": "0x200002CC", "start": "0x10040000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STBlueNRG_DFP.1.1.1.pack", "pdsc_file": "http://www.keil.com/pack/Keil.STBlueNRG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x10040000", "size": "0x28000"}}, "debug": "SVD/BlueNRG1.svd", "processor": {"fpu": "0", "endianness": "Little-endian"}}, "MCIMX7D3": {"core": "Cortex-A7", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.1.7.2.pack", "compile": {"header": "Device/Include/iMX7D_A7.h", "define": "iMX7D_A7"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX7D_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX7D3_A7.svd", "processor": {"fpu": "SP_FPU"}}, "NANO120SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "BlueNRG-2": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STBlueNRG2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x200002CC", "start": "0x10040000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STBlueNRG-2_DFP.1.0.0.pack", "pdsc_file": "http://www.keil.com/pack/Keil.STBlueNRG-2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x10040000", "size": "0x40000"}}, "debug": "SVD/BlueNRG2.svd", "processor": {"fpu": "0", "endianness": "Little-endian"}}, "MB9BF564L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO100ZD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "MB9BF564K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F50230_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF156N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA31L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AFA3xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF156M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "R-IN32M3-EC": {"core": "Cortex-M3", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M3_S25FL064P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29AL032D.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/R-IN32M3_S25FL032P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.1.3.0.pack", "compile": {"header": "Device/Include/RIN32M3.h", "define": "RIN32M3_EC"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M3_EC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "AC33M4064": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx064/Flashloader/AC33Mx064_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33Mx064\\Core\\include\\AC33Mx064.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx064\\SVD\\AC33Mx064.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B420F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C123BH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1402-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F398VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4800-F100x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "MKL14Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL14Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE02Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC802M001JDH16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC802.h", "define": "LPC802M001JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC802.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "EFM32PG1B200F256IM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256IM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC122LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "MKE02Z64xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00000100", "ramstart": "0x1FFFFC00", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TM4C1299KCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C1299KCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF312K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF312L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF312M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC54114J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54114_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC54608J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54608_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54608J512ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54608_DFP.pdsc", "debug": "LPC54608.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NANO130SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "HT32F1755": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "Mini54XFHC": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKW20Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW20Z4.h", "define": "MKW20Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW20Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2276": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2276.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L052T8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1233E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1233E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG395F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG395F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4350": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "MK64FN1M0VLL12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_SDK_DFP.2.3.0.pack", "compile": {"header": "platform/devices/fsl_device_registers.h", "define": "CPU_MK64FN1M0VLL12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "platform/devices/MK64F12/MK64F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC4353": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NANO102LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LPC4357": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "EFM32LG940F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG940F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1233E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKV42F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LPC54101J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4502-F100x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F767BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NM1100FAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TMPM343F10XBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV42F64xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP64_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV42F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32L011G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Mini55TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKL34Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL34Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6G1": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G0": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G3": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MCIMX6G2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/iMX6UL.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MB9BF366K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO110RD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "NUC505YLA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "S6E2C58L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MKS20FN128xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKS20F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "LM4F120H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F120H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1138": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1138.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AFA42N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA42M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK60FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK60FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK60F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "EZR32LG230F64R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG230F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK21DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1133": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1133.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U67JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "APOLLO512-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MK50DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NANO130SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "STM32F779BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11U68JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F769AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "QN9083C": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xC_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XC.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F769AG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC845M301JBD64": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAMC20G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG842F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG842F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAME70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "MKV56F512xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P512_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00080000"}}, "debug": "SVD/MKV56F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "NANO120LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ATSAMV71J19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71b/svd/ATSAMV71J19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32F215ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC11U35FHI33/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK51D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F745VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32PG1B200F128IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F128IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32JG1B200F128GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F128GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F217ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F217ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F217xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S2533": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2533.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG880F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG880F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG880F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM072FSUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M072.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MKL26Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM367FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F110E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F110E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1100-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L471VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK61FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK61F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "LM3S1R21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1r21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L471VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAML21J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21J16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P432F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MK28FN2M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x1FFC0000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK28F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "LPC11U34FBD48/421": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-Q040x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK10DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "HC32L110C4UA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B4_C4.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HC32L110C.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MCIMX6Y2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6Y2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC11U34FHN33/421": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32HG322F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG322F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG322F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AFA42L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F50230_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "HT32F52231_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2HG6F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32ZG210F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "HC32L150F8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L150FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C48L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC4402-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32ZG210F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini51FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAMC20E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/SAMC20/ATSAMC20E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G232F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G232F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1F16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s1f16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4402-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C4AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMG51G18": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG51\\samg51.h", "define": "__SAMG51N18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD\\SAMG51\\ATSAMG51G18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L083VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G280F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G280F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F231H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F231H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM073FSDUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M073.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F405ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32ZG210F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG210F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32HG308F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG308F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG308F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32GG940F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG940F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG940F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "AU9110LF3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/AU9100_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}, "Flash/AU9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/AU9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAM4LS4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC123SD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAM4LS4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LS4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F469AE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32GG230F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG230F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG230F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL25Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54607J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54607_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54607J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54607_DFP.pdsc", "debug": "LPC54607.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L152CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO100KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "NANO103ZD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO103\\Include\\Nano103.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO103AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1225FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "TMPM332FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M332.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G230F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G230F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G230F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M482LIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC54607J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54607.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "QN9083A": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xA_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908X.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "NUC123SC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LM3S9G97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9g97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "QN9083B": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xB_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XB.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "Mini58ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TLE9877QXW40": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF421L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A420L\\mb9a420l.h", "define": "MB9AF421L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF42xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF421K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A420L\\mb9a420l.h", "define": "MB9AF421L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF42xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F407RG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TM4C1299NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1299NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M453VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAM4N8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "ATSAM4N8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC4100-F64x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MK40DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32PG12B500F1024IM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024IM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1313FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11A14FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG840F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG840F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4500-F100x768": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0xC0000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMA5D34": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D34.svd", "processor": {"fpu": "DP_FPU"}}, "LPC1764": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2D55J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F048T6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-F064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F207ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S8938": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8938.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F1765_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F207ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "PAC5220": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMA5D31": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D31.svd", "processor": {"fpu": "DP_FPU"}}, "NUC029FAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC029AE\\Include\\NUC029FAE.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NUC029AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "MKL43Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1120EC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKV10Z16xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P16_1KB_SEC.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x00004000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKV10Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MKW21Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW21Z4.h", "define": "MKW21Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW21Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F427VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32G280F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G280F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G280F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M453RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9AF131M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF131L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F427VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM3U1E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x20080000", "size": "0x00002000"}, "IROM1": {"start": "0x00080000", "size": "0x00010000"}}, "debug": "SVD/SAM3U/ATSAM3U1E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC1313FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF131K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9BFD17S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "XMC1404-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S800": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC4078FET208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BFD17T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32TG232F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG232F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG232F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52241_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF567R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM4LC4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAM4L/ATSAM4LC4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21J15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG222F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32WG330F128R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F446MC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC4078FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M4LEDRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MKL25Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC43S70": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "MB9BF567N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF567M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NM1330LC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1330_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1330_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1330_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1330AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKM33Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM33Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO112LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "M058SZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70/svd/ATSAMV70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EFM32WG995F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG995F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F030RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F211E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F211E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M484SIDAE2U": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKV10Z32xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P32_1KB_SEC.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKV10Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LPC11U23FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG995F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG995F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F215ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1111FDH20/002": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G290F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G290F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMDA0G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1313FBD48/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L452CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L152QE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F423VH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "M453YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M0564LE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M451VG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LM4F110H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F110H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC1114FHN33/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32BG1B232F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MK22FX512Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F12365_46QFN": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LM3S9D90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF617S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF617T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F101T4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EFM32GG11B820F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMC20J17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20J17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C4AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1301-Q040x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F2451BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240B.h", "define": "SN32F240B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U37FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F745VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F101T8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "NM1120ZB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32WG895F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG895F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG895F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100VE3DE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L476JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC100VE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L431VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG309F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG309F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG309F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F070F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M451VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L031E4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKM13Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM13Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L031E6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2C3AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F330R8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "EFM32LG280F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG280F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F733IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC4315": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "STM32F412VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F446RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F412VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "QN9080B": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xB_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XB.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54102J512UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "XMC1402-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F446RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11U13FBD48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC125SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKL43Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1512": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MB9BF518T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC11U36FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1100-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F100VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF155M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F042C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L031K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK30DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "QN9080C": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xC_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908XC.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F330RB": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F469ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F042C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKV58F512xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P512_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00080000"}}, "debug": "SVD/MKV58F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "LM3S6952": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6952.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM4CP16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4CP/sam4cp.h", "define": "__SAM4CP16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CP/ATSAM4CP16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF155R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMG55G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG55\\samg55.h", "define": "__SAMG55J19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG55\\ATSAMG55G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKL27Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL27Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6950": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6950.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMR21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B820F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF521M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC804M101JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC804.h", "define": "LPC804M101JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC80X.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "EFR32BG1B232F128GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F128GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S2608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6V2": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6V2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC804M101JDH24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC804.h", "define": "LPC804M101JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC80X.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "MB9BF521K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF142N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF142M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF142L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L151CBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L152QC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F437IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NM1520RD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC4367": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "ARMCM33_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "EFM32LG395F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG395F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM372FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M372.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2CC8H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S1R26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1r26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG330F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG330F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B320F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B320F2048GQ100"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B320F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MKL36Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M451MRE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F042K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042K4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G222F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11U35FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L4R5ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1202-T016x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E1A11C0A": {"core": "Cortex-M0+", "vendor": "Spansion:100", "algorithm": {"Flash/S6E1A11X0A.FLM": {"default": "1", "ramsize": null, "size": "0xE000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\S6E1A1\\s6e1a1.h", "define": "S6E1A12C0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM0plus_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\S6E1A1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFB44N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1112FHN24/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L072VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F50231_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32L4R7AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "APOLLO256-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1114FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FBD48/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F12345_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12345"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F12345.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "ARMCM33": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ADuCM361": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCMxxx_128.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x20000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM36x/Releases/AnalogDevices.ADuCM36x_DFP.1.0.2.pack", "compile": {"header": "Device/Include/ADuCM361.h", "define": "ADuCM361"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM36x/Releases/AnalogDevices.ADuCM36x_DFP.pdsc", "memory": {}, "debug": "SVD/ADuCM361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "16000000"}}, "MKL17Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL17Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG990F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG990F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F212E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F212E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC240SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "TMPM390FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM39x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM395.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M395.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32LG290F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG290F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL04Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL04Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF102R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM367FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M052LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M483SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L152QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5956": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5956.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F757F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MVF51NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF51NN151MK50.svd", "processor": {"fpu": "DP_FPU"}}, "LM3S5951": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5951.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF315M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK40DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF315N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G890F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G890F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1404-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F12366_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "NUC125ZC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAM4E8E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4E/ATSAM4E8E.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32WG230F256R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "LPC4078FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG942F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG942F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG942F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190T4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK02FN128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "arm/MK0x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK02F12810_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK02FN64VFM10"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK02F12810_DFP.pdsc", "debug": "MK02F12810.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM4F112C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F112C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1202-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F102C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L4A6AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32LG232F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG232F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1403-Q064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG842F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG842F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG842F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F102C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCM23_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM23/Include/ARMCM23_TZ.h", "define": "ARMCM23_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F102C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_MD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F102xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F111H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F111H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32GG900F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG900F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG900F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini55LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M481LIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1201-T028x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1100-Q024x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Z32F06423AKE": {"core": "Cortex-M0", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F0642.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F0642.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F0642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "APOLLO256-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF305N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F746ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F746ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TM4C1230H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1230H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC822M101JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "NUC130VE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC230SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L083RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKV31F512xxx12": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKV31F51212.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L4S5QI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG1V132F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM4N16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4N/ATSAM4N16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1111FHN33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/101": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1342FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKL03Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG230F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG230F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK66FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK66F18.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ARMCA5": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCA5/Include/ARMCA5.h", "define": "ARMCA5"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F303C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFR32FG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC123ZC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LM4F122C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F122C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC21G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM361F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "MVF50NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NS151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "LPC1777": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MKE15Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE15Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32ZG222F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC824M201JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "MVF60NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "S6E2C18J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1115JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1402-Q048x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9843QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9843_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1100B000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9843.FLM": {"default": "1", "ramsize": null, "size": "0xB000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0xC000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "EFM32ZG222F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC100RC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32LG330F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG330F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG222F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG222F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MKL16Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F732RE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32LG230F256R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S9B92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "CMSDK_CM7_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM7/Include/CMSDK_CM7_DP.h", "define": "CMSDK_CM7_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM7_SP.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "MB9AF116N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK22FN128xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "arm/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK22F25612_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK22FN256VMP12"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK22F25612_DFP.pdsc", "debug": "MK22F25612.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF116M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC220LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO110RE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MK12DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK12D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F779AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F756BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11E14FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC230LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAM4E8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4E/ATSAM4E8C.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM36BFYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM365_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M36B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "PAC5210": {"core": "Cortex-M0", "vendor": "Active-Semi:140", "algorithm": {"Flash/PAC52XX.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.2.0.0.pack", "compile": {"header": "Device/Include/PAC52XX_device.h"}, "pdsc_file": "http://www.active-semi.com/keil_pack/Active-Semi.PAC52XX.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/PAC52XX.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F072R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC126RE4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFR32MG12P332F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P332F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P332F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MKW24D512xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW24D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMV71Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71/svd/ATSAMV71Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "ATSAMV71Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71/svd/ATSAMV71Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EZR32WG230F64R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF616S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F303VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MK70FN1M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK70F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "MK70FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK70F15.h", "define": "MK70FX512xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K70_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK70F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG320F32R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF616T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "nRF52832_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf52.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "EFM32WG230F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG230F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C19H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM4F121B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F121B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F410C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MB9BF618T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF61xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC120RE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F469BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1100-Q024x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L452RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF618S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B610T\\mb9b610t.h", "define": "MB9BF618T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF61xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAME51N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME51J19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME51N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "LPC11E68JBD64": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F469BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK10DX32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32LG995F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG995F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC230LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32JG1B100F256IM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F256IM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32BG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NUC220VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F350C6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "SN32F236J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54618J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54618_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54618J512ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54618_DFP.pdsc", "debug": "LPC54618.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9AFB44M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "TMPM366FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M452RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAM4E16E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4E/ATSAM4E16E.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAM4E16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4E_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4E/sam4e.h", "define": "__SAM4E8E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4E/ATSAM4E16C.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1547JBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32G800F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G800F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G800F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC43S67": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "TM4C1232H6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1232H6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F105RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO120SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9AF154M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF154N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM4S4B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S4A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4S_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM4S/ATSAM4S4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC54608J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "TM4C129ENCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C129ENCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32HG110F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG110F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG110F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "AC30M1464": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NM1530VE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L062K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L062xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L062x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L081KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L081xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F031G4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F0008_24QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0008"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F0008.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "STM32F031G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF154R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF15xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMD11C14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD11_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD11\\Include\\samd11.h", "define": "__SAMD11D14AS__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD11_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD11\\ATSAMD11C14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C123GH6ZXR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123GH6ZXR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4C32E": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C32/sam4c32.h", "define": "__SAM4C32E_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4C32/ATSAM4C32E_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4C32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C32/sam4c32.h", "define": "__SAM4C32E_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4C32/ATSAM4C32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKW40Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW40Z4.h", "define": "MKW40Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW40Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F1654_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L073RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L021D4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "version": "0.1.0", "STM32L073RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M453VE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32WG980F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG980F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1114FHN33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BFD18S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1114FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "K32W042S1M2xxx": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/K32W0x2_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x01000000"}, "Flash/K32W0x2_P1024_4KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.1.0.0.pack", "compile": {"header": "Device/Include/K32W042S1M2_cm0plus.h", "define": "K32W042S1M2_CM0PLUS"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.pdsc", "memory": {"IRAM1": {"start": "0x09000000", "size": "0x00020000"}, "IRAM2": {"start": "0x08000000", "size": "0x00010000"}, "IROM1": {"start": "0x01000000", "size": "0x00040000"}}, "debug": "SVD/K32W042S1M2_cm4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG295F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG295F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG295F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BFD18T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKL33Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL33Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110RD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "HT32F52241_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMD20J14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20J15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BFD16T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BFD1xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S2D93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s2d93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F131C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F131C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1332": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1332.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Mini51XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BFD16S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9BD10T\\mb9bd10t.h", "define": "MB9BFD18T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BFD1xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32GG11B520F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD20J17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK11DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD21J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NM1520RC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "HT32F50220_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "ATSAMD21J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334C4": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2HE6G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32L082CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L082xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF506N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F373CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF506R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAML21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21E17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21E17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMC21J18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21J18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1519JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MB9BF566L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF566N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG230F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG230F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF517S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKE04Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE04Z1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L476RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B110F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B110F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B110F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L476RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L476RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NUC220LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ARMCM0P": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM0plus/Include/ARMCM0plus_MPU.h", "define": "ARMCM0P_MPU"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0P.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MB9BF329T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF32xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "STM32F429NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ATSAM4C4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4C_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C4C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C49J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "MB9AF314N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF329S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF32xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MK60DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MB9AF314M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F2755_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG11B840F1024IQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024IQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F318K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4504-F100x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L431CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L431CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32WG390F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG390F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L475ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L151CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151CC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF428S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF42xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "XMC1404-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11A13FHI33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Axx\\LPC11Axx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Axx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F232E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F232E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M452LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L475ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F239F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC4370": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "204000000"}}, "EFM32TG210F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG210F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F705BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700B_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700B.h", "define": "SN32F700B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF428T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B420T\\mb9b420t.h", "define": "MB9BF429T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IRAM2": {"start": "0x1FFEC000", "size": "0x14000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF42xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "STM32L041K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO130KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9BF105R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF568R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC1100-T016x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C1233H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F051C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F268F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1112LVFHI33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9BF568N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560R/Include/mb9b560r.h", "define": "MB9BF568R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B560R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MK40DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "SN32F774T": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMSC300": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMSC300/Include/ARMSC300.h", "define": "ARMSC300"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMSC300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F765BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L151C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F1653_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1653_54"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F1653_54.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK30DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "M451RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "TMPM380FWDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM38x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M380.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA44M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA44L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AFA44N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA40NA\\mb9aa40n.h", "define": "MB9AFA44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFA4xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1404-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML22J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L4S7ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMDA1G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1G16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1G16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1G16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "TM4C129EKCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C129EKCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L486QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2GM8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gmxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F767VG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC442JI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "STM32L100RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L011K3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32LG980F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG980F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F767VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32TG210F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG210F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1439": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s1439.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2DF5GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MK20FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK20F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MVF61NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF61NN151MK50.svd", "processor": {"fpu": "SP_FPU"}}, "M451LD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32WG940F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG940F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMHA1G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMH_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMH_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00000400", "ramstart": null, "start": "0x00010000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.1.0.0.pack", "compile": {"header": "Device/SAMHA1/Include/samha1.h", "define": "__SAMHA1G16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMHA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x00000400"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/SAMHA1/ATSAMHA1G15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "nRF51822_xxAC": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "nRF51822_xxAB": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf51xxx_ecb.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf51xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF51"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\nrf51.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "16000000"}}, "EZR32HG320F64R55": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32WG230F256R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G18B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21G18B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML21\\ATSAML21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1231D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1231D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2DH5J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MKL82Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL82Z7.h", "define": "MKL82Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFA000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL82Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F256R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG230F256R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L4S9ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32PG1B200F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F205RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205RF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1810": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "NUC505DS13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "LPC1812": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1813": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1815": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1817": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L162RCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK20DN128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC802M001JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC802.h", "define": "LPC802M001JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC802.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "STM32L151C8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMD10D14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD10_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD10\\Include\\samd10.h", "define": "__SAMD10D14A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD10\\ATSAMD10D14A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2U93": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s2u93.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MK61FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK61F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK61FX512xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK61F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "NM1120TC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC126RG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TMPM036FWFG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM03x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM037.h", "define": "TMPM037FWUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M036.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "NM1520LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG11B110F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B110F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B110F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML22J18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22J18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F051R4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AFB44L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AB40NA\\mb9ab40n.h", "define": "MB9AFB44N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AFB4xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC4088FBD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F439NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F439NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L041E6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMC20J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC20/ATSAMC20J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1V132F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L052R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC130LD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32H743BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "LM3S9B81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9b81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F2755": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NM1120XC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC029TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC029_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC029_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC029AN\\Include\\NUC029xAN.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC029AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "Mini54FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "LPC1124JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x08000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC112x\\LPC112x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\LPC112x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C5AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F100V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1402-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F50220": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F091VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F091VC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F091xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L162ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1100-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F52230_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L471JE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L471JG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MVF50NS15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NS151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "LM3S9C97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9c97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F098RC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM440FEXBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM440_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM440.h", "define": "TMPM440F10XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Configurable", "clock": "100000000"}}, "STM32F767NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32GG11B120F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B120F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B120F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM462F15FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MVF60NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NN151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "XMC4504-F144x512": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F038C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L4R9VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4R9I_EVAL.FLM": {"default": "0", "ramsize": null, "size": "0x04000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM3S8B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "SVD/SAM3SD8/ATSAM3S8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "EZR32WG230F128R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC54605J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54605_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54605J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54605_DFP.pdsc", "debug": "LPC54605.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "TMPM074FSUG": {"core": "Cortex-M0", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM07x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.1.3.0.pack", "compile": {"header": "Device/Include/TMPM074.h", "define": "TMPM074FSUG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M074.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1302-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK20DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32LG230F256R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32H753VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "Mini58TDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1225FBD64/321": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_80.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x14000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x14000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "EZR32WG230F128R60": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R60.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F64R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG230F64R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG360F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG360F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG280F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG280F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF368R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF368M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF368N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F301R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF167N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "Mini57XDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF167M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32TG840F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG840F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG840F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S8738": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8738.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF304N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ADuCM3027": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM302x.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.2.0.0.pack", "compile": {"header": "Include/ADuCM3029.h", "define": "__ADUCM3029__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/ADuCM302x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "26000000"}}, "ATSAMC21N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21N/ATSAMC21N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1311FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F50230_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32GG390F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG390F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG390F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52342_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1635": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1635.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM3029": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADuCM302x.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.2.0.0.pack", "compile": {"header": "Include/ADuCM3029.h", "define": "__ADUCM3029__"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM302x/Releases/AnalogDevices.ADuCM302x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x20040000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/ADuCM302x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "26000000"}}, "STM32F100VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MKW21Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW21Z4.h", "define": "MKW21Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW21Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F130H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F130H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F100VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "SN32F7651BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L476ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF141L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_DualWflash32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}, "Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF304R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC21/ATSAMC21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "Mini54TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "K32W032S1M2xxx": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/K32W0x2_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x01000000"}, "Flash/K32W0x2_P1024_4KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.1.0.0.pack", "compile": {"header": "Device/Include/K32W042S1M2_cm0plus.h", "define": "K32W042S1M2_CM0PLUS"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K32W_DFP.pdsc", "memory": {"IRAM1": {"start": "0x09000000", "size": "0x00020000"}, "IRAM2": {"start": "0x08000000", "size": "0x00010000"}, "IROM1": {"start": "0x01000000", "size": "0x00040000"}}, "debug": "SVD/K32W032S1M2_cm4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S8730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F110B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F110B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO102ZB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32GG11B840F1024IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C123BH6ZRB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6ZRB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32ZG108F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC130RC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO130KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "S6E2C5AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F415VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F415xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "XMC1201-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F373C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF505N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2GM8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GMXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GM/Include/S6E2GMxJ/s6e2gmxj.h", "define": "S6E2GM8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2gmxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F072VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2G28H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2g2xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32GG11B840F1024IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F50220_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "NANO100KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9BF505R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "nRF52832_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\nrf52.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "IOTKit_CM23": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM23/Include/IOTKit_CM23.h", "define": "IOTKit_CM23"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM23.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LPC844M201JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAM4CMS8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1403-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20J18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1233D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF115N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF115M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMC20G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMD20J16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20J16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "Mini55ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F072V8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F072xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1233D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F373CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F031F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F031F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK22DN512xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF117S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF11xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFR32BG1V132F128GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F128GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "M058SSAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M452YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M487SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF168N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "M054LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF168M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F405VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32G890F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G890F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G890F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF168R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAME70N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAME70N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAME70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAME70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "EFM32HG222F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG222F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG222F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F407VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "TMPM475FZFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M451SC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EZR32WG230F128R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG230F128R68": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG230F128R68.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4N8A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4N/ATSAM4N8A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32WG332F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG332F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "TMPM383FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2D35G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F301K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1960": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1960.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L496ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F52253_64LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L151RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M058ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F301K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L151RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M058ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC4200-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4200_4100_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4200_series/Include/XMC4200.h", "define": "XMC4200_Q48x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x5FC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4200.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF412R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "M452LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAMA5D33": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D36"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D33.svd", "processor": {"fpu": "DP_FPU"}}, "STM32F373VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F769BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32TG110F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG110F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF412N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "HC32L157KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L157KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAML22N18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\SAML22\\ATSAML22N18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMV70Q20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70b/svd/ATSAMV70Q20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MKL16Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F769BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9AFA32L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AFA32M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AFA32N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9AA30N\\mb9aa30n.h", "define": "MB9AFA32N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AFA3xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F423ZH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F423xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "MKW01Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW01Z4.h", "define": "MKW01Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKW01Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F120B2QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_32.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LM4F120B2QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F1755_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HC32L157K8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L157KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S817": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s817.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472JI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "M453VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "A33G526": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"A33G52x/Flashloader/A33G527_DFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x0F000000"}, "A33G52x/Flashloader/A33G527_CFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "A33G52x\\Core\\include\\A33G52x.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {"IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "A33G52x\\SVD\\A33G52x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "A33G527": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"A33G52x/Flashloader/A33G527_DFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x0F000000"}, "A33G52x/Flashloader/A33G527_CFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "A33G52x\\Core\\include\\A33G52x.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "A33G52x\\SVD\\A33G52x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LPC812M101JTB16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "S6E2G26J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g2xj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "M054ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L151R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TMPM366FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM14Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM14ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF122K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF122L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF122M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAM3S4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3S4B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3S4A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3S/ATSAM3S4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3N1B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00010000"}}, "debug": "SVD/SAM3N/ATSAM3N1B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L162VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG110F4": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32TG/EFM32TG110F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMG54G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "STM32L152C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AF144M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF144L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F107VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF144N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A140NA\\mb9a140n.h", "define": "MB9AF144N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF14xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S5K36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5k36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EZR32LG330F256R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120ZD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "NANO100KC3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32GG890F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG890F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG890F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L462CE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "NANO100NC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "LM3S1N11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1n11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F302K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG900F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG900F256"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG900F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "R-IN32M4-CL2": {"core": "Cortex-M4", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M4_MX25L6433F.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M4_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M4_DFP.1.0.1.pack", "compile": {"header": "Device/Include/RIN32M4.h", "define": "RIN32M4_CL2"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M4_CL2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "HC32L110B4PA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B4_C4.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HC32L110B.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC240LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F302K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F302x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "M058LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC100LD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "S6E2C39L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S301": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s301.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S300": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s300.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F439AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32HG320F64R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "S6E2HE4F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MKV44F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "TM4C1236E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1236E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD21G18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1316FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1114FBD48/323": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_48.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xC000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xC000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32JG12B500F1024GM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024GM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L4R5AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD51N20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51N20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "M452VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32GG11B820F2048IQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048IQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MK60DN256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.1.5.0.pack", "compile": {"header": "Device/Include/MK66F18.h", "define": "MK66FX1M0xxx18"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K60_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK60D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "NUC505DSA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "MKM38Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM38Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F0006_48LQFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0006"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F0006.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM369FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKV30F128xxx10": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV30F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32LG395F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG395F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG232F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG232F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4312": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "NUC505YO13Y": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "MKM33Z128Axxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM33ZA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1825": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x60000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x60000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "SN32F755J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54628J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54628.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "LPC1820": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_384_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_384_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x60000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1823": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1822": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F205VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MK10DX128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK51DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK51D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S9781": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9781.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKL16Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL16Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S1B21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1b21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F350G4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "XMC1100-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11U66JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407IK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1100-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32HG322F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG322F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG322F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM4F132C4QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F132C4QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L071K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC121SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAM3U4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3U_128_B1.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00100000"}, "Flash/ATSAM3U_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3U/Include/sam3u.h", "define": "__SAM3U4E__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00100000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20080000", "size": "0x00004000"}, "IROM1": {"start": "0x00080000", "size": "0x00020000"}}, "debug": "SVD/SAM3U/ATSAM3U4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32L433RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L4R9AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF367M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF367N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NUC122SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "EFM32G840F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G840F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5G31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NM1100FBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F767BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L041F6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F042G6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F1765": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO110SD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EZR32HG220F64R60": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32HG220F64R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG220F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG220F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NANO112SB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ARMCM4": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM4/Include/ARMCM4_FP.h", "define": "ARMCM4_FP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "MB9AF131N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF13xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "ARMCM0": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM0/Include/ARMCM0.h", "define": "ARMCM0"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMCM3": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM3/Include/ARMCM3.h", "define": "ARMCM3"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "EZR32WG330F256R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G840F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G840F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HC32M140F8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32M140FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32M140FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1N16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1n16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMC21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "CMSDK_CM4": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM4/Include/CMSDK_CM4_FP.h", "define": "CMSDK_CM4_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM4.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32L4S9VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC845M301JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32L083VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL36Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151R8xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M2351KIAAEES": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M2351_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M2351_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS_MKROM.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M2351_APNS.FLM": {"default": "0", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M2351\\Include\\M2351.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M2351_v1.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "64000000"}}, "EFM32LG380F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG380F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM14Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM14ZA5.h", "define": "MKM14Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM14Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L4S5AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L071KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC442JG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "S6E2GH8H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2ghxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ADSP-CM419F": {"core": "Cortex-M4", "vendor": "Analog Devices:1", "algorithm": {"Flash/CM41x_FlashB_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11080000"}, "Flash/CM41x_FlashA_512.FLM": {"default": "1", "ramsize": "0x10000", "size": "0x00080000", "ramstart": "0x10008000", "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM4xx_DFP.1.3.0.pack", "compile": {"header": "Device/inc/M0/CM41x_M0_device.h"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM41x/Releases/AnalogDevices.CM4xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x11080000", "size": "0x00080000"}, "IRAM1": {"start": "0x200F0000", "size": "0x00008000"}, "IRAM2": {"start": "0x10000000", "size": "0x00010000"}, "IROM1": {"start": "0x11000000", "size": "0x00080000"}}, "debug": "SVD/CM41x_M4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L071KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F2755_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "CMSDK_CM3": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM3/Include/CMSDK_CM3.h", "define": "CMSDK_CM3"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM3.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAMV71N20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71b/svd/ATSAMV71N20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MKL36Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ.FLM": {"default": "1", "ramsize": "0x00008000", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO100KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EZR32LG230F128R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F128R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6537": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6537.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9997": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9997.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F746NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EZR32LG230F128R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F746NE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MK10DN32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32LG230F128R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC844M201JBD48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "LM3S2110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MB9AF114L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF114M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF114N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK40DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK40D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "HT32F1655": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC140VE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG11B510F2048IL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048IL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMDA1E14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1E14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1E14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1E14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "MKL26Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL26Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TLE9869QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9869.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32LG840F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG840F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKV11Z64xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV1x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV11Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "ATSAMV70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70/svd/ATSAMV70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32L083CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M054LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM4F230E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F230E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54101J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L083CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F769F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1402-F064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F373R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1302-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F373RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F373RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F101V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "EFM32LG900F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG900F256"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG900F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F318C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2DH5JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F048C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F048xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52220_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1125JBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC112x\\LPC112x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC112x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKL27Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL27Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F334C6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F205ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2C18L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S1626": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1626.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG222F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG222F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG222F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC54606J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54606_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54606J256BD100"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54606_DFP.pdsc", "debug": "LPC54606.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1113FHN33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F107VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC200LD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9AF112L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC54113J256UK49": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L072V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NANO100ZD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LM3S6610": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6610.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "EFR32FG12P231F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P231F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P231F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMG55J19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG55\\samg55.h", "define": "__SAMG55J19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG55\\ATSAMG55J19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F330G4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "ATSAMC20J18AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20J18AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21E15BU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15BU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC472JG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "MK22FN1M0Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TM4C1231E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1231E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NUC131SC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC131\\Include\\NUC131.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC131AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S617": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s617.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9AF121K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A120L\\mb9a120l.h", "define": "MB9AF121L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML21E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML21_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IRAM2": {"start": "0x30000000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\SAML21\\ATSAML21E15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2D35GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAML21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML21_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IRAM2": {"start": "0x30000000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD\\SAML21\\ATSAML21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1231E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1231E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFR32BG1V132F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MVF50NN15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NN151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "M451MSC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "GD32F130C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130C4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO102LB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "NANO120ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "GD32F130C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMG53G19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG53\\samg53.h", "define": "__SAMG53N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG53\\ATSAMG53G19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E13FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32TG108F4": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32TG/EFM32TG108F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG11B120F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B120F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B120F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1201-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F190R6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "GD32F190R4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32WG330F256R55": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R55.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S3Z26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s3z26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F190R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMD51G18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAMD51G18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32TG108F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG108F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3N0B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N0C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N0A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00400000", "size": "0x00008000"}}, "debug": "SVD/SAM3N/ATSAM3N0A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F330C4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "GD32F330C6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "GD32F330C8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "LM4F130E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F130E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F50231": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "HT32F50230": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32L4A6VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "GD32F330CB": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "ATSAMV70J20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70b/svd/ATSAMV70J20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "NANO120LD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32WG230F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG230F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG230F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L452CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF132L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF132M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9AF132N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32HG309F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG309F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG309F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9AF132K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AF13x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A130N\\mb9a130n.h", "define": "MB9AF132N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3UltraLowLeak_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF13xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "STM32F722RE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL13Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL13Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F722RC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M0519SE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC4300-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4300_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4300c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4300_series/Include/XMC4300.h", "define": "XMC4300_F100x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x0FFC0"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4300.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S3739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC4500-F100x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "NUC442RI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "M0564RG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF504R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKV11Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P128_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV1x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV11Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFR32BG1P232F256GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P232F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P232F256GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F405RK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F768AI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC100LD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M0564VG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF504N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NUC123LC2AN1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MKV46F128xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP128_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKV46F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "NUC120VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F405RE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "S6E2C38J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "GD32F405RG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "XMC1402-T038x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L451VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM330FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L451VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1301-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NUC120RE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32HG310F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG310F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG310F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S5R36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5r36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1776": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1776.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F777II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "ATSAMC20E18A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_256_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x02000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/SAMC20/ATSAMC20E18A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF316M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF31xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF316N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9AF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MKL05Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4104-Q48x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F111E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F111E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "M052LAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M052_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG395F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG395F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG395F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1B232F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF316N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F765VI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKL17Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL17Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2CCAL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L052K8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG940F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG940F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "M484SGAAE2U": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC120RC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32G222F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G222F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L433CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TM4C1232E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1232E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32GG11B820F2048GL192": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GL192.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "NANO112RB1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ATSAMD51J20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51J20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "HT32F52241_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM4F120E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F120E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32PG12B500F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152CBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC802M011JDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC80x_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC802.h", "define": "LPC802M001JHI33"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC802.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "15000000"}}, "STM32L100C6xxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xBA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F302ZD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC4074FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F235J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32PG1B100F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1403-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "MK20DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S310": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s310.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MK20DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S316": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s316.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S317": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s317.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LPC11E37FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S315": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s315.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MK22DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK22D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32FG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P433F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF415R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMDA1G14B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1b/svd/ATSAMDA1G14B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "NM1827UB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMDA1G14A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x200"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "samda1/svd/ATSAMDA1G14A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "XMC4108-F64x64": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "HT32F52352_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B840F1024GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMV71Q19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71b/svd/ATSAMV71Q19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC1114FBD48/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F207IE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "Mini54ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "M452SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MKW41Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW41Z4.h", "define": "MKW41Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW41Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM341FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM341_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "54000000"}}, "NUC121LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC121_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC121_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC121_LD_4_5.FLM": {"default": "0", "ramsize": null, "size": "0x1200", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC121\\Include\\NUC121.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC121AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TLE9842-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9842_2_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x11009000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}, "Flash/TLE9842_2.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x800"}, "IROM1": {"start": "0x11000000", "size": "0xA000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1226FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "EFM32TG822F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG822F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG210F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG210F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG210F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2HE4E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE4X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2hexe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMD21E16BU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG842F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG842F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG842F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ADuCM322i": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM322.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F030C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG110F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1833": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x40000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x40000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC1830": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_256_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x1B000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF316R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1837": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "LPC11D14FBD100/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11D14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F350K6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "LPC18S30": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x18000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "GD32F350K4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "TMPM461F15FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM461_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M461.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC18S37": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "HT32F22366_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "HT32F0008": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0008"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F0008.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "MKL02Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK51DN256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK11DX256Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO120SE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "XMC1402-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMV71N21B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71b/svd/ATSAMV71N21B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "HT32F0006": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0006"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F0006.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL14Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL14Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF117T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF11xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "nRF52840_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\nrf52840.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "XMC1200-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S9790": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9790.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKL33Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFE000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL33Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMS70J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F446ME": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F446xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F446x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "M058LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32LG940F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG940F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKW41Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW41Z4.h", "define": "MKW41Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW41Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "XMC4700-F144x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM370FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM370_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M370.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9AF112N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L041G6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC442RG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "NANO102ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LM3S818": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s818.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMG54N19": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMG_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMG_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\SAMG54\\samg54.h", "define": "__SAMG54N19__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD\\SAMG54\\ATSAMG54N19.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F042F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MM32x031": {"core": "Cortex-M0", "vendor": "MindMotion:132", "algorithm": {"Flash/MM32x031_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x031_DFP.1.0.0.pack", "compile": {"header": "Device/Include/MM32x031.h", "define": "MM32x031"}, "pdsc_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x031_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/MM32x031.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F042F6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F429ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32L073CZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F50231_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFR32BG12P132F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P132F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P132F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S2671": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2671.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1347FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1315FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F429ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F429ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NM1824FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M0519LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0519_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/M0519_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0519_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0519\\Include\\M0519.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M0519AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKE02Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFE00", "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKE02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MK11DN512Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F401CB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401CC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401CD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LPC54608J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54608.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "NUC120VD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV71J20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71b/svd/ATSAMV71J20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MK65FN2M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK65F18_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK65FX1M0VMI18"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK65F18_DFP.pdsc", "debug": "MK65F18.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "Generic_Mini51_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "TMPM365FYXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM365_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M365.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1112FHN33/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKM32Z64xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP64_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKM32Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L083RB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "M451RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LM3S812": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s812.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM46BF10FG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM46B_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}, "IRAM2": {"start": "0x20080000", "size": "0x00800"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\M46B.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F479BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F479BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM3S5Y36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s5y36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC18S10": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "GD32F405VG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC120RC1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L052C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F411VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F411xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F411xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM470FDFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L021G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L021xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1302-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKV10Z64xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV11Z7.h", "define": "MKV11Z128xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV10Z1287.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EZR32HG320F32R61": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ATSAME53J19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME53J19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "XMC4800-F144x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "XMC1403-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32HG320F32R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L471ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L471xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LPC54113J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54113_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54113J128BD64"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54113_DFP.pdsc", "debug": "LPC54113.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L431KC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG230F128R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1317FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1225FBD48/321": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_80.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x14000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x14000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "STM32L431KB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG1V132F256GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F256GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "M483KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S828": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s828.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G880F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G880F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G880F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAME53N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME53N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "HT32F52352": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG12P132F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32BG12P/Include/em_device.h", "define": "EFR32BG12P132F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32BG12P/EFR32BG12P132F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF366N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F50220_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F50220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "MB9BF366L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF366M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003C000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F52241": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32WG330F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG330F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100VD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MVF60NS15xxxx40": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NS151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "MB9BF306N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF30xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F107F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\SN32F100.h", "define": "SN32F100"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F1_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "SN32F766BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC832M101FDH20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC832M101FDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC83x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F078VB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F078xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF306R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1C21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1c21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "CMSDK_CM4_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_CM4/Include/CMSDK_CM4_FP.h", "define": "CMSDK_CM4_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_CM4_FP.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ADuCM320": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM320.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1C26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1c26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC4700-F100x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM383FSUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM383_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M383.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L051C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK20DX32xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IRAM2": {"start": "0x1FFFF000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC4500-F144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "TLE9879QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9879.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1101EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0x1EFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F101T6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "MB9AF104N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L476MG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF104R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A100A\\mb9a100r.h", "define": "MB9AF104R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S5C36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32ZG108F16": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1402-T038x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F105VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1112JHI33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32WG330F64R61": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32WG/EZR32WG330F64R61.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MKE06Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE06Zxxx_P64KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE06Z4.h", "define": "MKE06Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKE06Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "Mini57FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini57_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini57_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/Mini57_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini57\\Include\\Mini57Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\MINI57DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F130R8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11U68JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO100LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "MB9BF102N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF10xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M453LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "HT32F52231_33QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF102R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B100A\\mb9b100r.h", "define": "MB9BF106R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF10xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1302-T028x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2DF5JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "XMC4700-E196x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L053R6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L053xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L053x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5D91": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d91.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "NANO130SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32LG360F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG360F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC130LC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F417VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "M4LEDLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "AC30M1432": {"core": "Cortex-M0", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC30M1x64/Flashloader/AC30M1x64_64.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack", "compile": {"header": "AC30M1x64/Core/include/AC30M1x64.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "AC30M1x64/SVD/AC30M1x64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "S6E2C48H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMD21E17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F256R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1827": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC18xx.h", "define": "LPC18xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1800_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC18xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "180000000"}}, "MVF50NN15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF50NN151MK40.svd", "processor": {"fpu": "DP_FPU"}}, "MB9BF324M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32PG1B100F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B100F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF324K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC220SC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32WG890F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG890F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1230E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1230E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2DF5G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO100SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAM4CMS32C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C32_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM32/Include/sam4cm32.h", "define": "__SAM4CMS32C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x01100000", "size": "0x100000"}, "IRAM1": {"start": "0x20100000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/SAM4CM32/ATSAM4CMS32C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMDA1E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1E15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F105V8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "Mini52ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAME53J18A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME53_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME53_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME53J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME53_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "svd/ATSAME53J18A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "EFM32LG390F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG390F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO120SC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32PG12B500F1024IL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG12B/Include/em_device.h", "define": "EFM32PG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32PG12B/EFM32PG12B500F1024IL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1202-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M487JIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32JG12B500F1024IL125": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024IL125.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG390F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG390F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG390F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG230F256R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "LPC54113J128BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/LPC54113.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MKW36A512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_D256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/KW36x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW36Z4.h", "define": "MKW36Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW36A4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1114LVFHN24/103": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U35FHN33/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1100DBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC1302-T038x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M058SFAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1518JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LPC54605J256ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54605.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "Mini54LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "STM32L431RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L431RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L431xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32MG12P132F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P132F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P132F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32LG332F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG332F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC140LE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32GG11B520F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L451RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M058ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32JG1B200F256IM48": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256IM48.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF414R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF41xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MK53DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK53D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK21DX256xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF414N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMS70Q19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70Q19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32L486RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TLE9877QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9877.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "M452YD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M451MLC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "NUC120LE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO100LC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "TMPM333FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32FG12P431F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P431F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P431F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "XMC1301-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKL43Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL43Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1B232F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG11B510F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "TMPM333FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM33x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M333.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32WG295F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG295F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "NM1100XBAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32WG942F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG942F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F101C4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "ATSAMD51G19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51G19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKE15Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE15Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF124L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF124M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MB9BF124K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF12xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKE16F512xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_D64_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MKE1x_P512_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKE16F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF514R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAM4N16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4N_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4N/sam4n.h", "define": "__SAM4N8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x00400000", "size": "0x100000"}}, "debug": "SVD/SAM4N/ATSAM4N16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "SN32F767BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKV44F64xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MKP64_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "M0564LG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0564_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0564_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0564_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0564\\Include\\M0564.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M0564AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV71Q21B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71b/svd/ATSAMV71Q21B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MKS22FN128xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.1.2.1.pack", "compile": {"header": "Device/Include/MKS22F12.h", "define": "MKS22FN256xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KSxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKS22F12.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32MG12P433F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P433F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P433F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "NM1200TAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NM1530VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "HC32L110C4PA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B4_C4.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HC32L110C.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L063C8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L063xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L063x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F745ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F745xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MKE14F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_4KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE18F16.h", "define": "MKE18F512xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKE14F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32GG11B510F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "NUC123LD4AN0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "TM4C123BH6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F328C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "Mini58FDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2_5.FLM": {"default": "0", "ramsize": null, "size": "0xa00", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini58\\Include\\Mini58Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\MINI58DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM4F212H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM4F212H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F769NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32LG295F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG295F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC472VG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "LPC1519JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MK30DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK30D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S1165": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1165.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F030R8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2HE6E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1162": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1162.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK51DX256xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK51D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2HE6F": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HE6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HE/Include/S6E2HExG/s6e2hexg.h", "define": "S6E2HE6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hexf.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "NANO112RC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO112\\Include\\Nano1x2Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO112AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "SN32F768BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC130RD2CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F301R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG11B510F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9U90": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u90.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L496QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S9U96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG840F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG840F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ADuCM322": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCM320.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x40000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.1.1.0.pack", "compile": {"header": "ADuCM322\\common\\ADuCM322.h", "define": "ADuCM322"}, "pdsc_file": "http://www.analog.com/media/en/engineering-tools/design-tools/AnalogDevices.ADuCM320_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\ADuCM322.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LPC11U68JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32G222F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G222F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G222F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4400-F64x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "MKL17Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL17Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5662": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5662.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L011D3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F412ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L476QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F412ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x00000210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F412Zx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F412xG.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L476QE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "XMC1403-Q064x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA1G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1G15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1G15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1G15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "STM32F429IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F429IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "NUC140LC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC811M001JDH16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_8.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x00002000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "MK21DX256Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L162ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L162xD"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32TG225F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG225F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM3S8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM3SD8/ATSAM3S8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "STM32F429II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F777NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F777xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7652BJ": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760B.h", "define": "SN32F760B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC200LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32H753BI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H753xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "EFM32PG1B200F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LPC4078FBD100": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S3J26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3j26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1786": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC177x_8x.h", "define": "LPC177x_8x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC178x7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG11B840F1024GL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S8630": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s8630.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Generic_Nano100_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "NUC505DLA": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC505_SPIFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC505\\Include\\NUC505Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC505_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "100000000"}}, "LPC1110FD20": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_4.FLM": {"default": "1", "ramsize": "0x03E0", "size": "0x1000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0400"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L496VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L496xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4CMS4C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMS4C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F765IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "SN32F7741J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F770_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F770.h", "define": "SN32F770"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F770.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52331": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMV71J19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv71/svd/ATSAMV71J19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "S6E2C39J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "SKEAZN64xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_P64KB.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": null, "size": "0x00000100", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SKEAZN642.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32GG11B510F2048GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B510F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B510F2048GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L041C4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "HT32F1765_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L063R8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L063xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L063x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ISD9130": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\ISD9100_v3.svd", "processor": {"clock": "48000000"}}, "MB9BF365L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF365K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG880F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG880F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG880F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF155N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A150R\\mb9a150r.h", "define": "MB9AF156R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9AF15xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F1656_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TLE9871QXA20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9871.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle987x.h", "define": "TLE9879QXW40;RTE_DEVICE_BF_STEP"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE987x_DFP.pdsc", "memory": {"IROM2": {"start": "0x11007FFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0xC00"}, "IROM1": {"start": "0x11000000", "size": "0x7FFC"}}, "debug": "SVD\\TLE987x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF518S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF51xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "Mini52ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "EFM32WG840F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG840F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG840F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F058T8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F058xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE06Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE06Zxxx_P128KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE06Z4.h", "define": "MKE06Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE06Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M058SLAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M058S\\Include\\M058S.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M058SAN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S102": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s102.h", "define": "LM3S102"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\lm3s102.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S101": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s102.h", "define": "LM3S102"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD\\lm3s101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "S6E2D55G0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF314N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF31xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKL27Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00010000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL27Z644.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120LD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M0516ZBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC54114J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5411x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5411x/chip_5411x/inc/chip.h", "define": "CHIP_LPC5411X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54114_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "MK40DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x0008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK40D10.h", "define": "MK40DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K40_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK40D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NUC120LD2DE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M453VC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "ATSAMV70N20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70b/svd/ATSAMV70N20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "HC32F146KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32F146FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32F146KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4CMP16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMP16C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "Mini51ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "NM1120DC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKM34Z128xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP128_1KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34ZA5.h", "define": "MKM34Z128Axxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKM34Z5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HC32F150F8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F150FX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1227FBD64/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "M451LC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32GG11B520F2048IL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048IL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F401RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401RB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "LM3S5D51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5d51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F207IF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F207IG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F401RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F401xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32F401RD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F4xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F401xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F401xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "CMSIS/SVD/STM32F401x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "84000000"}}, "STM32W108HB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32W108_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32W108_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\stm32w108xx.h", "define": "STM32W108HB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32W1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD\\STM32W108.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32L152ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1302-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F439ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LPC54605J512": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54605_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54605J256ET180"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54605_DFP.pdsc", "debug": "LPC54605.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "M485SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMD21E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE02Z16xxx2": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE02Zxxx_EE256B.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00000100", "ramstart": "0x1FFFFE00", "start": "0x10000000"}, "Flash/MKE02Zxxx_P16KB.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE02Z4.h", "define": "MKE02Z16xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKE02Z2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "TMPM369FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMC20J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC20N/Include/samc20.h", "define": "__SAMC20N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC20/ATSAMC20J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9AF112M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx02_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F303VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IRAM2": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "MB9AF112K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF11xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "LPC844M201JBD64": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAM4CP16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4CP/sam4cp.h", "define": "__SAM4CP16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CP/ATSAM4CP16B_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S811": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s811.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M451SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F042G4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F042x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x2.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F417IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "HT32F52342": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F407RE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFR32MG12P332F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P332F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P332F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG980F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG980F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG980F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC140RC1CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MVF60NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF60NS151MK40.svd", "processor": {"fpu": "SP_FPU"}}, "XMC1302-T016x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "NANO120LE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "NUC120VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M4TKLG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "M054LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NM1520LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1500_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1500_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1500_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NM1500_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMV70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70/svd/ATSAMV70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "MB9BF165K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAMDA1E16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1E16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "MB9BF165L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "TMPM3H6FWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM3Hx_code_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/TMPM3Hx_data_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x30000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TXZ3_DFP.1.0.0.pack", "compile": {"header": "Device/Include/TMPM3H6.h", "define": "TMPM3H6FWFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TXZ3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M3H6.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMDA1E16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1E16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "NUC230LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F302VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32TG108F16": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/EFM32TG/EFM32TG108F16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L071RZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32WG360F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG360F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG360F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21G17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAML21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG990F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG990F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMDA0J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK20DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG990F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG990F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG990F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MWPR1516xxx": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKPR1516_P16KB.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00004000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWPR1516_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MWPR1516.h", "define": "MWPR1516xxx"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWPR1516_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MWPR1516.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC54101J512BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54101.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F031C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F12365": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M451MLD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "S6E2CCAJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "HT32F12366": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "HT32F52231": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F52230": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG11B820F2048GL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2C1AL0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC1226FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "NM1200LAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO100SD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "ATSAMV71J21B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71b/svd/ATSAMV71J21B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EFM32JG1B200F256GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC200VE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFR32BG1P232F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P232F256GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P232F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG11B120F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B120F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B120F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MCIMX6V7": {"core": "Cortex-A9", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.iMX6_DFP.1.5.0.pack", "compile": {"header": "Device/Include/iMX6SX_A9.h", "define": "iMX6SX_A9"}, "pdsc_file": "http://www.keil.com/pack/Keil.iMX6_DFP.pdsc", "memory": {}, "debug": "SVD/MCIMX6V7.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "EFR32BG1B132F128GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F128GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFR32BG1B132F256GM56": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F256GM56.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32L152ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F051C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ARMCM33_DSP_FP_TZ": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F334R8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L152ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F334R6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F031C4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F031x6"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4100-Q48x128": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4200_4100_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4200_4100c_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4100_series/Include/XMC4100.h", "define": "XMC4108_Q48x64"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x20000"}, "IRAM1": {"start": "0x20000000", "size": "0x2FC0"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/XMC4100.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAM4S8B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4S8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4S8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4S8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ARMCM7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM7/Include/ARMCM7_DP.h", "define": "ARMCM7_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM7.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "S6E2C59J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMD51P20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAMD51P20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "MKL03Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00002000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F427AG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK20DN512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK20D10.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "TMPM330FDWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAME70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAME7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME70N20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-E_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAME70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "LM3S2939": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2939.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD51P19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMD51_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMD51N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD51_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAMD51P19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "M0516ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF515N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F427AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F427xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F427x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF515R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF51xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC100LC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EZR32LG330F128R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G842F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32G/EFM32G842F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAMV71Q20B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71b/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv71b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71b/svd/ATSAMV71Q20B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "M482LGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M451LG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F101TB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LM3S5C51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s5c51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG380F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG380F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5632": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5632.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F303ZD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F303ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L443VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L443xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MKL02Z16xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P16_48MHZ.FLM": {"default": "1", "ramsize": "0x00000800", "size": "0x00004000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F070C6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "AC33M6128": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx128/Flashloader/ac33m8128_PFLASH.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33Mx128\\Core\\include\\AC33Mx128.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx128\\SVD\\AC33Mx128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32LG290F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG290F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM411F20XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM41xA_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/TMPM41xB_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM411_unitB.h", "define": "TMPM411F20XBG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20008000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M411_unitA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54102J256BD64": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "LPCOpen/lpc5410x/chip_5410x/inc/chip.h", "define": "CHIP_LPC5410X"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x00010000"}, "IRAM2": {"start": "0x02010000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/LPC54102_cm4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32JG12B500F1024GL125": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/FlashGECKOS1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG12B/Include/em_device.h", "define": "EFM32JG12B500F1024IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG12B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32JG12B/EFM32JG12B500F1024GL125.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMC21J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_32_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00400", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x08000"}}, "debug": "SVD/SAMC21/ATSAMC21J15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M453RG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFR32BG1B132F128GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F128GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F723VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32WG330F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG330F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F12345_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12345"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F12345.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "STM32F746BG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F746BE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F746xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC100LD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "SN32F247BF": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240B_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240B.h", "define": "SN32F240B"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M453RD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32L072CB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4800-F144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4800_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0x1FFC0"}, "IRAM2": {"start": "0x1FFEE000", "size": "0x12000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "TMPM462F15XBG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM462_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM46B.h", "define": "TMPM46BF10FG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20030000", "size": "0x00400"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\M462.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32L476VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HC32L110C6UA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L110B6_C6.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.1.0.0.pack", "compile": {"header": "Device/Include/HC32L110B.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L110.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HC32L110C.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L476VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L476xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD20E18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4076FBD144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IRAM2": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMD20E15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M453LE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "LM3S3W26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s3w26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG11B840F1024GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF468M": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF468N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32WG395F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG395F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2C29L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F733VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TMPM330FYWFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM330_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM333.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M330.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF565L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B560L/Include/mb9b560l.h", "define": "MB9BF566L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003D000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD/MB9B560L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "Mini51TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "XMC1401-F064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "Mini52XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC140RE3CN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100CN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32LG842F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG842F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F071CB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S5T36": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s5t36.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1290NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1290NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TM4C123FH6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123FH6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F756ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20010000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F756xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {}, "debug": "CMSIS/SVD/STM32F7x6_v1r1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NUC122SC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "ATSAM3N2A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N2B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N2C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3N/ATSAM3N2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F071C8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F071xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151QC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC4800-E196x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32L151QD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151QE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S1620": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1620.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S1621": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1621.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1150": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s1150.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1625": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1625.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHI33/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1114FHI33/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF417S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1315FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S8530": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s8530.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M453RE6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M451_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9BF417T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NANO100ZC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "LM3S8538": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s8538.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG842F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG842F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG842F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32BG1V132F128GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1V/Include/em_device.h", "define": "EFR32BG1V132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFR32BG1V/EFR32BG1V132F128GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "SKEAZ64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P64KB.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/SKEAZ1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S9U81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L152VCxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC240LE3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "XMC1301-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MKV44F256xxx16": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKV4x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV46F16.h", "define": "MKV46F256xxx16"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV44F16.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32L462RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L462xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG320F64R67": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC11U24FET48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "TM4C1237D5PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1237D5PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF322K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B320T\\mb9b320t.h", "define": "MB9BF329T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF32xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2CCAH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F765ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "M0516ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC4072FET80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32TG822F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG822F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG822F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32LG332F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG332F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1237D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1237D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F756J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F750_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F750"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M0516LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F767ZG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F767ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F767xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x7_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NANO120LC2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32ZG110F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK30DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG380F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG380F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC4800-F100x2048": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_2048.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4800_series/Include/XMC4800.h", "define": "XMC4800_F100x1024"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x200000"}, "IRAM1": {"start": "0x20000000", "size": "0x3FFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "SVD/XMC4800.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "STM32F105VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F105xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC4700-E196x1536": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4800_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4800c_1536.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4700_series/Include/XMC4700.h", "define": "XMC4700_F100x1536"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x180000"}, "IRAM1": {"start": "0x20000000", "size": "0x2CFC0"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x180000"}}, "debug": "SVD/XMC4700.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "144000000"}}, "HT32F52243_64LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F350G6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "ISD9361": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9300_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/ISD9300_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9300_AP_145.FLM": {"default": "1", "ramsize": null, "size": "0x24400", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x24400"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "S6E2D55JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D5_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D5/Include/s6e2d5.h", "define": "S6E2D55JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "LM3S1D21": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1d21.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMD20G17": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G17.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M482SGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S1D26": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1d26.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ARMv8MML_DP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ATSAMD20G16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM4F212H5BB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F212H5BB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFR32MG12P432F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P432F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P432F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMV71J21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "samv71/svd/ATSAMV71J21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "ATSAMV71J20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv71/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv71/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv71b/include/sam.h", "define": "__SAMV71N20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv71/svd/ATSAMV71J20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32F769IG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_1024dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L475RE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAML22N17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML22_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML22\\ATSAML22N17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32G840F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G840F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G840F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKV56F1M0xxx24": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV_P1024_8KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV58F24.h", "define": "MKV58F1M0xxx24"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x2F000000", "size": "0x00010000"}, "IROM1": {"start": "0x10000000", "size": "0x00100000"}}, "debug": "SVD/MKV56F24.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "240000000"}}, "STM32F769II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L475RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L475xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "IOTKit_ARMv8MML": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_ARMv8MML/Include/IOTKit_ARMv8MML.h", "define": "IOTKit_ARMv8MML"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "LM3S1J16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1j16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1J11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1j11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F0006_64LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F0006"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x1FE00"}}, "debug": "SVD/HT32F0006.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52342_64LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52342_52"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52342_52.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC122LC1AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC122\\Include\\NUC122.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC122_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "60000000"}}, "EFM32HG210F64": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG210F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32HG/EFM32HG210F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S2616": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2616.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HT32F1656_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NM1823LB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC812M101JD20": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F439BI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EZR32LG330F256R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F256R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M054ZDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "XMC4500-E144x1024": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4500c_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/XMC4500_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x0C000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4500_series/Include/XMC4500.h", "define": "XMC4504_F100x512"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x100000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/XMC4500.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG330F256R67": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R67.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC230SD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "XMC1402-Q048x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F439BG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK30DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MK30D10.h", "define": "MK30DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K30_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK30D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S9D96": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d96.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MKL03Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ_KL03.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00008000", "ramstart": "0x1FFFFE00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFE00", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL03Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAML21G16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IRAM2": {"start": "0x30000000", "size": "0x01000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML21\\ATSAML21G16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL27Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P256_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00040000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKL27Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2432": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2432.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1317FBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F100RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TLE9843-2QX": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9843_2_EEP.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1100C000"}, "Flash/TLE9843_2.FLM": {"default": "1", "ramsize": null, "size": "0xC000", "ramstart": null, "start": "0x11000000"}, "Flash/TLE984x_OPT.FLM": {"default": "1", "ramsize": null, "size": "4", "ramstart": null, "start": "0x10FFFFFC"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\tle984x.h", "define": "TLE9845QX"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE984x_DFP.pdsc", "memory": {"IROM2": {"start": "0x10FFFFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1000"}, "IROM1": {"start": "0x11000000", "size": "0D000"}}, "debug": "SVD\\TLE984x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "40000000"}}, "LPC1101LVUK": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x07E0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xxLV\\LPC11xxLV.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11xxLV_LPC111x_LV.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L071VB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L071xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L051K6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L051xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L051x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NUC126LG4AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC126_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC126_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC126_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC126\\Include\\NUC126.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC126AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MKW35A512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW35Z4.h", "define": "MKW35Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW35A4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F1655_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK11DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK11D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "S6E2DH5GJA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DH_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DH/Include/s6e2dh.h", "define": "S6E2DH5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DH.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F52220_24SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "NUC123LC2AE1": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "XMC1100-Q024x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM4LS2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LS2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LS8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LS2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFR32MG12P432F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P432F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P432F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F098VC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L4S7VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S7xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S7.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32HG320F32R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32H743ZI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "ATSAMDA0J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMDA0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.1.0.0.pack", "compile": {"header": "Device\\SAMDA0\\Include\\samda0.h", "define": "__SAMDA0J16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMDA0\\ATSAMDA0J16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L073VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L073xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S328": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s328.h", "define": "LM3S328"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\lm3s328.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "LPC11U37FBD64/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Mini51XLAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L4R9ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4R9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4R9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EZR32LG230F128R60": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R60.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32ZG110F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "NUC472KI8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "EZR32LG230F128R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG230F128R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG380F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG380F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S801": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s801.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32LG330F256R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG330F256R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32HG320F32R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EZR32HG/EZR32HG320F32R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EFM32ZG110F8": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG110F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32ZG/EFM32ZG110F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LM3S808": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s828.h", "define": "LM3S828"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s808.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L072VZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F303K6": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "HT32F22366": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LPC11U14FHI33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ADuCM360": {"core": "Cortex-M3", "vendor": "Analog Devices:1", "algorithm": {"Flash/ADUCMxxx_128.FLM": {"default": "1", "ramsize": "0x0800", "size": "0x20000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://download.analog.com/tools/EZBoards/CM36x/Releases/AnalogDevices.ADuCM36x_DFP.1.0.2.pack", "compile": {"header": "Device/Include/ADuCM361.h", "define": "ADuCM361"}, "pdsc_file": "http://download.analog.com/tools/EZBoards/CM36x/Releases/AnalogDevices.ADuCM36x_DFP.pdsc", "memory": {}, "debug": "SVD/ADuCM360.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "16000000"}}, "STM32F303K8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F303xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00003000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F303x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11U14FET48/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F230H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F230H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TM4C1237E6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1237E6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF364K": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9BF364L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360L/Include/mb9b360l.h", "define": "MB9BF366L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B360L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F215RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F215RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F215xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F21x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM369FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5P31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1403-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "M452RC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "nRF52810_xxAA": {"core": "Cortex-M0", "vendor": "Nordic Semiconductor:54", "algorithm": {"Flash/nrf52xxx_sde.flm": {"default": "0", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx.flm": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/nrf52xxx_uicr.flm": {"default": "1", "ramsize": "0x4000", "size": "0x1000", "ramstart": "0x20000000", "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.8.15.2.pack", "compile": {"header": "Device\\Include\\nrf.h", "define": "NRF52840_XXAA"}, "pdsc_file": "http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/NordicSemiconductor.nRF_DeviceFamilyPack.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x30000"}}, "debug": "SVD\\nrf52810.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "64000000"}}, "TM4C1237E6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C1237E6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F723IC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32F100R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F100R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_HD_VL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F100xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "TMPM374FWUG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M374.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F469II": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "M483SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NUC120LC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F150K8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S5P56": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s5p56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2H14G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "GD32F150K4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2H14E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2H14X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2H1/Include/S6E2H1xG/s6e2h1xg.h", "define": "S6E2H16G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x00004000"}, "IRAM2": {"start": "0x2003E000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/s6e2h1xe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "GD32F150K6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01800"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S32K148": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/S32K148_P1536_4KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x00000000"}, "addon_cmsis/Flash/S32K148_D512_4KB_SEC.FLM": {"default": "0", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.1.2.0.pack", "compile": {"header": "platform/devices/device_registers.h", "define": "CPU_S32K148"}, "pdsc_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00080000"}, "IRAM1": {"start": "0x20000000", "size": "0x0001F000"}, "IRAM2": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00180000"}}, "debug": "platform/devices/S32K148/S32K148.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "112000000"}}, "STM32F469IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MKL33Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL36Z4.h", "define": "MKL36Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL33Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F469IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MK10DN128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32WG232F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG232F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F070RB": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F070xB"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "IOTKit_CM33": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "ATSAMA5D44": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D44.svd", "processor": {"fpu": "DP_FPU"}}, "S6E2C49H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C4/Include/s6e2c4.h", "define": "S6E2C4AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C4.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L4A6QG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAMA5D41": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D41.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D42": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D42.svd", "processor": {"fpu": "DP_FPU"}}, "ATSAMA5D43": {"core": "Cortex-A5", "vendor": "Atmel:3", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.1.1.0.pack", "compile": {"header": "Device/Include/SAMA5D2.h", "define": "SAMA5D44"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMA5_DFP.pdsc", "memory": {}, "debug": "SVD/ATSAMA5D43.svd", "processor": {"fpu": "DP_FPU"}}, "EFM32GG290F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG290F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG290F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF115N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B110T\\mb9b110t.h", "define": "MB9BF118T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "M0516LDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F417ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F417ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F417xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F41x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32L072KZ": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_192.FLM": {"default": "1", "ramsize": null, "size": "0x00030000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00030000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "SN32F705J": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F700_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F700.h", "define": "SN32F700"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\SN32F700.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407RK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LPC11U24FHI33/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "N571P032": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/N571E000.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\N571P032_v3.svd", "processor": {"clock": "23000000"}}, "STM32L072KB": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07_8x_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001800", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L072xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00005000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ATSAM4LC2C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC2B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4LC2A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4L_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4L/sam4l.h", "define": "__SAM4LC8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAM4L/ATSAM4LC2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190C6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001800"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MKL17Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ_KL43.FLM": {"default": "1", "ramsize": "0x800", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL17Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F190C8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6611": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6611.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC472KG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "TM4C123BH6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C123BH6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "NANO130KD2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAMD21E15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1402-F064x0200": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x32000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21E15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21E15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1114JHN33/333": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_56.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0xE000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xE000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32BG1B132F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B132F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B132F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G290F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G290F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G290F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "GD32F130F4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC220SD2AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32LG942F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG942F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG942F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M481ZIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TMPM36BF10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040800"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M36B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "HT32F52243_46QFN": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32TG825F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG825F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG825F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MB9AF111K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A310_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF111L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx01_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A110A\\mb9a110n.h", "define": "MB9AF116N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF11xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F405RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F405xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32L4S5ZI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S5xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32TG230F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG230F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG230F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "NM1120FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "GD32F330F8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "XMC1201-T038x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "AC33M3064": {"core": "Cortex-M3", "vendor": "ABOV Semiconductor:126", "algorithm": {"AC33Mx064/Flashloader/AC33Mx064_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.2.pack", "compile": {"header": "AC33Mx064\\Core\\include\\AC33Mx064.h"}, "pdsc_file": "http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.pdsc", "memory": {}, "debug": "AC33Mx064\\SVD\\AC33Mx064.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F330F4": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "LM3S2948": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2948.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9D81": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d81.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F407ZE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "NANO110RC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "STM32F407ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EZR32WG330F256R67": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R67.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1202-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK10DX128xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAME54N19A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "svd/ATSAME54N19A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "TMPM470FYFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\M470.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32GG232F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG232F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG232F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32WG330F256R69": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32WG/EZR32WG330F256R69.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF164L": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_512.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160L/Include/mb9b160l.h", "define": "MB9BF166L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003E000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/MB9B160L.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32LG280F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG280F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1811": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1811.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK20FN1M0xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK20F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F103R4": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x08000000", "size": "0x4000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1816": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1816.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103R6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MVF61NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF61NS151MK50.svd", "processor": {"fpu": "SP_FPU"}}, "TMPM343FEXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM343_768.FLM": {"default": "1", "ramsize": null, "size": "0x000C0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM343.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x000C0000"}}, "debug": "SVD/M343.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F407IG": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_1MB.FLM": {"default": "1", "ramsize": null, "size": "0x0100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC240LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_LD_8.FLM": {"default": "0", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC230_240\\Include\\NUC230_240.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "GD32F407IE": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_512KB.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F407 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x080000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32LG295F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG295F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG295F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L151VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_512_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000028", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_512_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00014000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_384_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000020", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32L1xx_384_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00003000", "ramstart": null, "start": "0x08080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_256_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_256_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000018", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "SVD/STM32L15xC.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L1xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1301-Q040x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F101ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "QN9080A": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/QN908xA_512K.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x80000", "ramstart": "0x04000400", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.1.1.4.pack", "compile": {"header": "Device/Include/QN908X.h"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.QN908x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x04000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/qn908XA.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F101ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x14000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101ZD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "STM32F101ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F101xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "36000000"}}, "LPC1549JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x9000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "M054LDN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "TM4C129XKCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_512.FLM": {"default": "1", "ramsize": null, "size": "0x080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x080000"}}, "debug": "SVD/TM4C129/TM4C129XKCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF416S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC1112FD20/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF468R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20038000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "MB9AF342M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF342L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9AF342N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A340NA\\mb9a340n.h", "define": "MB9AF344N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3LowPower_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9AF34xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "SN32F249F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F410TB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EFM32ZG108F4": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32ZG.FLM": {"default": "1", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32ZG/Include/em_device.h", "define": "EFM32ZG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32ZG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/EFM32ZG/EFM32ZG108F4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "EZR32LG330F128R69": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F128R68": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20E16": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\SAMD20\\ATSAMD20E16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC120LD3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF416N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF41xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EZR32LG330F128R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG390F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG390F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG390F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F128R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32LG/EZR32LG330F128R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKL02Z32xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P32_48MHZ.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x1FFFFC00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFC00", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/MKL02Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ML630Q466": {"core": "Cortex-M0+", "vendor": "Lapis Semiconductor:10", "algorithm": {"Flash/ML630Q466.FLM": {"default": "1", "ramsize": "0x400", "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.1.0.0.pack", "compile": {"header": "Device/Include/ML630Q466.h"}, "pdsc_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/ML630Q466.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "ML630Q464": {"core": "Cortex-M0+", "vendor": "Lapis Semiconductor:10", "algorithm": {"Flash/ML630Q464.FLM": {"default": "1", "ramsize": "0x400", "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.1.0.0.pack", "compile": {"header": "Device/Include/ML630Q466.h"}, "pdsc_file": "http://www.lapis-semi.com/en/data/sample-file_db/miconlp/LAPISSemiconductor.ML630Q46x_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/ML630Q464.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "XMC1402-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2CC9J0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32F051K8": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM381FWDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM381_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM384.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/M381.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F051K6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F051x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC4074FBD80": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.2.0.0.pack", "compile": {"header": "Device/Include/LPC407x_8x_177x_8x.h", "define": "CORE_M4"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC408x_7x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F410T8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F410Tx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "CMSIS/SVD/STM32F410xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LPC11U24FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1800"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1330LD2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1330_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NM1330_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1330_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NM1330AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF217T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MB9BF217S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF21xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "ATSAMV70N19B": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70b/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}, "samv70b/keil/flash/ATSAMV7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "samv70b/svd/ATSAMV70N19B.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "STM32L052T6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L052xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L052x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM4F232H5BB": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F232H5BB.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S2637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKW31Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P512_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW31Z4.h", "define": "MKW31Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MKW31Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NANO110KE3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_123.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFR32BG1B232F256GJ43": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F256GJ43.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S6965": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000B800"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6965.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32BG1B232F256GM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1B/Include/em_device.h", "define": "EFR32BG1B232F128GJ43"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1B/EFR32BG1B232F256GM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S9U92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s9u92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF516N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9xFxxx_32WF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x200C0000"}, "Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IROM2": {"start": "0x200C0000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF51xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "NUC100RD2DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "EFM32WG980F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG980F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "TM4C1233H6PZ": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1233H6PZ.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103RC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103RD": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x60000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103RE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F107RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_CL.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_CL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F107xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F103RG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1518JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LPC1548JBD100": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "LM4F210H5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F210H5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32LG842F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG842F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG842F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1301-T038x0008": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x2000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MB9BF418S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF41xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "S6E2C28L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "M451VD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "MB9BF418T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B410T\\mb9b410t.h", "define": "MB9BF418T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF41xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "S32K146": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/S32K146_P1024_4KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.1.2.0.pack", "compile": {"header": "platform/devices/device_registers.h", "define": "CPU_S32K148"}, "pdsc_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000F000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "platform/devices/S32K146/S32K146.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "112000000"}}, "SN32F263X": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F260_30.FLM": {"default": "1", "ramsize": null, "size": "0x7800", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F260.h", "define": "SN32F260"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x77FC"}}, "debug": "SVD\\SN32F260.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S32K144": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"addon_cmsis/Flash/S32K144_P512_4KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.1.2.0.pack", "compile": {"header": "platform/devices/device_registers.h", "define": "CPU_S32K148"}, "pdsc_file": "http://www.keil.com/pack/Keil.S32_SDK_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "platform/devices/S32K144/S32K144.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "112000000"}}, "ATSAML22N16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML22_64_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x00800", "ramstart": null, "start": "0x00400000"}, "Flash/ATSAML22_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML22\\Include\\saml22.h", "define": "__SAML22N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SAML22\\ATSAML22N16A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L151VBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L151xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "ARMv8MML": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMv8MML/Include/ARMv8MML_DSP_DP.h", "define": "ARMv8MML_DSP_DP"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "S6E2G26H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2G2XX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2G2/Include/S6E2G2xJ/s6e2g2xj.h", "define": "S6E2G28J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2g2xh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "LM4F112H5QD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F112H5QD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54605J512ET180": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54605.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "LM3S1637": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1637.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "Z32F38412ALS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F3841.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F3841.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F3841.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "MK10DN64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F112H5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LM4F112H5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "LPC54618J512BD208": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC5460x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.2.6.0.pack", "compile": {"header": "Device/Include/LPC54628.h", "define": "LPC54628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC54000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00028000"}, "IRAM2": {"start": "0x04000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/LPC54618.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "220000000"}}, "LPC1345FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG11B820F2048IL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048IL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "Mini52TAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "EFR32MG12P232F1024GL125": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P232F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P232F1024GL125.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32PG1B200F256IM32": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256IM32.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F22366_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "EFM32LG232F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG232F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG232F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC43S37": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/LPC18xx43xx_512_BA.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1A000000"}, "Flash/LPC18xx43xx_512_BB.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x1B000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.2.8.0.pack", "compile": {"header": "Device/Include/LPC43xx.h", "define": "CORE_M0SUB"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC4300_DFP.pdsc", "memory": {"IROM2": {"start": "0x1B000000", "size": "0x80000"}, "IRAM1": {"start": "0x10000000", "size": "0x08000"}, "IRAM2": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x1A000000", "size": "0x80000"}}, "debug": "SVD/LPC43xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "204000000"}}, "XMC1202-T028x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "Generic_NUC100_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC845M301JHI48": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC84x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC84x.h", "define": "LPC845M301JHI48"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/LPC84x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "HT32F50241_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F50231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HT32F50231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "EFM32LG890F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG890F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG890F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKM34Z256xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKMP256_2KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/MKM34Z7.h", "define": "MKM34Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KMxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFE000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKM34Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "EFM32WG280F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG280F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG280F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4C8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}, "Flash/ATSAM4C_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4C/sam4c.h", "define": "__SAM4C16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4C/ATSAM4C8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32LG290F128": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32LG/EFM32LG290F128.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F779II": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F779xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32PG1B200F128GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F128GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32HG108F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG108F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MK21FX512Axxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21FA12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F030F4": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F030xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32F0x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG990F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG990F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG990F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32TG225F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG225F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL15Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32LG395F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG395F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG395F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK66FX1M0xxx18": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "arm/MKD256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK66F18_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_MK66FX1M0VLQ18"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MK66F18_DFP.pdsc", "debug": "MK66F18.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2HG6G": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxg.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "GD32F350R6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "S6E2HG6E": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2HG6X0A.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2HG/Include/S6E2HGxG/s6e2hgxg.h", "define": "S6E2HG6G"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00008000"}, "IRAM2": {"start": "0x2003C000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2hgxe.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F413CH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "S6E2C2AH0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C2/Include/s6e2c2.h", "define": "S6E2C2AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG330F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG330F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG330F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G842F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G842F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32G/EFM32G842F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL25Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL28Z7.h", "define": "MKL28Z512xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL25Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S1W16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s1w16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M484KIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32F733ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F733xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "STM32L031G6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S5656": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5656.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "SN32F238F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC100RC1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC11U67JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11U6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L031G4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11U24FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S2793": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2793.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "XMC1401-Q048x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "CMSDK_ARMv8MBL": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MBL/Include/CMSDK_ARMv8MBL.h", "define": "CMSDK_ARMv8MBL"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MBL.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "STM32F469VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F469VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F469xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2C58H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "NUC442VG8AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC400_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC400_LD_16.FLM": {"default": "0", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC400_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\NUC400_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "84000000"}}, "EFM32WG330F64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG330F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32WG/EFM32WG330F64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S628": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s628.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG895F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG895F1024"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG895F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B520F2048IM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048IM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32JG1B200F128GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F128GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAMS70N19": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00040000"}, "IROM1": {"start": "0x00400000", "size": "0x00080000"}}, "debug": "svd/ATSAMS70N19.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "NUC120LE3DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "APOLLO512-KCR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/apollo1.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "HT32F52231_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52231_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52231_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32G200F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G200F64"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G200F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKL46Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128_48MHZ.FLM": {"default": "1", "ramsize": "0x00004000", "size": "0x00020000", "ramstart": "0x1FFFF000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL46Z4.h", "define": "MKL46Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKL46Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1752": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1751": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1756": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_256.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1754": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x2007C000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L152RBxxA": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00001000", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L152xCA"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L15xxxA.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32L011F3": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_8.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00002000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1759": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "LPC1758": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC_IAP_512.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x80000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.2.4.0.pack", "compile": {"header": "Device/Include/LPC17xx.h", "define": "LPC175x_6x"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1700_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x2007C000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD/LPC176x5x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "LPC1342FHN33": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L011F4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L011xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F207VG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F207xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "EFM32PG1B200F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32PG1B/Include/em_device.h", "define": "EFM32PG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32PG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32PG1B/EFM32PG1B200F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "LM3S5739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S9971": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s9971.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S5737": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5737.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S5732": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5732.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "M0518LC2AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M0518_AP_36.FLM": {"default": "1", "ramsize": null, "size": "0x9000", "ramstart": null, "start": "0x00000000"}, "Flash/M0518_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M0518_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M0518\\Include\\M0518.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x9000"}}, "debug": "SVD\\Nuvoton\\M0518AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ARMCA7": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCA7/Include/ARMCA7.h", "define": "ARMCA7"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0.svd", "processor": {"fpu": "DP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32F413ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "HT32F52331_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52331_41"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/HT32F52331_41.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK22FN1M0xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P1M0.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/MK22F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM4F132E5QC": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F132E5QC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "SKEAZN8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P8KB.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.1.3.0.pack", "compile": {"header": "Device/Include/SKEAZN642.h", "define": "SKEAZN64xxx2"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KEAxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/SKEAZN84.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "20000000"}}, "LM3S8962": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8962.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M4LEDRG6AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "STM32F413ZH": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_1536.FLM": {"default": "1", "ramsize": null, "size": "0x00180000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F413xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00180000"}}, "debug": "CMSIS/SVD/STM32F413.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F358RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F398xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000A000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NANO120LC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "STM32F407VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "STM32F723ZC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "S6E2D35JAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2D3_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2D3/Include/s6e2d3.h", "define": "S6E2D35JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2D3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F723ZE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F723xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x3_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LPC11E37FBD48/501": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S5G51": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_384.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00060000"}}, "debug": "SVD\\lm3s5g51.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMDA1J16B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1b/svd/ATSAMDA1J16B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1J16A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x800"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "samda1/svd/ATSAMDA1J16A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "LM3S2730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3S2A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00400000", "size": "0x00020000"}}, "debug": "SVD/SAM3S/ATSAM3S2A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "HT32F12365_100LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12365_66"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x3FC00"}}, "debug": "SVD/HT32F12365_66.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "LM3S2739": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s2739.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK21DN512Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MIMXRT1051xxxxx": {"core": "Cortex-M7", "vendor": "NXP:11", "algorithm": {"Flash/MIMXRT105x_HYPER_256KB_SEC.FLM": {"default": "1", "ramsize": null, "size": "0x4000000", "ramstart": null, "start": "0x60000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MIMXRT1051_DFP.2.3.0.pack", "compile": {"header": "Device/Include/fsl_device_registers.h", "define": "CPU_MIMXRT1051DVL6A"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.MIMXRT1051_DFP.pdsc", "debug": "SVD/MIMXRT1051.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "600000000"}}, "LM3S1911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s1911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK20DX64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK20DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK20D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "HC32F150J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32F150JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK11DX128Axxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK11DA5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1227FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LPC12xx\\LPC122x.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1200_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC122x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "45000000"}}, "S6E2C38H0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C3/Include/s6e2c3.h", "define": "S6E2C3AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2C3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "LM3S6618": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6618.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54102J256": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5410x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54102_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54102J512UK49_cm0plus"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54102_DFP.pdsc", "debug": "LPC54102_cm4.xml", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F334C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F334x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F334x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM367FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M367.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32L100RB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002800"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "XMC1201-Q040x0032": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x8000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LM3S8971": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8971.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "M054ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "M054ZDE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M054_AP_16.FLM": {"default": "1", "ramsize": null, "size": "0x4000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\Nuvoton\\M051DE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "A8137M0": {"core": "Cortex-M0", "vendor": "Amiccom:147", "algorithm": {"Flash/AMC1_F7-F5.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.amiccom.com.tw/download/Amiccom_DeviceFamilyPack/Amiccom.SoC_DFP.0.1.4.pack", "compile": {"header": "Device/A8137M/Device/AMICCOM/A8137M0/Include/register_A8137M0.h"}, "pdsc_file": "http://www.amiccom.com.tw/download/Amiccom_DeviceFamilyPack/Amiccom.SoC_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/A8137M.svd", "processor": {"clock": "16000000"}}, "LM3S8970": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s8971.h", "define": "LM3S8971"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s8970.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF167R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B160R/Include/mb9b160r.h", "define": "MB9BF168R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B160R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "STM32F373V8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11U36FBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x18000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F111C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F111C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "TMPM366FDFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M366.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S2139": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s2139.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "MKW30Z160xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P160_48MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00028000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW30Z4.h", "define": "MKW30Z160xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00005000"}, "IROM1": {"start": "0x00000000", "size": "0x00028000"}}, "debug": "SVD/MKW30Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EZR32LG330F64R55": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32LG/EZR32LG330F64R55.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6730": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6730.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32GG280F512": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00080000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG280F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/EFM32GG/EFM32GG280F512.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HC32M140J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32M140FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32M140JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6100": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s6100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "S6E2GH6H": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2ghxh.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "S6E2GH6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2ghxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32TG108F32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG108F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32TG/EFM32TG108F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC834M101FHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00008000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC832M101FDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/LPC83x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "ATSAM3X8H": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8H.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "MKL15Z64xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_48MHZ.FLM": {"default": "1", "ramsize": "0x00002000", "size": "0x00010000", "ramstart": "0x1FFFF800", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL17Z4.h", "define": "MKL17Z256xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF800", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MKL15Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2DF5GAA": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2DF_384.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00060000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2DF/Include/s6e2df.h", "define": "S6E2DF5JAA"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {}, "debug": "SVD/S6E2DF.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "ATSAM3X8E": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8E.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "ATSAM3X8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3X_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00080000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3XA/Include/sam3xa.h", "define": "__SAM3X8H__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x000C0000", "size": "0x00040000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x20080000", "size": "0x00008000"}, "IROM1": {"start": "0x00080000", "size": "0x00040000"}}, "debug": "SVD/SAM3XA/ATSAM3X8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "84000000"}}, "TM4C1292NCPDT": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1292NCPDT.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "HT32F12345": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F12345"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xFC00"}}, "debug": "SVD/HT32F12345.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "M0516LBN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S6753": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s6753.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F373VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F373xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F37x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32TG225F8": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00002000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32TG/Include/em_device.h", "define": "EFM32TG225F8"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32TG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/EFM32TG/EFM32TG225F8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "Z32F12811ATS": {"core": "Cortex-M3", "vendor": "Zilog:89", "algorithm": {"Flash/Z32F1281.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.1.0.4.pack", "compile": {"header": "Device/Include/Z32F1281.h"}, "pdsc_file": "http://www.ixys.com/Zilog/packs/Zilog.ZNEO32_DFP.pdsc", "memory": {}, "debug": "SVD/Z32F1281.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1112FDH20/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM4F231E5QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F232H5BB.h", "define": "LM4F232"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LM4F231E5QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "MKW36Z512xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/KW36x_D256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/KW36x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW36Z4.h", "define": "MKW36Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00040000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW36Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F407IE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "EFM32HG321F32": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32HG/Include/em_device.h", "define": "EFM32HG321F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD/EFM32HG/EFM32HG321F32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F407IG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F40xxx_41xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x04", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F407xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F40x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "168000000"}}, "LPC1115FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L100R8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32L1xx_128_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080000"}, "Flash/STM32L1xx_128_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FF80000"}, "Flash/STM32L1xx_128.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.1.2.0.pack", "compile": {"header": "Device/Include/stm32l1xx.h", "define": "STM32L100xC"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/STM32L100.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK22FN128xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK2x_FAC.FLM": {"default": "0", "ramsize": null, "size": "0x00000024", "ramstart": null, "start": "0xFFFF0000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK22F12810.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "EZR32HG320F64R63": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "MB9BF318S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "EFM32GG11B310F2048GL112": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B310F2048GQ100"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00060000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B310F2048GL112.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF318T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx08_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKL05Z8xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_P8_48MHZ.FLM": {"default": "1", "ramsize": "0x00000400", "size": "0x00002000", "ramstart": "0x1FFFFF00", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.1.14.0.pack", "compile": {"header": "Device/Include/MKL05Z4.h", "define": "MKL05Z32xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KLxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFFF00", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00002000"}}, "debug": "SVD/MKL05Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32WG332F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG332F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG332F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM4SD16C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SD16C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "ATSAM4SD16B": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4S_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFFFF0"}, "Flash/ATSAM4SD_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/Include/SAM4S/sam4s.h", "define": "__SAM4SD32C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IROM2": {"start": "0x00480000", "size": "0x80000"}, "IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00400000", "size": "0x80000"}}, "debug": "SVD/SAM4S/ATSAM4SD16B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F237F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F230_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F230"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7FFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NANO120SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "EFM32JG1B100F128GM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B100F256IM32"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B100F128GM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "GD32F130G8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130G6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F130G4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x04000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 GD32F130_150 USE_STDPERIPH_DRIVER"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x04000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "S6E2GH8J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GHXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00100000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GH/Include/S6E2GHxJ/s6e2ghxj.h", "define": "S6E2GH8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/s6e2ghxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "MB9BF216T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B210T\\mb9b210t.h", "define": "MB9BF218T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF21xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LPC11C14FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Cxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103C6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC11E68JBD100": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_160.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x40000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x8000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK50DX128xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MK50D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S6432": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s6432.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103C8": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "A8107M0": {"core": "Cortex-M0", "vendor": "Amiccom:147", "algorithm": {"Flash/AMC1_F8.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.amiccom.com.tw/download/Amiccom_DeviceFamilyPack/Amiccom.SoC_DFP.0.1.4.pack", "compile": {"header": "Device/A8107M/Device/AMICCOM/AMICCOM_CM0/include/AMICCOM_CM0.h"}, "pdsc_file": "http://www.amiccom.com.tw/download/Amiccom_DeviceFamilyPack/Amiccom.SoC_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x08000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD/A8107M.svd", "processor": {"clock": "16000000"}}, "MB9BF129S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF12xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "LM3S618": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s618.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1821FB0AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1820_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1820_AP_17_5.FLM": {"default": "1", "ramsize": null, "size": "0x4600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1820_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x4600"}}, "debug": "SVD\\Nuvoton\\NM1820AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "MB9BF129T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B520T_ROM1.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00508000"}, "Flash/MB9B520T_1536.FLM": {"default": "1", "ramsize": null, "size": "0x180000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B120T\\mb9b120t.h", "define": "MB9BF129T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00508000", "size": "0x10000"}, "IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IRAM2": {"start": "0x1FFE8000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD\\MB9BF12xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "60000000"}}, "LM3S2950": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2950.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S613": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s613.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC54113J128": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"arm/LPC5411x_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54113_DFP.10.0.0.pack", "compile": {"header": "fsl_device_registers.h", "define": "CPU_LPC54113J128BD64"}, "pdsc_file": "http://mcuxpresso.nxp.com/cmsis_pack/repo/NXP.LPC54113_DFP.pdsc", "debug": "LPC54113.xml", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "LM3S611": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s611.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "GD32F330G6": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x08000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F330 "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x01000"}, "IROM1": {"start": "0x08000000", "size": "0x08000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "84000000"}}, "MB9BF517T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx07_768.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B510T\\mb9b510t.h", "define": "MB9BF518T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD\\MB9BF51xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9D92": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00018000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s9d92.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S615": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s628.h", "define": "LM3S628"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\lm3s615.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L486ZG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L486xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32BG1P333F256GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.1.1.0.pack", "compile": {"header": "Device/EFR32BG1P/Include/em_device.h", "define": "EFR32BG1P333F256GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32BG1P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00007C00"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFR32BG1P/EFR32BG1P333F256GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MK27FN2M0xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P2M0.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IRAM2": {"start": "0x1FFC0000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/MK27F15.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "STM32F103VE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100LD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "LM3S1627": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1627.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103VF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAM3SD8B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00440000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3SD8/ATSAM3SD8B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAM3SD8C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3SD8/Include/sam3sd8.h", "define": "__SAM3SD8C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IROM2": {"start": "0x00440000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3SD8/ATSAM3SD8C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "ATSAMC21J17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21J17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T8": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F301C8": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F301x8"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32F301x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "ARMCM0P_MPU": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM0plus/Include/ARMCM0plus_MPU.h", "define": "ARMCM0P_MPU"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM0P.svd", "processor": {"fpu": "NO_FPU", "endianness": "Configurable", "clock": "10000000"}}, "ARMCM33_DSP_FP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/ARM.CMSIS.5.2.0.pack", "compile": {"header": "Device/ARM/ARMCM33/Include/ARMCM33_DSP_FP_TZ.h", "define": "ARMCM33_DSP_FP_TZ"}, "pdsc_file": "http://www.keil.com/pack/ARM.CMSIS.pdsc", "memory": {}, "debug": "Device/ARM/SVD/ARMCM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "10000000"}}, "STM32L4S9AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4Rx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L4Rx_2048_Dual.FLM": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4S9xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32L4S9.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9AF121L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9A420L_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A120L\\mb9a120l.h", "define": "MB9AF121L"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9AF12xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "EFM32GG332F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG332F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG332F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T6": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F170T4": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MB9BF522L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "S6E2C1AJ0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C1/Include/s6e2c1.h", "define": "S6E2C1AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFD0000", "size": "0x30000"}, "IROM1": {"start": "0x00000000", "size": "0x200000"}}, "debug": "SVD/S6E2C1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "STM32L4A6RG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L4A6xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00100000"}}, "debug": "CMSIS/SVD/STM32L4x6.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MB9BF316S": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xS.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "MKW21D256xxx5": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MK_D64_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00010000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/MK_P256_50MHZ.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW24D5.h", "define": "MKW24D512xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00010000"}, "IRAM1": {"start": "0x1FFFC000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW21D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF316T": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx06_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B310T\\mb9b310t.h", "define": "MB9BF318T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\MB9BF31xT.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "144000000"}}, "LM3S9L97": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s9u96.h", "define": "LM3S9U96"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s9l97.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F103CB": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "AMAPH1KK-KBR": {"core": "Cortex-M4", "vendor": "Ambiq Micro:120", "algorithm": {"Flash/Apollo2.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.1.0.0.pack", "compile": {"header": "Device/Include/system_apollo2.h", "define": "APOLLO2_1024"}, "pdsc_file": "http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x40000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/apollo2.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1113FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF500R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BF500_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M481ZGAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S6911": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6911.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFM32JG1B200F256IM32": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOP2.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOP2.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32JG1B/Include/em_device.h", "define": "EFM32JG1B200F256IM48"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32JG1B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32JG1B/EFM32JG1B200F256IM32.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F722VC": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x40000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x40000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "EFM32GG11B820F2048GQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B820F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B820F2048GQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F722VE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F722xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "NANO120KC2BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "ATSAMS70Q20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70Q20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMS70Q21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70Q21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32L452VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L452xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "S6E2CC8L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2CC/Include/s6e2cc.h", "define": "S6E2CCAL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/S6E2CC.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "TMPM475FDFG": {"core": "Cortex-M4", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM470_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.1.2.0.pack", "compile": {"header": "Device\\Include\\TMPM475.h", "define": "TMPM475FDFG"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x20008000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\M475.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S3749": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s3z26.h", "define": "LM3S3Z26"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s3749.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MB9BF500N": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BF500_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B500B\\mb9b500r.h", "define": "MB9BF506R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9BF50xN.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MB9BF305R": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx05_384.FLM": {"default": "1", "ramsize": null, "size": "0x60000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\MB9B300B\\mb9b300r.h", "define": "MB9BF306R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3HighPerformance_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x6000"}, "IRAM2": {"start": "0x1FFFA000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x60000"}}, "debug": "SVD\\MB9BF30xR.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "M453SD3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_72.FLM": {"default": "1", "ramsize": null, "size": "0x12000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x12000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "GD32F405VK": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F4xx_3MB.FLM": {"default": "1", "ramsize": null, "size": "0x0300000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.1.0.1.pack", "compile": {"header": "Device/Include/gd32f4xx.h", "define": "GD32F405 USE_STDPERIPH_DRIVER "}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GD32F4/GigaDevice.GD32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x020000"}, "IRAM2": {"start": "0x10000000", "size": "0x010000"}, "IROM1": {"start": "0x08000000", "size": "0x300000"}}, "debug": "SVD/GD32F4xx.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "ATSAMC21J17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMC_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAMC_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.1.4.0.pack", "compile": {"header": "Device/SAMC21N/Include/samc21.h", "define": "__SAMC21N18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/SAMC21/ATSAMC21J17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F038E6": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}, "CMSIS/Flash/STM32F0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F038xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "M482SIDAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M481_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M481_AP_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x00000000"}, "Flash/M481_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M480\\Include\\M480.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x28000"}, "IROM1": {"start": "0x00000000", "size": "0x80000"}}, "debug": "SVD\\Nuvoton\\M481_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM4F120C4QR": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM4F_64.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM4F_DFP.1.0.0.pack", "compile": {"header": "Device\\Include\\LM4F132H5QD.h", "define": "LM4F132"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM4F_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x6000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LM4F120C4QR.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "EFM32WG290F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG290F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG290F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "LPC11E14FBD48/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2800"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC11Exx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1294NCZAD": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C129_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C129/TM4C129.h", "define": "TM4C129XNCZAD"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x040000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "SVD/TM4C129/TM4C1294NCZAD.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S5R31": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s5r31.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "S6E2C59L0A": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2CC_MACRO0_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x2003C000", "start": "0x00000000"}, "Flash/S6E2CC_MACRO1_1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x080000", "ramstart": "0x2003C000", "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2C5/Include/s6e2c5.h", "define": "S6E2C5AL0A"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFE0000", "size": "0x20000"}, "IROM1": {"start": "0x00000000", "size": "0x180000"}}, "debug": "SVD/S6E2C5.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "200000000"}}, "EFM32GG11B420F2048GQ100": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048GQ100.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F103ZF": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0xC0000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32WG980F256": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG980F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32WG/EFM32WG980F256.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32G232F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.1.4.0.pack", "compile": {"header": "Device/EFM32G/Include/em_device.h", "define": "EFM32G232F128"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32Gxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32G/EFM32G232F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MK21FX512xxx10": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21F10.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "100000000"}}, "STM32L451RC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L451xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x1.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "MK21FX512xxx12": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKD128_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P512X.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.1.6.0.pack", "compile": {"header": "Device/Include/MK28F15.h", "define": "MK28FN2M0xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K20_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00020000"}, "IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/MK21F12.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "EFR32MG12P433F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32MG12P/Include/em_device.h", "define": "EFR32MG12P433F1024GM48"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32MG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32MG12P/EFR32MG12P433F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAM4CMP8C": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM4C_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x01000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM4_DFP.1.6.0.pack", "compile": {"header": "Device/SAM4CM/Include/sam4cm.h", "define": "__SAM4CMS16C_1__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20100000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD/SAM4CM/ATSAM4CMP8C_0.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "TMPM361FYFG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/M361.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LPC11U12FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x4000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x4000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MKV31F256xxx12": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKV3x_FAC.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00000024", "ramstart": "0x20000000", "start": "0xFFFF0000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.1.7.1.pack", "compile": {"header": "Device/Include/MKV31F51212.h", "define": "MKV31F512xxx12"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KVxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFC000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKV31F25612.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "SN32F248F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F240_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.1.2.8.pack", "compile": {"header": "Device\\Include\\SN32F240.h", "define": "SN32F240"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F2_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0xFFFC"}}, "debug": "SVD\\SN32F240.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAMD21G17AU": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G17AU.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MKE14Z128xxx7": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE1x_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}, "Flash/MKE1x_D32_2KB_SEC.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00008000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE15Z7.h", "define": "MKE15Z256xxx7"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE14Z7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L031K4": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L031xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00004000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "STM32F429AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "XMC1302-T038x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "S6E2GK6J": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/S6E2GKXX0A1024KB.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00080000", "ramstart": "0x20040000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/S6E2GK/Include/S6E2GKxJ/s6e2gkxj.h", "define": "S6E2GK8J"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/s6e2gkxj.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFR32FG12P232F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P232F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P232F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF467N": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B460R/Include/mb9b460r.h", "define": "MB9BF468R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B460R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "EFM32GG11B840F1024GM64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B840F1024IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B840F1024GM64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "ATSAM3N4B": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3N/ATSAM3N4B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N4C": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x06000"}, "IROM1": {"start": "0x00400000", "size": "0x40000"}}, "debug": "SVD/SAM3N/ATSAM3N4C.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAM3N4A": {"core": "Cortex-M3", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAM3N_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM3_DFP.1.2.0.pack", "compile": {"header": "Device/SAM3N/Include/sam3n.h", "define": "__SAM3N4C__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x00400000", "size": "0x00040000"}}, "debug": "SVD/SAM3N/ATSAM3N4A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "MK10DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32L433VC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L433xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x3.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "LM3S2918": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s2918.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1608": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1608.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK80FN256xxx15": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MKP256_4KB_SECTOR.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MK82F25615.h", "define": "MK82FN256xxx15"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K80_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00030000"}, "IRAM2": {"start": "0x1FFF0000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK80F25615.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "150000000"}}, "LM3S1607": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1607.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1302-Q040x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "MK50DX256xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}, "Flash/MK_P256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.1.2.0.pack", "compile": {"header": "Device/Include/MK53D10.h", "define": "MK53DX256xxx10"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K50_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IRAM2": {"start": "0x1FFF8000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MK50D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LPC1114FN28/102": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S1601": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s1601.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "TM4C1237H6PGE": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_256.FLM": {"default": "1", "ramsize": null, "size": "0x040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x040000"}}, "debug": "SVD/TM4C123/TM4C1237H6PGE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F302VB": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00006000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "CMSIS/SVD/STM32F30x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "R-IN32M3-CL": {"core": "Cortex-M3", "vendor": "Renesas:117", "algorithm": {"Flash/R-IN32M3_S25FL064P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00800000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29AL032D.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x10000000"}, "Flash/R-IN32M3_S25FL032P.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x00400000", "ramstart": "0x20000000", "start": "0x02000000"}, "Flash/R-IN32M3_S29GL128S.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x01000000", "ramstart": "0x20000000", "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.1.3.0.pack", "compile": {"header": "Device/Include/RIN32M3.h", "define": "RIN32M3_EC"}, "pdsc_file": "http://www.keil.com/pack/Keil.R-IN32M3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x80000"}}, "debug": "SVD/RIN32M3_CL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "100000000"}}, "STM32F302VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00080000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F302VD": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F3xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x00060000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F3xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.2.1.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F3xx/Include/stm32f3xx.h", "define": "STM32F302xE"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F3xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x08000000", "size": "0x00060000"}}, "debug": "CMSIS/SVD/STM32F303xE.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "72000000"}}, "NANO100SD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "M451YC3AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M451_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/M451_AP_40.FLM": {"default": "1", "ramsize": null, "size": "0xa000", "ramstart": null, "start": "0x00000000"}, "Flash/M451_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M451\\Include\\M451Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0xa000"}}, "debug": "SVD\\Nuvoton\\M451_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "EFM32WG380F128": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32WG/Include/em_device.h", "define": "EFM32WG380F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EFM32WG/EFM32WG380F128.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F769NI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7xTCM_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048dual.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7xTCM_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x_2048.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x200000", "ramstart": "0x20020000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F769xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x200000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F7x9_v1r2.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "XMC1402-Q040x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "STM32L442KC": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L4xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l4xx.h", "define": "STM32L442xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L4xx_DFP.pdsc", "memory": {"IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32L4x2.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "120000000"}}, "M058ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M058_AP_32.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\M051\\Include\\M051Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC1548JBD64": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC15xx_128.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x20000", "ramstart": "0x02000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.1.2.0.pack", "compile": {"header": "LPCOpen/software/lpc_core/lpc_chip/chip_15xx/chip.h", "define": "LPC1549JBD100"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1500_DFP.pdsc", "memory": {"IRAM1": {"start": "0x02000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/LPC15xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "75000000"}}, "NANO120KD3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "MB9BF367R": {"core": "Cortex-M4", "vendor": "Spansion:100", "algorithm": {"Flash/MB9B560_1024.FLM": {"default": "1", "ramsize": null, "size": "0xC0000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM4_DFP.1.5.1.pack", "compile": {"header": "Device/MB9B360R/Include/mb9b360r.h", "define": "MB9BF368R"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM4_DFP.pdsc", "memory": {"IRAM1": {"start": "0x2003A000", "size": "0xC000"}, "IRAM2": {"start": "0x1FFF4000", "size": "0xC000"}, "IROM1": {"start": "0x00000000", "size": "0xC0000"}}, "debug": "SVD/MB9B360R.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "160000000"}}, "HT32F1655_64LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F1xxxx/ht32f1xxxx_01.h", "define": "USE_HT32F1655_56"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HT32F1655_56.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMD21G17A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G17A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "IOTKit_CM33_FP": {"core": "ARMV8MBL", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.1.3.0.pack", "compile": {"header": "Device/IOTKit_CM33/Include/IOTKit_CM33_FP.h", "define": "IOTKit_CM33_FP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_IOTKit_BSP.pdsc", "memory": {}, "debug": "SVD/IOTKit_CM33.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "NUC120RD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LPC810M021FN8": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_4.FLM": {"default": "1", "ramsize": "0x03E0", "size": "0x00001000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC812M101JTB16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00000400"}, "IROM1": {"start": "0x00000000", "size": "0x00001000"}}, "debug": "SVD/LPC800.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "HT32F52253_48LQFP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "XMC4400-F100x256": {"core": "Cortex-M4", "vendor": "Infineon:7", "algorithm": {"Flash/XMC4400_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x0C000000"}, "Flash/XMC4400c_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.2.9.1.pack", "compile": {"header": "Device/XMC4400_series/Include/XMC4400.h", "define": "XMC4402_F64x256"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC4000_DFP.pdsc", "memory": {"IROM2": {"start": "0x0C000000", "size": "0x40000"}, "IRAM1": {"start": "0x20000000", "size": "0xFFC0"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "SVD/XMC4400.svd", "processor": {"fpu": "FPU", "endianness": "Little-endian", "clock": "120000000"}}, "NANO100VD3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100AN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "32000000"}}, "EFM32LG940F256": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG940F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EFM32LG/EFM32LG940F256.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20G18": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G18.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "GD32F350G8": {"core": "Cortex-M4", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F3x0.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.1.0.0.pack", "compile": {"header": "Device/Include/gd32f3x0.h", "define": "USE_STDPERIPH_DRIVER GD32F3x0 GD32F350"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F3x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x02000"}, "IROM1": {"start": "0x08000000", "size": "0x10000"}}, "debug": "SVD/GD32F3x0.svd", "processor": {"fpu": "0 ", "endianness": "Little-endian", "clock": "108000000"}}, "STM32F103T6": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"Flash/STM32F10x_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}, "Flash/STM32F10x_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x0010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.2.0.pack", "compile": {"header": "Device/Include/stm32f10x.h", "define": "STM32F10X_XL"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F1xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2800"}, "IROM1": {"start": "0x08000000", "size": "0x8000"}}, "debug": "SVD/STM32F103xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "MK10DX64xxx5": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_50MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D5.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "MK10DX64xxx7": {"core": "Cortex-M4", "vendor": "NXP:11", "algorithm": {"Flash/MK_P64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/MK_D32_72MHZ.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x10000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.1.2.2.pack", "compile": {"header": "Device/Include/MK12D5.h", "define": "MK12DX256xxx5"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_K10_DFP.pdsc", "memory": {"IROM2": {"start": "0x10000000", "size": "0x00008000"}, "IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/MK10D7.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "Mini51ZAN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_AP_4.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00000000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini51\\Include\\Mini51Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x1000"}}, "debug": "SVD\\Nuvoton\\MINI51AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "24000000"}}, "ATSAMD20G15": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G15.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD20G14": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD20_16.FLM": {"default": "1", "ramsize": null, "size": "0x00004000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMD20\\Include\\samd20.h", "define": "__SAMD20J18__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD20_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00000800"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD\\SAMD20\\ATSAMD20G14.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMR21E19A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMR21_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.1.1.0.pack", "compile": {"header": "Device\\SAMR21\\Include\\samr21.h", "define": "__SAMR21E19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMR21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\SAMR21\\ATSAMR21E19A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "ATSAMD21G15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G15A.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1301-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1300_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1300_series/Include/XMC1300.h", "define": "XMC1302_Q040x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1300.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "CMSDK_ARMv8MML_SP": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML_SP.svd", "processor": {"fpu": "SP_FPU", "endianness": "Configurable", "clock": "25000000"}}, "ATSAMD21G15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAMD21_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.1.2.0.pack", "compile": {"header": "Device\\SAMD21\\Include\\samd21.h", "define": "__SAMD21J18A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMD21_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00008000"}}, "debug": "SVD\\SAMD21\\ATSAMD21G15B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "TMPM375FSDMG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM37x_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM37A.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/M375.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF522M": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xM.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "ATSAMDA1J15B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1b/svd/ATSAMDA1J15B.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "ATSAMDA1J15A": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAMDA1_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.1.1.0.pack", "compile": {"header": "samda1/include/sam.h", "define": "__SAMDA1E16A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAMDA1_DFP.pdsc", "memory": {"IROM2": {"start": "0x00400000", "size": "0x400"}, "IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "samda1/svd/ATSAMDA1J15A.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian"}}, "LPC11E66JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F765NG": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_1024.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x08000000"}, "CMSIS/Flash/STM32F7x_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x100000", "ramstart": "0x20020000", "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F765xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x100000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F7x5_v1r1.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "MB9BF522K": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\MB9BF52xK.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "XMC1202-T016x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1200_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1200_series/Include/XMC1200.h", "define": "XMC1202_T016x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1200.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1113FBD48/301": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EZR32HG320F64R68": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R68.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "LPC1113FBD48/303": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FBD48/302": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32L041C6": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_32.FLM": {"default": "1", "ramsize": null, "size": "0x00008000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L041xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00008000"}}, "debug": "CMSIS/SVD/STM32L0x1.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "MKE04Z128xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKE04Zxxx_P128KB.FLM": {"default": "1", "ramsize": "0x00001000", "size": "0x00020000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.1.8.1.pack", "compile": {"header": "Device/Include/MKE04Z1284.h", "define": "MKE04Z128xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KExx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFFF000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/MKE04Z1284.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1311FHN33/01": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32HG320F64R69": {"core": "Cortex-M0+", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32M0P.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/FlashEFM32M0P.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32HG/Include/em_device.h", "define": "EZR32HG320F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32HG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EZR32HG/EZR32HG320F64R69.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "24000000"}}, "Mini52XZAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Mini51_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/Mini51_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Mini51_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\Mini55\\Include\\Mini55Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\MINI51XAE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAMS70N21": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00200000"}}, "debug": "svd/ATSAMS70N21.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "ATSAMS70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"flash/ATSAMS7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.2.1.0.pack", "compile": {"header": "include/sam.h", "define": "__SAMS70Q20__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-S_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "svd/ATSAMS70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "300000000"}}, "STM32F098CC": {"core": "Cortex-M0", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F0xx_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F0xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFF800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h", "define": "STM32F098xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x08000000", "size": "0x00040000"}}, "debug": "CMSIS/SVD/STM32F0x8.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC200SE3AN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC200_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC200_AP_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/NUC200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC200\\Include\\NUC200Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\Nuvoton\\NUC200AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "NANO100ND3BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/Nano100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/Nano100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/Nano100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NANO100BN\\Include\\Nano100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NANO100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "42000000"}}, "SN32F767F": {"core": "Cortex-M0", "vendor": "SONiX:110", "algorithm": {"Flash/SN32F760_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.1.4.2.pack", "compile": {"header": "Device\\Include\\SN32F760.h", "define": "SN32F760"}, "pdsc_file": "http://liveupdate.sonix.com.tw/sonix/develop_tool/MCU/DFP/SONiX.SN32F7_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\SN32F760.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NUC123LD4AE0": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_68.FLM": {"default": "1", "ramsize": null, "size": "0x11000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC123\\Include\\NUC123.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x00000000", "size": "0x11000"}}, "debug": "SVD\\Nuvoton\\NUC123AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "72000000"}}, "TLE9867QXW20": {"core": "Cortex-M3", "vendor": "Infineon:7", "algorithm": {"Flash/TLE9867.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x11000000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.1.3.2.pack", "compile": {"header": "Device\\Include\\tle986x.h", "define": "TLE9869QXA20"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.TLE986x_DFP.pdsc", "memory": {"IROM2": {"start": "0x1100EFFC", "size": "4"}, "IRAM1": {"start": "0x18000000", "size": "0x1800"}, "IROM1": {"start": "0x11000000", "size": "0xEFFC"}}, "debug": "SVD\\TLE986x.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "24000000"}}, "STM32F429VE": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_512.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32F429VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "TMPM363F10FG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/M363.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "64000000"}}, "LM3S5651": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5651.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "STM32F732IE": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F7x_512_TCM.FLM": {"default": "0", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x00200000"}, "CMSIS/Flash/STM32F7x2_512.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x80000", "ramstart": "0x20010000", "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.2.9.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h", "define": "STM32F732xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F7xx_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x80000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F7x2_v1r0.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian", "clock": "216000000"}}, "LM3S5652": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s5y36.h", "define": "LM3S5Y36"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD\\lm3s5652.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "STM32F429VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F429xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F429x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "CMSDK_ARMv8MML": {"core": "Cortex-M0", "vendor": "ARM:82", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.1.6.0.pack", "compile": {"header": "Device/CMSDK_ARMv8MML/Include/CMSDK_ARMv8MML_DP.h", "define": "CMSDK_ARMv8MML_DP"}, "pdsc_file": "http://www.keil.com/pack/Keil.V2M-MPS2_CMx_BSP.pdsc", "memory": {}, "debug": "SVD/CMSDK_ARMv8MML.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "25000000"}}, "HC32M140KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32F_M14.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.1.0.0.pack", "compile": {"header": "Device/Include/HC32M140FX.h"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F_M14.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32M140KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1404-Q064x0128": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x20000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "EFM32GG11B520F2048GL120": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B520F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B520F2048GL120.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/201": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1111FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_8.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x2000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "EFR32FG12P231F1024GM48": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/GECKOS1.FLM": {"default": "1", "ramsize": "0x2000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.1.0.0.pack", "compile": {"header": "Device/EFR32FG12P/Include/em_device.h", "define": "EFR32FG12P231F1024GL125"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFR32FG12P_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00040000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFR32FG12P/EFR32FG12P231F1024GM48.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "40000000"}}, "HT32F1765_48LQFP": {"core": "Cortex-M3", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F175x_275x/ht32f175x_275x.h", "define": "USE_HT32F1755_65"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x10000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F175x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TMPM369FDXBG": {"core": "Cortex-M3", "vendor": "Toshiba:92", "algorithm": {"Flash/TMPM36x_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.1.4.0.pack", "compile": {"header": "Device/Include/TMPM36B.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.TMPM3_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD/M369.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "MVF51NS15xxxx50": {"core": "Cortex-A5", "vendor": "NXP:11", "algorithm": {}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.1.1.1.pack", "compile": {"header": "Device/Include/MVF6X.h", "define": "MVF62NN15xxxx40"}, "pdsc_file": "http://www.keil.com/pack/Keil.VFxxx_DFP.pdsc", "memory": {}, "debug": "SVD/MVF51NS151MK50.svd", "processor": {"fpu": "DP_FPU"}}, "MB9AF314L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9BFx04_256.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9A310A\\mb9a310n.h", "define": "MB9AF316N"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IRAM2": {"start": "0x1FFFC000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x40000"}}, "debug": "SVD\\MB9AF31xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "MB9BF521L": {"core": "Cortex-M3", "vendor": "Spansion:100", "algorithm": {"Flash/MB9AB40_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/MB9xFxxx_32DWF.FLM": {"default": "1", "ramsize": null, "size": "0x8000", "ramstart": null, "start": "0x00200000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.1.0.1.pack", "compile": {"header": "Device\\Include\\MB9B520T\\mb9b520t.h", "define": "MB9BF529T"}, "pdsc_file": "http://www.keil.com/pack/Keil.FM3Basic_DFP.pdsc", "memory": {"IROM2": {"start": "0x00200000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IRAM2": {"start": "0x1FFFE000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\MB9BF52xL.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "TM4C1230D5PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_64.FLM": {"default": "1", "ramsize": null, "size": "0x010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x006000"}, "IROM1": {"start": "0x00000000", "size": "0x010000"}}, "debug": "SVD/TM4C123/TM4C1230D5PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "HC32L150JA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L150JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC11E67JBD48": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_96_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Exx\\LPC11E6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x4000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11E6x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC11U37HFBD64/401": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_128.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x20000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11Uxx\\LPC11U6x.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20004000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\LPC11Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "NM1120ZC1AE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1120_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}, "Flash/NM1120_AP_29_5.FLM": {"default": "1", "ramsize": null, "size": "0x7600", "ramstart": null, "start": "0x00000000"}, "Flash/NM1120_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\AU9110\\Include\\AU91xx.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7600"}}, "debug": "SVD\\Nuvoton\\NM1120AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ATSAME54P20A": {"core": "Cortex-M4", "vendor": "Atmel:3", "algorithm": {"arm_addon/flash/ATSAME54_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAME54_DFP.1.0.0.pack", "compile": {"header": "include/sam.h", "define": "__SAME54N19A__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAME54_DFP.pdsc", "memory": {"IRAM4": {"start": "0x47000000", "size": "0x2000"}, "IRAM3": {"start": "0x20000000", "size": "0x8000"}, "IRAM1": {"start": "0x20000000", "size": "0x40000"}, "IRAM2": {"start": "0x20000000", "size": "0x8000"}, "IROM1": {"start": "0x00000000", "size": "0x100000"}}, "debug": "svd/ATSAME54P20A.svd", "processor": {"fpu": "SP_FPU", "endianness": "Little-endian"}}, "STM32F205ZC": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x40000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x18000"}, "IROM1": {"start": "0x08000000", "size": "0x40000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MKW31Z256xxx4": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/MKWxxZ_P256_2KB_SEC.FLM": {"default": "1", "ramsize": "0x1000", "size": "0x00040000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.1.7.0.pack", "compile": {"header": "Device/Include/MKW31Z4.h", "define": "MKW31Z512xxx4"}, "pdsc_file": "http://www.keil.com/pack/Keil.Kinetis_KWxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x1FFF8000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/MKW31Z4.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F205ZE": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x80000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x80000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "STM32F205ZG": {"core": "Cortex-M3", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F2xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F2xx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x10", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F2xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.2.7.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F2xx/Include/stm32f2xx.h", "define": "STM32F205xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F2xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x20000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F20x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "120000000"}}, "MM32x103": {"core": "Cortex-M3", "vendor": "MindMotion:132", "algorithm": {"Flash/MM32x103_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x103_DFP.1.1.0.pack", "compile": {"header": "Device/Include/MM32x103.h", "define": "MM32x103_MD"}, "pdsc_file": "http://www.mindmotion.com.cn/Download/MDK_KEIL/MindMotion.MM32x103_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x5000"}, "IROM1": {"start": "0x08000000", "size": "0x20000"}}, "debug": "SVD/MM32x103.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "96000000"}}, "NM1100XAAE": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NM1200_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NM1200_AP_8.FLM": {"default": "1", "ramsize": null, "size": "0x2000", "ramstart": null, "start": "0x00000000"}, "Flash/NM1200_LD_2.FLM": {"default": "0", "ramsize": null, "size": "0x800", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NM1200\\Include\\NM1200_NM1100.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x800"}, "IROM1": {"start": "0x00000000", "size": "0x2000"}}, "debug": "SVD\\Nuvoton\\NM1200AE_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "HC32F150KA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.1.0.1.pack", "compile": {"header": "Device/Include/hc32f15.h", "define": "__HC32F156FX__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32F15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32F150KX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F479NI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "STM32H743XI": {"core": "Cortex-M7", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32H7x_2048.FLM": {"default": "1", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7xx.h", "define": "STM32H743xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32H7xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IRAM2": {"start": "0x24000000", "size": "0x00080000"}, "IROM1": {"start": "0x08000000", "size": "0x00200000"}}, "debug": "CMSIS/SVD/STM32H7x3.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian", "clock": "400000000"}}, "LPC1113FHN33/202": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "LPC1113FHN33/203": {"core": "Cortex-M0", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_24.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x6000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.1.4.0.pack", "compile": {"header": "Device\\Include\\LPC11xx\\LPC11xx.h", "define": "LPC1125"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1100_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x6000"}}, "debug": "SVD\\LPC111x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "XMC1401-Q048x0064": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1400_200.FLM": {"default": "1", "ramsize": null, "size": "0x32000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1400_series/Include/XMC1400.h", "define": "XMC1404_F064x0200"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x10000"}}, "debug": "SVD/XMC1400.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "48000000"}}, "LPC822M101JHI33": {"core": "Cortex-M0+", "vendor": "NXP:11", "algorithm": {"Flash/LPC8xx_16.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x00004000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC800_DFP.1.7.0.pack", "compile": {"header": "Device/Include/LPC8xx.h", "define": "LPC822M101JDH20"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC800_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x00001000"}, "IROM1": {"start": "0x00000000", "size": "0x00004000"}}, "debug": "SVD/LPC82x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "30000000"}}, "STM32F479NG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F469_Quad_SPI.FLM": {"default": "1", "ramsize": null, "size": "0x2000000", "ramstart": null, "start": "0x90000000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F479xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x50000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F46_79x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "HT32F52230_28SSOP": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52220_30"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x7C00"}}, "debug": "SVD/HT32F52220_30.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "STM32F439VG": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}, "CMSIS/Flash/STM32F4xx_1024.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x100000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "EFM32LG995F64": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32LG/Include/em_device.h", "define": "EFM32LG995F64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD/EFM32LG/EFM32LG995F64.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "HT32F52253": {"core": "Cortex-M0+", "vendor": "Holtek:106", "algorithm": {"ARM/Flash/HT32F.FLM": {"default": "1", "ramsize": null, "size": "0x100000", "ramstart": null, "start": "0x00000000"}, "ARM/Flash/HT32F_OPT.FLM": {"default": "1", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x1FF00000"}}, "debug-interface": [], "pack_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.1.0.14.pack", "compile": {"header": "ARM/INC/Holtek/HT32F5xxxx/ht32f5xxxx_01.h", "define": "USE_HT32F52243_53"}, "pdsc_file": "http://mcu.holtek.com.tw/pack/Holtek.HT32_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x1FC00"}}, "debug": "SVD/HT32F52243_53.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "40000000"}}, "ATSAML21J17B": {"core": "Cortex-M0+", "vendor": "Atmel:3", "algorithm": {"Flash/ATSAML21_128.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}, "Flash/ATSAML21_128_EEPROM.FLM": {"default": "1", "ramsize": null, "size": "0x01000", "ramstart": null, "start": "0x00400000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.1.2.0.pack", "compile": {"header": "Device\\SAML21\\Include\\saml21.h", "define": "__SAML21J18B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-L_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x04000"}, "IRAM2": {"start": "0x30000000", "size": "0x02000"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD\\SAML21\\ATSAML21J17B.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LPC1343FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_32.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x8000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IROM1": {"start": "0x00000000", "size": "0x8000"}}, "debug": "SVD/LPC13xx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "STM32F439VI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F439xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F439x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "HC32L156JA": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x20000"}}, "debug": "SVD/HC32L156JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EFM32GG280F1024": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/EFM32GG.FLM": {"default": "1", "ramsize": "0x8000", "size": "0x00100000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.2.5.0.pack", "compile": {"header": "Device/EFM32GG/Include/em_device.h", "define": "EFM32GG280F512"}, "pdsc_file": "http://www.keil.com/pack/Keil.EFM32GGxxx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00020000"}, "IROM1": {"start": "0x00000000", "size": "0x00100000"}}, "debug": "SVD/EFM32GG/EFM32GG280F1024.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "STM32F437AI": {"core": "Cortex-M4", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32F4xx_2048.FLM": {"default": "1", "ramsize": null, "size": "0x200000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32F4xx_OTP.FLM": {"default": "0", "ramsize": null, "size": "0x0210", "ramstart": null, "start": "0x1FFF7800"}, "CMSIS/Flash/STM32F42xxx_43xxx_OPT.FLM": {"default": "0", "ramsize": null, "size": "0x08", "ramstart": null, "start": "0x1FFFC000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.2.11.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h", "define": "STM32F437xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x30000"}, "IRAM2": {"start": "0x10000000", "size": "0x10000"}, "IROM1": {"start": "0x08000000", "size": "0x200000"}}, "debug": "CMSIS/SVD/STM32F437x.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "180000000"}}, "ISD9341": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x18000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x4000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "EZR32LG230F256R63": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R63.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "NUC100LD1DN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100DN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "ISD9340": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/ISD9100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/ISD9100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x18000", "ramstart": null, "start": "0x00000000"}, "Flash/ISD9100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3000"}, "IROM1": {"start": "0x00000000", "size": "0x18000"}}, "debug": "SVD\\Nuvoton\\ISD9300_v3.svd", "processor": {"clock": "48000000"}}, "Generic_M051_Series": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/M051_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/M0516_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}, "Flash/M051_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC472\\Include\\NUC472_442.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\M051AN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "STM32L083V8": {"core": "Cortex-M0+", "vendor": "STMicroelectronics:13", "algorithm": {"CMSIS/Flash/STM32L0xx_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x08000000"}, "CMSIS/Flash/STM32L07x_64_EEPROM.FLM": {"default": "0", "ramsize": null, "size": "0x00000800", "ramstart": null, "start": "0x08080C00"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.2.0.0.pack", "compile": {"header": "Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h", "define": "STM32L083xx"}, "pdsc_file": "http://www.keil.com/pack/Keil.STM32L0xx_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00050000"}, "IROM1": {"start": "0x08000000", "size": "0x00010000"}}, "debug": "CMSIS/SVD/STM32L07x.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "TM4C123FE6PM": {"core": "Cortex-M4", "vendor": "Texas Instruments:16", "algorithm": {"Flash/TM4C123_128.FLM": {"default": "1", "ramsize": null, "size": "0x020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.TM4C_DFP.1.1.0.pack", "compile": {"header": "Device/Include/TM4C123/TM4C123.h", "define": "TM4C123GH6ZXR"}, "pdsc_file": "http://www.keil.com/pack/Keil.TM4C_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x008000"}, "IROM1": {"start": "0x00000000", "size": "0x020000"}}, "debug": "SVD/TM4C123/TM4C123FE6PM.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "80000000"}}, "GD32F190RB": {"core": "Cortex-M3", "vendor": "GigaDevice:123", "algorithm": {"Flash/GD32F1x0_128.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x08000000"}}, "debug-interface": [], "pack_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.3.0.2.pack", "compile": {"header": "Device/Include/gd32f1x0.h", "define": "GD32F1x0 USE_STDPERIPH_DRIVER GD32F170_190"}, "pdsc_file": "http://gd32mcu.21ic.com/data/documents/yingyongruanjian/GigaDevice.GD32F1x0_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00002000"}, "IROM1": {"start": "0x08000000", "size": "0x00020000"}}, "debug": "SVD/GD32F1x0.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EZR32LG230F256R61": {"core": "Cortex-M3", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32LG.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32LG/Include/em_device.h", "define": "EZR32LG230F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32LG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD/EZR32LG/EZR32LG230F256R61.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "48000000"}}, "LM3S6938": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_256.FLM": {"default": "1", "ramsize": null, "size": "0x00040000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00010000"}, "IROM1": {"start": "0x00000000", "size": "0x00040000"}}, "debug": "SVD\\lm3s6938.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "50000000"}}, "HC32L150J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L150JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "EZR32WG330F128R63": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashEFM32.flash": {"default": "0", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}, "Flash/EFM32WG.FLM": {"default": "1", "ramsize": null, "size": "0x00020000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EZR32WG/Include/em_device.h", "define": "EZR32WG330F64R69"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EZR32WG_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00020000"}}, "debug": "SVD/EZR32WG/EZR32WG330F128R63.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "48000000"}}, "XMC1100-Q024x0016": {"core": "Cortex-M0", "vendor": "Infineon:7", "algorithm": {"Flash/XMC1100_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x10001000"}}, "debug-interface": [], "pack_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.2.7.1.pack", "compile": {"header": "Device/XMC1100_series/Include/XMC1100.h", "define": "XMC1100_T038x0064"}, "pdsc_file": "http://dave.infineon.com/Libraries/CMSIS_PACK/Infineon.XMC1000_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x3FFC"}, "IROM1": {"start": "0x10001000", "size": "0x4000"}}, "debug": "SVD/XMC1100.svd", "processor": {"fpu": "NO_FPU", "endianness": "Little-endian", "clock": "32000000"}}, "HC32L156J8": {"core": "Cortex-M0+", "vendor": "HDSC:145", "algorithm": {"Flash/HC32L15.FLM": {"default": "1", "ramsize": null, "size": "0x20000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.1.0.1.pack", "compile": {"header": "Device/Include/hc32l15.h", "define": "__HC32L1567X__"}, "pdsc_file": "https://raw.githubusercontent.com/hdscmcu/pack/master/HDSC.HC32L15.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/HC32L156JX.SFR", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "32000000"}}, "LPC1317FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "LM3S1H11": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1h11.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "LM3S1H16": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_512.FLM": {"default": "1", "ramsize": null, "size": "0x00080000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s1z16.h", "define": "LM3S1Z16"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x0000C000"}, "IROM1": {"start": "0x00000000", "size": "0x00080000"}}, "debug": "SVD\\lm3s1h16.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "80000000"}}, "ATSAMV70N20": {"core": "Cortex-M7", "vendor": "Atmel:3", "algorithm": {"samv70/keil/flash/ATSAMV7x_1024.FLM": {"default": "1", "ramsize": null, "size": "0x00100000", "ramstart": null, "start": "0x00400000"}, "samv70/keil/flash/ATSAMV7x_GPNVM.FLM": {"default": "0", "ramsize": null, "size": "0x00000010", "ramstart": null, "start": "0x1FFFFFF0"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.2.4.0.pack", "compile": {"header": "samv70b/include/sam.h", "define": "__SAMV70J20B__"}, "pdsc_file": "http://www.keil.com/pack/Keil.SAM-V_DFP.pdsc", "memory": {"IROM2": {"start": "0x00800000", "size": "0x00004000"}, "IRAM1": {"start": "0x20400000", "size": "0x00060000"}, "IROM1": {"start": "0x00400000", "size": "0x00100000"}}, "debug": "samv70/svd/ATSAMV70N20.svd", "processor": {"fpu": "DP_FPU", "endianness": "Little-endian"}}, "LPC1347FBD48": {"core": "Cortex-M3", "vendor": "NXP:11", "algorithm": {"Flash/LPC1xxx_64.FLM": {"default": "1", "ramsize": "0x0FE0", "size": "0x10000", "ramstart": "0x10000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.1.1.0.pack", "compile": {"header": "Device/Include/LPC13Uxx/LPC13Uxx.h"}, "pdsc_file": "http://www.keil.com/pack/Keil.LPC1300_DFP.pdsc", "memory": {"IRAM1": {"start": "0x10000000", "size": "0x2000"}, "IRAM2": {"start": "0x20000000", "size": "0x0800"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD/LPC13Uxx.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "72000000"}}, "EFM32GG11B420F2048IQ64": {"core": "Cortex-M4", "vendor": "Silicon Labs:21", "algorithm": {"Flash/FlashGECKOG1.flash": {"default": "0", "ramsize": null, "size": "0x00200000", "ramstart": null, "start": "0x00000000"}, "Flash/GECKOG1.FLM": {"default": "1", "ramsize": "0x4000", "size": "0x00200000", "ramstart": "0x20000000", "start": "0x00000000"}}, "debug-interface": [], "pack_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.5.4.0.pack", "compile": {"header": "Device/SiliconLabs/EFM32GG11B/Include/em_device.h", "define": "EFM32GG11B420F2048IQ64"}, "pdsc_file": "https://www.silabs.com/documents/public/cmsis-packs/SiliconLabs.EFM32GG11B_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00080000"}, "IROM1": {"start": "0x00000000", "size": "0x00200000"}}, "debug": "SVD/EFM32GG11B/EFM32GG11B420F2048IQ64.svd", "processor": {"fpu": "1", "endianness": "Little-endian", "clock": "50000000"}}, "LM3S2410": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_128.FLM": {"default": "1", "ramsize": null, "size": "0x00018000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s2u93.h", "define": "LM3S2U93"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00008000"}, "IROM1": {"start": "0x00000000", "size": "0x00018000"}}, "debug": "SVD\\lm3s2410.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}, "NUC100RD1BN": {"core": "Cortex-M0", "vendor": "Nuvoton:18", "algorithm": {"Flash/NUC100_CFG.FLM": {"default": "0", "ramsize": null, "size": "0x00000004", "ramstart": null, "start": "0x00300000"}, "Flash/NUC100_LD_4.FLM": {"default": "0", "ramsize": null, "size": "0x1000", "ramstart": null, "start": "0x00100000"}, "Flash/NUC100_AP_64.FLM": {"default": "1", "ramsize": null, "size": "0x10000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.1.2.0.pack", "compile": {"header": "Device\\NUC100\\Include\\NUC100Series.h"}, "pdsc_file": "http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack/Nuvoton.NuMicro_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x1000"}, "IROM1": {"start": "0x00000000", "size": "0x10000"}}, "debug": "SVD\\Nuvoton\\NUC100BN_v1.svd", "processor": {"fpu": "FPU", "endianness": "Configurable", "clock": "50000000"}}, "LM3S6110": {"core": "Cortex-M3", "vendor": "Texas Instruments:16", "algorithm": {"Flash/LM3S_64.FLM": {"default": "1", "ramsize": null, "size": "0x00010000", "ramstart": null, "start": "0x00000000"}}, "debug-interface": [], "pack_file": "http://www.keil.com/pack/Keil.LM3S_DFP.1.1.0.pack", "compile": {"header": "Device\\Include\\lm3s6965.h", "define": "LM3S6965"}, "pdsc_file": "http://www.keil.com/pack/Keil.LM3S_DFP.pdsc", "memory": {"IRAM1": {"start": "0x20000000", "size": "0x00004000"}, "IROM1": {"start": "0x00000000", "size": "0x00010000"}}, "debug": "SVD\\lm3s6110.svd", "processor": {"fpu": "0", "endianness": "Little-endian", "clock": "25000000"}}} From acfdaca56a026caca5b8c4ceacbedbd3e4e7ee5e Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 25 Jan 2018 15:46:36 +0100 Subject: [PATCH 086/133] MTB_XX : STDIO configuration Here is a proposition - to align with other STM32 - and to remove compilation warnings : [Warning] PeripheralNames.h@38,0: "STDIO_UART" redefined --- .../PeripheralNames.h | 4 ---- .../TARGET_MTB_MTS_DRAGONFLY/PinNames.h | 21 +++++++++++++++++-- .../PeripheralNames.h | 4 ---- .../TARGET_MTB_MXCHIP_EMW3166/PinNames.h | 20 ++++++++++++++++-- targets/targets.json | 20 +++++------------- 5 files changed, 42 insertions(+), 27 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h index 15a5c2bc7a..697d107c41 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PeripheralNames.h @@ -46,10 +46,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PB_6 -#define STDIO_UART_RX PB_7 -#define STDIO_UART UART_1 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h index 941228cae4..e9ee25c4e8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_MTB_MTS_DRAGONFLY/PinNames.h @@ -145,9 +145,26 @@ typedef enum { P_39 = PA_13, P_40 = PB_7, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#elif MBED_CONF_TARGET_USB_TX + STDIO_UART_TX = MBED_CONF_TARGET_USB_TX, +#else + STDIO_UART_TX = PB_6, +#endif + +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#elif MBED_CONF_TARGET_USB_RX + STDIO_UART_TX = MBED_CONF_TARGET_USB_RX, +#else + STDIO_UART_RX = PB_7, +#endif + //DAPLink - USBTX = MBED_CONF_TARGET_USB_TX, - USBRX = MBED_CONF_TARGET_USB_RX, + USBTX = STDIO_UART_TX, + USBRX = STDIO_UART_RX, SWDIO = PA_13, SWCLK = PA_14, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h index 78bc359403..c85180daf4 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PeripheralNames.h @@ -33,10 +33,6 @@ typedef enum { UART_6 = (int)USART6_BASE } UARTName; -#define STDIO_UART_TX PD_8 -#define STDIO_UART_RX PD_9 -#define STDIO_UART UART_3 - typedef enum { SPI_1 = (int)SPI1_BASE, SPI_2 = (int)SPI2_BASE, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h index c868d39bde..3f31b59516 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F412xG/TARGET_MTB_MXCHIP_EMW3166/PinNames.h @@ -219,9 +219,25 @@ typedef enum { SPI_SCK = P_6, SPI_CS = P_16, + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + STDIO_UART_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#elif MBED_CONF_TARGET_USB_TX + STDIO_UART_TX = MBED_CONF_TARGET_USB_TX, +#else + STDIO_UART_TX = PB_6, +#endif + +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + STDIO_UART_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#elif MBED_CONF_TARGET_USB_RX + STDIO_UART_TX = MBED_CONF_TARGET_USB_RX, +#else + STDIO_UART_RX = PB_7, +#endif //DAPLink - USBRX = MBED_CONF_TARGET_USB_RX, - USBTX = MBED_CONF_TARGET_USB_TX, + USBRX = STDIO_UART_RX, + USBTX = STDIO_UART_TX, SWDIO = P_26, SWCLK = P_25, NTRST = P_13, diff --git a/targets/targets.json b/targets/targets.json index 3552deb09e..8dfeb0f2f7 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1088,19 +1088,14 @@ "device_name": "STM32F412ZG", "bootloader_supported": true, "config": { - "usb_tx": { + "stdio_uart_tx": { "help": "Value PB_6", "value": "PB_6" }, - "usb_rx": { + "stdio_uart_rx": { "help": "Value PB_7", "value": "PB_7" }, - "stdio_uart": { - "help": "Value: UART_1", - "value": "UART_1", - "macro_name": "STDIO_UART" - }, "clock_source": { "help": "Mask value : USE_PLL_HSE_EXTC | USE_PLL_HSE_XTAL (need HW patch) | USE_PLL_HSI", "value": "USE_PLL_HSI", @@ -1889,19 +1884,14 @@ "value": 1, "macro_name": "MODEM_ON_BOARD_UART" }, - "usb_tx": { + "stdio_uart_tx": { "help": "Value PB_6", "value": "PB_6" }, - "usb_rx": { + "stdio_uart_rx": { "help": "Value PB_7", "value": "PB_7" - }, - "stdio_uart": { - "help": "Value: UART_1", - "value": "UART_1", - "macro_name": "STDIO_UART" - } + } }, "overrides": { "lse_available": 0 From 5651aa22da20b6a8bda1378413b494692818a332 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Thu, 25 Jan 2018 12:00:34 +0100 Subject: [PATCH 087/133] NUCLEO_F401RE : PeripheralPins file update Default SERIAL pins are now available for ADC and PWM when STDIO_UART_TX and STDIO_UART_RX are user defined https://os.mbed.com/teams/ST/wiki/STDIO Alternative pins have been also defined --- .../TARGET_NUCLEO_F401RE/PeripheralPins.c | 87 ++++++++++--------- .../TARGET_NUCLEO_F401RE/PinNames.h | 25 +++++- 2 files changed, 69 insertions(+), 43 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralPins.c index f25904562c..cf963a4e70 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PeripheralPins.c @@ -1,6 +1,6 @@ /* mbed Microcontroller Library ******************************************************************************* - * Copyright (c) 2014, STMicroelectronics + * Copyright (c) 2017, STMicroelectronics * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,19 +30,35 @@ #include "PeripheralPins.h" -// ===== -// Note: Commented lines are alternative possibilities which are not used per default. -// If you change them, you will have also to modify the corresponding xxx_api.c file -// for pwmout, analogin, analogout, ... -// ===== +//============================================================================== +// Notes +// +// - The pins mentionned Px_y_ALTz are alternative possibilities which use other +// HW peripheral instances. You can use them the same way as any other "normal" +// pin (i.e. PwmOut pwm(PA_7_ALT0);). These pins are not displayed on the board +// pinout image on mbed.org. +// +// - The pins which are connected to other components present on the board have +// the comment "Connected to xxx". The pin function may not work properly in this +// case. These pins may not be displayed on the board pinout image on mbed.org. +// Please read the board reference manual and schematic for more information. +// +// - Warning: some pins are connected to the default STDIO_UART_TX and STDIO_UART_RX pins. +// See https://os.mbed.com/teams/ST/wiki/STDIO for more information. +// +//============================================================================== //*** ADC *** const PinMap PinMap_ADC[] = { {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 -// {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 // SERIAL_TX -// {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 // SERIAL_RX +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 +#endif {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4 {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 @@ -86,22 +102,25 @@ const PinMap PinMap_I2C_SCL[] = { //*** PWM *** -// TIM5 cannot be used because already used by the us_ticker const PinMap PinMap_PWM[] = { {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 -// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 +// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 // TIM5 used by the us_ticker {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 -// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 -// {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 // SERIAL_TX -// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 // SERIAL_TX -// {PA_2, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 // SERIAL_TX -// {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 // SERIAL_RX -// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 // SERIAL_RX -// {PA_3, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 // SERIAL_RX +// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 // TIM5 used by the us_ticker +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + {PA_2_ALT0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 +// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 // TIM5 used by the us_ticker + {PA_2, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + {PA_3_ALT0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 +// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 // TIM5 used by the us_ticker + {PA_3, PWM_9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 +#endif {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N - ARDUINO -// {PA_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO + {PA_7_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 - ARDUINO {PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 {PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 @@ -109,18 +128,18 @@ const PinMap PinMap_PWM[] = { {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N -// {PB_0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PB_0_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N -// {PB_1, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {PB_1_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 - ARDUINO {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 - ARDUINO {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 - ARDUINO {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 -// {PB_8, PWM_10,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + {PB_8_ALT0, PWM_10,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 -// {PB_9, PWM_11,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + {PB_9_ALT0, PWM_11,STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 - ARDUINO {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N @@ -137,7 +156,7 @@ const PinMap PinMap_PWM[] = { //*** SERIAL *** const PinMap PinMap_UART_TX[] = { - {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, // SERIAL_TX + {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, // Connected to STDIO_UART_TX (default) {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, {PA_11, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, @@ -146,7 +165,7 @@ const PinMap PinMap_UART_TX[] = { }; const PinMap PinMap_UART_RX[] = { - {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, // SERIAL_RX + {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, // Connected to STDIO_UART_RX (default) {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, {PA_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, @@ -157,22 +176,12 @@ const PinMap PinMap_UART_RX[] = { const PinMap PinMap_UART_RTS[] = { {PA_1, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, - // {PA_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, - // {PB_14, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, // MEMs - // {PC_8, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)}, - // {PD_4, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, - // {PD_12, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART3)}, // LED D4 {NC, NC, 0} }; const PinMap PinMap_UART_CTS[] = { {PA_0, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, - // {PB_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, - // {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, - // {PC_9, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)}, - // {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, - // {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART3)}, // LED D4 {NC, NC, 0} }; @@ -181,7 +190,7 @@ const PinMap PinMap_UART_CTS[] = { const PinMap PinMap_SPI_MOSI[] = { {PA_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO {PB_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, -// {PB_5, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_5_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, @@ -191,7 +200,7 @@ const PinMap PinMap_SPI_MOSI[] = { const PinMap PinMap_SPI_MISO[] = { {PA_6, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO {PB_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, -// {PB_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, @@ -201,7 +210,7 @@ const PinMap PinMap_SPI_MISO[] = { const PinMap PinMap_SPI_SCLK[] = { {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, // ARDUINO {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, -// {PB_3, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_3_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, @@ -210,9 +219,9 @@ const PinMap PinMap_SPI_SCLK[] = { const PinMap PinMap_SPI_SSEL[] = { {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, -// {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, + {PA_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, -// {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, + {PA_15_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, {NC, NC, 0} diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h index c89ff31a0f..b581d5dbcf 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/TARGET_NUCLEO_F401RE/PinNames.h @@ -37,15 +37,24 @@ extern "C" { #endif +typedef enum { + ALT0 = 0x100, + ALT1 = 0x200 +} ALTx; + typedef enum { PA_0 = 0x00, PA_1 = 0x01, PA_2 = 0x02, + PA_2_ALT0 = PA_2|ALT0, PA_3 = 0x03, + PA_3_ALT0 = PA_3|ALT0, PA_4 = 0x04, + PA_4_ALT0 = PA_4|ALT0, PA_5 = 0x05, PA_6 = 0x06, PA_7 = 0x07, + PA_7_ALT0 = PA_7|ALT0, PA_8 = 0x08, PA_9 = 0x09, PA_10 = 0x0A, @@ -54,17 +63,25 @@ typedef enum { PA_13 = 0x0D, PA_14 = 0x0E, PA_15 = 0x0F, + PA_15_ALT0 = PA_15|ALT0, PB_0 = 0x10, + PB_0_ALT0 = PB_0|ALT0, PB_1 = 0x11, + PB_1_ALT0 = PB_1|ALT0, PB_2 = 0x12, PB_3 = 0x13, + PB_3_ALT0 = PB_3|ALT0, PB_4 = 0x14, + PB_4_ALT0 = PB_4|ALT0, PB_5 = 0x15, + PB_5_ALT0 = PB_5|ALT0, PB_6 = 0x16, PB_7 = 0x17, PB_8 = 0x18, + PB_8_ALT0 = PB_8|ALT0, PB_9 = 0x19, + PB_9_ALT0 = PB_9|ALT0, PB_10 = 0x1A, PB_12 = 0x1C, PB_13 = 0x1D, @@ -85,13 +102,13 @@ typedef enum { PC_11 = 0x2B, PC_12 = 0x2C, PC_13 = 0x2D, - PC_14 = 0x2E, - PC_15 = 0x2F, + PC_14 = 0x2E, // Connected to RCC_OSC32_IN + PC_15 = 0x2F, // Connected to RCC_OSC32_OUT PD_2 = 0x32, - PH_0 = 0x70, - PH_1 = 0x71, + PH_0 = 0x70, // Connected to RCC_OSC_IN + PH_1 = 0x71, // Connected to RCC_OSC_OUT // ADC internal channels ADC_TEMP = 0xF0, From 1e5295b17c1a6e98748d5d0caed6ca59efefd6b0 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 24 Jan 2018 18:27:47 -0600 Subject: [PATCH 088/133] littlefs: Set specific hash for littlefs-fuse testing --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 40d81b43e7..4a038b3a0a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -127,6 +127,7 @@ matrix: before_script: # Setup and patch littlefs-fuse - git clone https://github.com/geky/littlefs-fuse littlefs_fuse + - git -C littlefs_fuse checkout 3f1ed6e37799e49e3710830dc6abb926d5503cf2 - echo '*' > littlefs_fuse/.mbedignore - rm -rf littlefs_fuse/littlefs/* - cp -r $(git ls-tree --name-only HEAD $LITTLEFS/littlefs/) littlefs_fuse/littlefs From a5598df4d77aef0f7ac3775b867ef74ad9910bec Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 24 Jan 2018 14:45:18 +0100 Subject: [PATCH 089/133] Use RawSerial in MBED_11 test --- features/unsupported/tests/mbed/ticker/main.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/features/unsupported/tests/mbed/ticker/main.cpp b/features/unsupported/tests/mbed/ticker/main.cpp index fc1ed9ca30..c41fff20c0 100644 --- a/features/unsupported/tests/mbed/ticker/main.cpp +++ b/features/unsupported/tests/mbed/ticker/main.cpp @@ -1,11 +1,7 @@ #include "mbed.h" #include "test_env.h" -void print_char(char c = '*') -{ - printf("%c", c); - fflush(stdout); -} +RawSerial pc(USBTX, USBRX); Ticker flipper_1; DigitalOut led1(LED1); @@ -17,7 +13,7 @@ void flip_1() { } else { led1 = 1; led1_state = 1; } - print_char(); + pc.putc('*'); } Ticker flipper_2; From 52c7fe5167c73a06e74213610cf19914c1945865 Mon Sep 17 00:00:00 2001 From: Serge Camille Date: Wed, 24 Jan 2018 13:29:43 +0100 Subject: [PATCH 090/133] NXP LPC4088: Add missing SPI SSEL pin to Pinmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Pin P5_3 (p31) was missing from the NXP LPC4088 SPI PinMap for SSEL. Adding this Pin allows usage of SPISlave with SSP2 using the SSEL pin. The pin and its SSP2_SSEL function is both documented in https://os.mbed.com/media/uploads/embeddedartists/lpc4088_qsb_pinning.xlsx as well as in UM10562 LPC408x/407x User manual Rev. 3 — 12 March 2014 chapter 7.4.1.4 Table 90 (https://www.nxp.com/docs/en/user-guide/UM10562.pdf). --- targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c index 6a71a44046..9fdf2331db 100644 --- a/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c +++ b/targets/TARGET_NXP/TARGET_LPC408X/TARGET_LPC4088/spi_api.c @@ -69,6 +69,7 @@ static const PinMap PinMap_SPI_SSEL[] = { {P1_28, SPI_0, 5}, {P2_23, SPI_0, 2}, {P4_21, SPI_1, 3}, + {P5_3, SPI_2, 2}, {NC , NC , 0} }; From c0b4f0c8dd7585a2ffd3dd98bd423c06ff62b2b6 Mon Sep 17 00:00:00 2001 From: PHST Date: Wed, 24 Jan 2018 08:20:38 +0100 Subject: [PATCH 091/133] Add missing EFM32 HAL flash init/deinit function calls --- targets/TARGET_Silicon_Labs/TARGET_EFM32/flash_api.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/flash_api.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/flash_api.c index 6e8fa3b229..307664bb98 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/flash_api.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/flash_api.c @@ -35,6 +35,7 @@ int32_t flash_init(flash_t *obj) { (void)obj; + MSC_Init(); return 0; } @@ -46,6 +47,7 @@ int32_t flash_init(flash_t *obj) int32_t flash_free(flash_t *obj) { (void)obj; + MSC_Deinit(); return 0; } From e0882e1931e4a7a6fd4ce0050d4f92b40bad842a Mon Sep 17 00:00:00 2001 From: Michael Kaplan Date: Wed, 24 Jan 2018 08:10:35 +0100 Subject: [PATCH 092/133] CriticalSectionLock: fixing missing include Macro MBED_DEPRECATED_SINCE is defined in platform/mbed_toolchain.h which was not included. If someone used member functions lock or unlock (which are prefixed with MBED_DEPRECATED_SINCE since some time), there would be a compile error instead of a warning. Including mbed_toolchain.h fixes that. --- platform/CriticalSectionLock.h | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/CriticalSectionLock.h b/platform/CriticalSectionLock.h index cb619769c8..65baa879ab 100644 --- a/platform/CriticalSectionLock.h +++ b/platform/CriticalSectionLock.h @@ -19,6 +19,7 @@ #define MBED_CRITICALSECTIONLOCK_H #include "platform/mbed_critical.h" +#include "platform/mbed_toolchain.h" namespace mbed { From f047a93066198e221aa01fb16adcb2a20618e8b5 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Tue, 23 Jan 2018 19:19:43 -0800 Subject: [PATCH 093/133] fix typos in lint.py --- tools/targets/lint.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/targets/lint.py b/tools/targets/lint.py index 0202d45a31..826bbb56b8 100644 --- a/tools/targets/lint.py +++ b/tools/targets/lint.py @@ -163,7 +163,7 @@ BOARD_FORMAT_STRING = {1: "Board (%s)", def _generate_hierarchy_string(mcus, boards): global_errors = [] if len(mcus) < 1: - global_errors.append("No MCUS found in heirarchy") + global_errors.append("No MCUS found in hierarchy") mcus_string = "??? ->" elif len(mcus) > 3: global_errors.append("No name for targets %s" % ", ".join(mcus[3:])) @@ -174,7 +174,7 @@ def _generate_hierarchy_string(mcus, boards): mcus_string = MCU_FORMAT_STRING[len(mcus)] % tuple(mcus) if len(boards) < 1: - global_errors.append("no boards found in heirarchy") + global_errors.append("no boards found in hierarchy") boards_string = "???" elif len(boards) > 2: global_errors.append("no name for targets %s" % ", ".join(boards[2:])) @@ -187,7 +187,7 @@ def _generate_hierarchy_string(mcus, boards): def check_hierarchy(tgt): - """Atempts to assign labels to the heirarchy""" + """Atempts to assign labels to the hierarchy""" resolution_order = copy(tgt.resolution_order_names[:-1]) mcus, boards = _split_boards(resolution_order, tgt) From d5523167bf9fda3eca018eee86fee282a67dedbe Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 23 Jan 2018 15:18:14 +0100 Subject: [PATCH 094/133] STM32F0: fix usart irq management --- .../TARGET_STM/TARGET_STM32F0/serial_device.c | 141 +++++++++--------- 1 file changed, 71 insertions(+), 70 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c index 2ea47faeb3..060b114a21 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c @@ -87,47 +87,46 @@ static void uart2_irq(void) } #endif -#if defined USART3_BASE -static void uart3_irq(void) +// Used for both USART3_4_IRQn and USART3_8_IRQn +static void uart3_8_irq(void) { - uart_irq(2); -} +#if defined(USART3_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART3) != RESET) + { + uart_irq(2); + } #endif - -#if defined USART4_BASE -static void uart4_irq(void) -{ - uart_irq(3); -} +#if defined(USART4_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART4) != RESET) + { + uart_irq(3); + } #endif - -#if defined USART5_BASE -static void uart5_irq(void) -{ - uart_irq(4); -} +#if defined(USART5_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART5) != RESET) + { + uart_irq(4); + } #endif - -#if defined USART6_BASE -static void uart6_irq(void) -{ - uart_irq(5); -} +#if defined(USART6_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART6) != RESET) + { + uart_irq(5); + } #endif - -#if defined USART7_BASE -static void uart7_irq(void) -{ - uart_irq(6); -} +#if defined(USART7_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART7) != RESET) + { + uart_irq(6); + } #endif - -#if defined USART8_BASE -static void uart8_irq(void) -{ - uart_irq(7); -} +#if defined(USART8_BASE) + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART8) != RESET) + { + uart_irq(7); + } #endif +} void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { @@ -156,53 +155,55 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) } #endif -#if defined (TARGET_STM32F091RC) - if (obj_s->uart == UART_3) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart3_irq; - } - - if (obj_s->uart == UART_4) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart4_irq; - } - - if (obj_s->uart == UART_5) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart5_irq; - } - - if (obj_s->uart == UART_6) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart6_irq; - } - - if (obj_s->uart == UART_7) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart7_irq; - } - - if (obj_s->uart == UART_8) { - irq_n = USART3_8_IRQn; - vector = (uint32_t)&uart8_irq; - } - -#elif defined (TARGET_STM32F030R8) || defined (TARGET_STM32F051R8) - -#else #if defined(USART3_BASE) if (obj_s->uart == UART_3) { +#if defined(TARGET_STM32F091RC) + irq_n = USART3_8_IRQn; +#else irq_n = USART3_4_IRQn; - vector = (uint32_t)&uart3_irq; +#endif + vector = (uint32_t)&uart3_8_irq; } #endif #if defined(USART4_BASE) if (obj_s->uart == UART_4) { +#if defined(TARGET_STM32F091RC) + irq_n = USART3_8_IRQn; +#else irq_n = USART3_4_IRQn; - vector = (uint32_t)&uart4_irq; +#endif + vector = (uint32_t)&uart3_8_irq; } #endif + +// Below usart are available only on TARGET_STM32F091RC +#if defined(USART5_BASE) + if (obj_s->uart == UART_5) { + irq_n = USART3_8_IRQn; + vector = (uint32_t)&uart3_8_irq; + } +#endif + +#if defined(USART6_BASE) + if (obj_s->uart == UART_6) { + irq_n = USART3_8_IRQn; + vector = (uint32_t)&uart3_8_irq; + } +#endif + +#if defined(USART7_BASE) + if (obj_s->uart == UART_7) { + irq_n = USART3_8_IRQn; + vector = (uint32_t)&uart3_8_irq; + } +#endif + +#if defined(USART8_BASE) + if (obj_s->uart == UART_8) { + irq_n = USART3_8_IRQn; + vector = (uint32_t)&uart3_8_irq; + } #endif if (enable) { From 2538f9d000b35ba4c407e910d2f3e32fdf7964f9 Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 23 Jan 2018 17:34:16 +0100 Subject: [PATCH 095/133] STM32F0 usart irq: fix issue with F070/F072 --- .../TARGET_STM/TARGET_STM32F0/serial_device.c | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c index 060b114a21..45ace51592 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c @@ -51,28 +51,34 @@ static uart_irq_handler irq_handler; * INTERRUPTS HANDLING ******************************************************************************/ -static void uart_irq(int id) +static uint32_t uart_irq(int id) { UART_HandleTypeDef * huart = &uart_handlers[id]; - + uint32_t status = 0; + if (serial_irq_ids[id] != 0) { if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) { irq_handler(serial_irq_ids[id], TxIrq); + status = 1; } } if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); /* Flag has been cleared when reading the content */ + status = 1; } } if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_ORE) != RESET) { __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); + status = 1; } } } + + return status; } static void uart1_irq(void) @@ -90,42 +96,42 @@ static void uart2_irq(void) // Used for both USART3_4_IRQn and USART3_8_IRQn static void uart3_8_irq(void) { +#if defined(TARGET_STM32F091RC) #if defined(USART3_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART3) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART3) != RESET) { uart_irq(2); } #endif #if defined(USART4_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART4) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART4) != RESET) { uart_irq(3); } #endif #if defined(USART5_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART5) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART5) != RESET) { uart_irq(4); } #endif #if defined(USART6_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART6) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART6) != RESET) { uart_irq(5); } #endif #if defined(USART7_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART7) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART7) != RESET) { uart_irq(6); } #endif #if defined(USART8_BASE) - if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART8) != RESET) - { + if (__HAL_GET_PENDING_IT(HAL_ITLINE_USART8) != RESET) { uart_irq(7); } #endif +#else // TARGET_STM32F070RB, TARGET_STM32F072RB + if (uart_irq(2) == 0) { // Check if it's USART3 + uart_irq(3); // Otherwise it's USART4 + } +#endif } void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) From 2c0daf8e1f776177716a5327ada03885ccbc166d Mon Sep 17 00:00:00 2001 From: bcostm Date: Wed, 24 Jan 2018 09:52:41 +0100 Subject: [PATCH 096/133] STM32F0: manage better uart3 & 4 irqs Manage the case where both uart3 and uart4 interrupts are arriving at the same time. --- .../TARGET_STM/TARGET_STM32F0/serial_device.c | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c index 45ace51592..62955239bc 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c @@ -51,34 +51,27 @@ static uart_irq_handler irq_handler; * INTERRUPTS HANDLING ******************************************************************************/ -static uint32_t uart_irq(int id) +static void uart_irq(int id) { UART_HandleTypeDef * huart = &uart_handlers[id]; - uint32_t status = 0; - if (serial_irq_ids[id] != 0) { if (__HAL_UART_GET_FLAG(huart, UART_FLAG_TXE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) { irq_handler(serial_irq_ids[id], TxIrq); - status = 1; } } if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) { irq_handler(serial_irq_ids[id], RxIrq); - /* Flag has been cleared when reading the content */ - status = 1; + /* Flag has been cleared when reading the content */ } } if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) { if (__HAL_UART_GET_IT(huart, UART_IT_ORE) != RESET) { __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); - status = 1; } } } - - return status; } static void uart1_irq(void) @@ -128,9 +121,12 @@ static void uart3_8_irq(void) } #endif #else // TARGET_STM32F070RB, TARGET_STM32F072RB - if (uart_irq(2) == 0) { // Check if it's USART3 - uart_irq(3); // Otherwise it's USART4 - } +#if defined(USART3_BASE) + uart_irq(2); +#endif +#if defined(USART4_BASE) + uart_irq(3); +#endif #endif } From 96227a861db077707d507bc1196274acf48431ff Mon Sep 17 00:00:00 2001 From: bcostm Date: Thu, 25 Jan 2018 11:23:53 +0100 Subject: [PATCH 097/133] STM32F0 uart irq: test IT flags for usart3/4 --- targets/TARGET_STM/TARGET_STM32F0/serial_device.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c index 62955239bc..733021e725 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/serial_device.c +++ b/targets/TARGET_STM/TARGET_STM32F0/serial_device.c @@ -122,10 +122,14 @@ static void uart3_8_irq(void) #endif #else // TARGET_STM32F070RB, TARGET_STM32F072RB #if defined(USART3_BASE) - uart_irq(2); + if (USART3->ISR & (UART_FLAG_TXE | UART_FLAG_RXNE | UART_FLAG_ORE)) { + uart_irq(2); + } #endif #if defined(USART4_BASE) - uart_irq(3); + if (USART4->ISR & (UART_FLAG_TXE | UART_FLAG_RXNE | UART_FLAG_ORE)) { + uart_irq(3); + } #endif #endif } From 3205901e99095f275ee2868ab637e63380642895 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Mon, 4 Dec 2017 10:39:14 -0600 Subject: [PATCH 098/133] Fix local static initialization in USB The local static initialization in USB was causing multiple problems: -Configurable descriptor values are set only once -USB descriptor initialization causes a trap in debug builds since this is acquiring a mutex in an interrupt handler -Extra ram used since all descriptors are in RAM This patch fixes these problems by making fixed descriptors static const so they are stored in flash and never need to be initialized and by making descriptors that do change a member of the class so they are always initialized when requested rather than once though lazy static local initialization. --- .../USBDevice/USBAudio/USBAudio.cpp | 24 +++++---- .../unsupported/USBDevice/USBAudio/USBAudio.h | 20 ++++++-- .../USBDevice/USBDevice/USBDevice.cpp | 50 ++++++++++--------- .../USBDevice/USBDevice/USBDevice.h | 19 +++---- .../unsupported/USBDevice/USBHID/USBHID.cpp | 22 ++++---- .../unsupported/USBDevice/USBHID/USBHID.h | 10 ++-- .../USBDevice/USBHID/USBKeyboard.cpp | 10 ++-- .../USBDevice/USBHID/USBKeyboard.h | 5 +- .../unsupported/USBDevice/USBHID/USBMouse.cpp | 12 +++-- .../unsupported/USBDevice/USBHID/USBMouse.h | 5 +- .../USBDevice/USBHID/USBMouseKeyboard.cpp | 6 +-- .../USBDevice/USBHID/USBMouseKeyboard.h | 2 +- .../unsupported/USBDevice/USBMIDI/USBMIDI.cpp | 12 ++--- .../unsupported/USBDevice/USBMIDI/USBMIDI.h | 6 +-- .../unsupported/USBDevice/USBMSD/USBMSD.cpp | 12 ++--- .../unsupported/USBDevice/USBMSD/USBMSD.h | 6 +-- .../USBDevice/USBSerial/USBCDC.cpp | 18 ++++--- .../unsupported/USBDevice/USBSerial/USBCDC.h | 8 +-- 18 files changed, 142 insertions(+), 105 deletions(-) diff --git a/features/unsupported/USBDevice/USBAudio/USBAudio.cpp b/features/unsupported/USBDevice/USBAudio/USBAudio.cpp index fba5ead9d6..ce1f70c25a 100644 --- a/features/unsupported/USBDevice/USBAudio/USBAudio.cpp +++ b/features/unsupported/USBDevice/USBAudio/USBAudio.cpp @@ -56,6 +56,8 @@ USBAudio::USBAudio(uint32_t frequency_in, uint8_t channel_nb_in, uint32_t freque volume = 0; + _build_configurationDesc(); + // connect the device USBDevice::connect(); } @@ -377,8 +379,8 @@ void USBAudio::USBCallback_requestCompleted(uint8_t * buf, uint32_t length) { FEATURE_UNIT_DESCRIPTOR_LENGTH + \ 2*OUTPUT_TERMINAL_DESCRIPTOR_LENGTH) -uint8_t * USBAudio::configurationDesc() { - static uint8_t configDescriptor[] = { +void USBAudio::_build_configurationDesc() { + uint8_t configDescriptorTemp[] = { // Configuration 1 CONFIGURATION_DESCRIPTOR_LENGTH, // bLength CONFIGURATION_DESCRIPTOR, // bDescriptorType @@ -615,15 +617,19 @@ uint8_t * USBAudio::configurationDesc() { 0x00, // bLockDelayUnits LSB(0x0000), // wLockDelay MSB(0x0000), // wLockDelay - - // Terminator - 0 // bLength }; + + MBED_ASSERT(sizeof(configDescriptorTemp) == sizeof(configDescriptor)); + memcpy(configDescriptor, configDescriptorTemp, sizeof(configDescriptor)); +} + +const uint8_t * USBAudio::configurationDesc() { + return configDescriptor; } -uint8_t * USBAudio::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBAudio::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x0c, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'A',0,'u',0,'d',0,'i',0,'o',0 //bString iInterface - Audio @@ -631,8 +637,8 @@ uint8_t * USBAudio::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBAudio::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBAudio::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x16, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'M',0,'b',0,'e',0,'d',0,' ',0,'A',0,'u',0,'d',0,'i',0,'o',0 //bString iProduct - Mbed Audio diff --git a/features/unsupported/USBDevice/USBAudio/USBAudio.h b/features/unsupported/USBDevice/USBAudio/USBAudio.h index 14ee29125b..f1bdbe6d48 100644 --- a/features/unsupported/USBDevice/USBAudio/USBAudio.h +++ b/features/unsupported/USBDevice/USBAudio/USBAudio.h @@ -216,21 +216,21 @@ protected: * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); /* * Called by USBDevice layer. Set interface/alternate of the device. @@ -270,6 +270,20 @@ protected: private: + /* + * Call to rebuild the configuration descriptor + * + * This function should be called on creation or when any + * value that is part of the configuration descriptor + * changes. + * @note This function uses ~200 bytes of stack so + * make sure your stack is big enough for it. + */ + void _build_configurationDesc(); + + // configuration descriptor + uint8_t configDescriptor[183]; + // stream available ? volatile bool available; diff --git a/features/unsupported/USBDevice/USBDevice/USBDevice.cpp b/features/unsupported/USBDevice/USBDevice/USBDevice.cpp index 7ec03f2579..438174fe2a 100644 --- a/features/unsupported/USBDevice/USBDevice/USBDevice.cpp +++ b/features/unsupported/USBDevice/USBDevice/USBDevice.cpp @@ -58,7 +58,7 @@ bool USBDevice::requestGetDescriptor(void) printf("device descr\r\n"); #endif transfer.remaining = DEVICE_DESCRIPTOR_LENGTH; - transfer.ptr = deviceDesc(); + transfer.ptr = (uint8_t*)deviceDesc(); transfer.direction = DEVICE_TO_HOST; success = true; } @@ -77,7 +77,7 @@ bool USBDevice::requestGetDescriptor(void) transfer.remaining = configurationDesc()[2] \ | (configurationDesc()[3] << 8); - transfer.ptr = configurationDesc(); + transfer.ptr = (uint8_t*)configurationDesc(); transfer.direction = DEVICE_TO_HOST; success = true; } @@ -94,7 +94,7 @@ bool USBDevice::requestGetDescriptor(void) printf("1\r\n"); #endif transfer.remaining = stringLangidDesc()[0]; - transfer.ptr = stringLangidDesc(); + transfer.ptr = (uint8_t*)stringLangidDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -103,7 +103,7 @@ bool USBDevice::requestGetDescriptor(void) printf("2\r\n"); #endif transfer.remaining = stringImanufacturerDesc()[0]; - transfer.ptr = stringImanufacturerDesc(); + transfer.ptr = (uint8_t*)stringImanufacturerDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -112,7 +112,7 @@ bool USBDevice::requestGetDescriptor(void) printf("3\r\n"); #endif transfer.remaining = stringIproductDesc()[0]; - transfer.ptr = stringIproductDesc(); + transfer.ptr = (uint8_t*)stringIproductDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -121,7 +121,7 @@ bool USBDevice::requestGetDescriptor(void) printf("4\r\n"); #endif transfer.remaining = stringIserialDesc()[0]; - transfer.ptr = stringIserialDesc(); + transfer.ptr = (uint8_t*)stringIserialDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -130,7 +130,7 @@ bool USBDevice::requestGetDescriptor(void) printf("5\r\n"); #endif transfer.remaining = stringIConfigurationDesc()[0]; - transfer.ptr = stringIConfigurationDesc(); + transfer.ptr = (uint8_t*)stringIConfigurationDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -139,7 +139,7 @@ bool USBDevice::requestGetDescriptor(void) printf("6\r\n"); #endif transfer.remaining = stringIinterfaceDesc()[0]; - transfer.ptr = stringIinterfaceDesc(); + transfer.ptr = (uint8_t*)stringIinterfaceDesc(); transfer.direction = DEVICE_TO_HOST; success = true; break; @@ -771,7 +771,7 @@ uint8_t * USBDevice::findDescriptor(uint8_t descriptorType) } /* Start at first descriptor after the configuration descriptor */ - ptr = &(configurationDesc()[CONFIGURATION_DESCRIPTOR_LENGTH]); + ptr = &(((uint8_t*)configurationDesc())[CONFIGURATION_DESCRIPTOR_LENGTH]); do { if (ptr[1] /* bDescriptorType */ == descriptorType) @@ -907,8 +907,8 @@ bool USBDevice::readEP_NB(uint8_t endpoint, uint8_t * buffer, uint32_t * size, u -uint8_t * USBDevice::deviceDesc() { - static uint8_t deviceDescriptor[] = { +const uint8_t * USBDevice::deviceDesc() { + uint8_t deviceDescriptorTemp[] = { DEVICE_DESCRIPTOR_LENGTH, /* bLength */ DEVICE_DESCRIPTOR, /* bDescriptorType */ LSB(USB_VERSION_2_0), /* bcdUSB (LSB) */ @@ -928,20 +928,22 @@ uint8_t * USBDevice::deviceDesc() { STRING_OFFSET_ISERIAL, /* iSerialNumber */ 0x01 /* bNumConfigurations */ }; + MBED_ASSERT(sizeof(deviceDescriptorTemp) == sizeof(deviceDescriptor)); + memcpy(deviceDescriptor, deviceDescriptorTemp, sizeof(deviceDescriptor)); return deviceDescriptor; } -uint8_t * USBDevice::stringLangidDesc() { - static uint8_t stringLangidDescriptor[] = { +const uint8_t * USBDevice::stringLangidDesc() { + static const uint8_t stringLangidDescriptor[] = { 0x04, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ 0x09,0x04, /*bString Lang ID - 0x0409 - English*/ }; - return stringLangidDescriptor; + return (uint8_t *)stringLangidDescriptor; } -uint8_t * USBDevice::stringImanufacturerDesc() { - static uint8_t stringImanufacturerDescriptor[] = { +const uint8_t * USBDevice::stringImanufacturerDesc() { + static const uint8_t stringImanufacturerDescriptor[] = { 0x12, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ 'm',0,'b',0,'e',0,'d',0,'.',0,'o',0,'r',0,'g',0, /*bString iManufacturer - mbed.org*/ @@ -949,8 +951,8 @@ uint8_t * USBDevice::stringImanufacturerDesc() { return stringImanufacturerDescriptor; } -uint8_t * USBDevice::stringIserialDesc() { - static uint8_t stringIserialDescriptor[] = { +const uint8_t * USBDevice::stringIserialDesc() { + static const uint8_t stringIserialDescriptor[] = { 0x16, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ '0',0,'1',0,'2',0,'3',0,'4',0,'5',0,'6',0,'7',0,'8',0,'9',0, /*bString iSerial - 0123456789*/ @@ -958,8 +960,8 @@ uint8_t * USBDevice::stringIserialDesc() { return stringIserialDescriptor; } -uint8_t * USBDevice::stringIConfigurationDesc() { - static uint8_t stringIconfigurationDescriptor[] = { +const uint8_t * USBDevice::stringIConfigurationDesc() { + static const uint8_t stringIconfigurationDescriptor[] = { 0x06, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ '0',0,'1',0, /*bString iConfiguration - 01*/ @@ -967,8 +969,8 @@ uint8_t * USBDevice::stringIConfigurationDesc() { return stringIconfigurationDescriptor; } -uint8_t * USBDevice::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBDevice::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x08, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ 'U',0,'S',0,'B',0, /*bString iInterface - USB*/ @@ -976,8 +978,8 @@ uint8_t * USBDevice::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBDevice::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBDevice::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x16, /*bLength*/ STRING_DESCRIPTOR, /*bDescriptorType 0x03*/ 'U',0,'S',0,'B',0,' ',0,'D',0,'E',0,'V',0,'I',0,'C',0,'E',0 /*bString iProduct - USB DEVICE*/ diff --git a/features/unsupported/USBDevice/USBDevice/USBDevice.h b/features/unsupported/USBDevice/USBDevice/USBDevice.h index a25ca1adfe..60a280ed65 100644 --- a/features/unsupported/USBDevice/USBDevice/USBDevice.h +++ b/features/unsupported/USBDevice/USBDevice/USBDevice.h @@ -165,60 +165,60 @@ public: virtual bool USBCallback_setInterface(uint16_t interface, uint8_t alternate) { return false; }; /* - * Get device descriptor. Warning: this method has to store the length of the report descriptor in reportLength. + * Get device descriptor. * * @returns pointer to the device descriptor */ - virtual uint8_t * deviceDesc(); + virtual const uint8_t * deviceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(){return NULL;}; + virtual const uint8_t * configurationDesc(){return NULL;}; /* * Get string lang id descriptor * * @return pointer to the string lang id descriptor */ - virtual uint8_t * stringLangidDesc(); + virtual const uint8_t * stringLangidDesc(); /* * Get string manufacturer descriptor * * @returns pointer to the string manufacturer descriptor */ - virtual uint8_t * stringImanufacturerDesc(); + virtual const uint8_t * stringImanufacturerDesc(); /* * Get string product descriptor * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string serial descriptor * * @returns pointer to the string serial descriptor */ - virtual uint8_t * stringIserialDesc(); + virtual const uint8_t * stringIserialDesc(); /* * Get string configuration descriptor * * @returns pointer to the string configuration descriptor */ - virtual uint8_t * stringIConfigurationDesc(); + virtual const uint8_t * stringIConfigurationDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get the length of the report descriptor @@ -242,6 +242,7 @@ protected: uint16_t VENDOR_ID; uint16_t PRODUCT_ID; uint16_t PRODUCT_RELEASE; + uint8_t deviceDescriptor[18]; private: bool addRateFeedbackEndpoint(uint8_t endpoint, uint32_t maxPacket); diff --git a/features/unsupported/USBDevice/USBHID/USBHID.cpp b/features/unsupported/USBDevice/USBHID/USBHID.cpp index 9ace4c992e..da5059ed12 100644 --- a/features/unsupported/USBDevice/USBHID/USBHID.cpp +++ b/features/unsupported/USBDevice/USBHID/USBHID.cpp @@ -105,7 +105,7 @@ bool USBHID::USBCallback_request() { && (reportDescLength() != 0)) { transfer->remaining = reportDescLength(); - transfer->ptr = reportDesc(); + transfer->ptr = (uint8_t*)reportDesc(); transfer->direction = DEVICE_TO_HOST; success = true; } @@ -177,8 +177,8 @@ bool USBHID::USBCallback_setConfiguration(uint8_t configuration) { } -uint8_t * USBHID::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBHID::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x08, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'H',0,'I',0,'D',0, //bString iInterface - HID @@ -186,8 +186,8 @@ uint8_t * USBHID::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBHID::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBHID::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x16, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'H',0,'I',0,'D',0,' ',0,'D',0,'E',0,'V',0,'I',0,'C',0,'E',0 //bString iProduct - HID device @@ -197,8 +197,8 @@ uint8_t * USBHID::stringIproductDesc() { -uint8_t * USBHID::reportDesc() { - static uint8_t reportDescriptor[] = { +const uint8_t * USBHID::reportDesc() { + uint8_t reportDescriptorTemp[] = { USAGE_PAGE(2), LSB(0xFFAB), MSB(0xFFAB), USAGE(2), LSB(0x0200), MSB(0x0200), COLLECTION(1), 0x01, // Collection (Application) @@ -218,6 +218,8 @@ uint8_t * USBHID::reportDesc() { END_COLLECTION(0), }; reportLength = sizeof(reportDescriptor); + MBED_ASSERT(sizeof(reportDescriptorTemp) == sizeof(reportDescriptor)); + memcpy(reportDescriptor, reportDescriptorTemp, sizeof(reportDescriptor)); return reportDescriptor; } @@ -227,8 +229,8 @@ uint8_t * USBHID::reportDesc() { + (1 * HID_DESCRIPTOR_LENGTH) \ + (2 * ENDPOINT_DESCRIPTOR_LENGTH)) -uint8_t * USBHID::configurationDesc() { - static uint8_t configurationDescriptor[] = { +const uint8_t * USBHID::configurationDesc() { + uint8_t configurationDescriptorTemp[] = { CONFIGURATION_DESCRIPTOR_LENGTH, // bLength CONFIGURATION_DESCRIPTOR, // bDescriptorType LSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (LSB) @@ -275,5 +277,7 @@ uint8_t * USBHID::configurationDesc() { MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB) 1, // bInterval (milliseconds) }; + MBED_ASSERT(sizeof(configurationDescriptorTemp) == sizeof(configurationDescriptor)); + memcpy(configurationDescriptor, configurationDescriptorTemp, sizeof(configurationDescriptor)); return configurationDescriptor; } diff --git a/features/unsupported/USBDevice/USBHID/USBHID.h b/features/unsupported/USBDevice/USBHID/USBHID.h index faa75cb94a..0178283cc7 100644 --- a/features/unsupported/USBDevice/USBHID/USBHID.h +++ b/features/unsupported/USBDevice/USBHID/USBHID.h @@ -98,13 +98,14 @@ public: protected: uint16_t reportLength; + uint8_t reportDescriptor[27]; /* * Get the Report descriptor * * @returns pointer to the report descriptor */ - virtual uint8_t * reportDesc(); + virtual const uint8_t * reportDesc(); /* * Get the length of the report descriptor @@ -118,21 +119,21 @@ protected: * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); /* @@ -164,6 +165,7 @@ protected: virtual bool USBCallback_setConfiguration(uint8_t configuration); private: + uint8_t configurationDescriptor[41]; HID_REPORT outputReport; uint8_t output_length; uint8_t input_length; diff --git a/features/unsupported/USBDevice/USBHID/USBKeyboard.cpp b/features/unsupported/USBDevice/USBHID/USBKeyboard.cpp index 3f02dd3182..900f97d087 100644 --- a/features/unsupported/USBDevice/USBHID/USBKeyboard.cpp +++ b/features/unsupported/USBDevice/USBHID/USBKeyboard.cpp @@ -352,8 +352,8 @@ const KEYMAP keymap[KEYMAP_SIZE] = { }; #endif -uint8_t * USBKeyboard::reportDesc() { - static uint8_t reportDescriptor[] = { +const uint8_t * USBKeyboard::reportDesc() { + static const uint8_t reportDescriptor[] = { USAGE_PAGE(1), 0x01, // Generic Desktop USAGE(1), 0x06, // Keyboard COLLECTION(1), 0x01, // Application @@ -501,8 +501,8 @@ bool USBKeyboard::mediaControl(MEDIA_KEY key) { + (1 * HID_DESCRIPTOR_LENGTH) \ + (2 * ENDPOINT_DESCRIPTOR_LENGTH)) -uint8_t * USBKeyboard::configurationDesc() { - static uint8_t configurationDescriptor[] = { +const uint8_t * USBKeyboard::configurationDesc() { + uint8_t configurationDescriptorTemp[] = { CONFIGURATION_DESCRIPTOR_LENGTH, // bLength CONFIGURATION_DESCRIPTOR, // bDescriptorType LSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (LSB) @@ -549,5 +549,7 @@ uint8_t * USBKeyboard::configurationDesc() { MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB) 1, // bInterval (milliseconds) }; + MBED_ASSERT(sizeof(configurationDescriptorTemp) == sizeof(configurationDescriptor)); + memcpy(configurationDescriptor, configurationDescriptorTemp, sizeof(configurationDescriptor)); return configurationDescriptor; } diff --git a/features/unsupported/USBDevice/USBHID/USBKeyboard.h b/features/unsupported/USBDevice/USBHID/USBKeyboard.h index d21293568c..e88f637fcb 100644 --- a/features/unsupported/USBDevice/USBHID/USBKeyboard.h +++ b/features/unsupported/USBDevice/USBHID/USBKeyboard.h @@ -148,7 +148,7 @@ public: * * @returns pointer to the report descriptor */ - virtual uint8_t * reportDesc(); + virtual const uint8_t * reportDesc(); /* * Called when a data is received on the OUT endpoint. Useful to switch on LED of LOCK keys @@ -173,7 +173,7 @@ protected: * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); private: //dummy otherwise it doesn,t compile (we must define all methods of an abstract class) @@ -181,6 +181,7 @@ private: return -1; }; + uint8_t configurationDescriptor[41]; uint8_t lock_status; }; diff --git a/features/unsupported/USBDevice/USBHID/USBMouse.cpp b/features/unsupported/USBDevice/USBHID/USBMouse.cpp index ac3016cae0..e7dfb6cdac 100644 --- a/features/unsupported/USBDevice/USBHID/USBMouse.cpp +++ b/features/unsupported/USBDevice/USBHID/USBMouse.cpp @@ -103,10 +103,10 @@ bool USBMouse::release(uint8_t button_) { } -uint8_t * USBMouse::reportDesc() { +const uint8_t * USBMouse::reportDesc() { if (mouse_type == REL_MOUSE) { - static uint8_t reportDescriptor[] = { + static const uint8_t reportDescriptor[] = { USAGE_PAGE(1), 0x01, // Genric Desktop USAGE(1), 0x02, // Mouse COLLECTION(1), 0x01, // Application @@ -141,7 +141,7 @@ uint8_t * USBMouse::reportDesc() { reportLength = sizeof(reportDescriptor); return reportDescriptor; } else if (mouse_type == ABS_MOUSE) { - static uint8_t reportDescriptor[] = { + static const uint8_t reportDescriptor[] = { USAGE_PAGE(1), 0x01, // Generic Desktop USAGE(1), 0x02, // Mouse COLLECTION(1), 0x01, // Application @@ -192,8 +192,8 @@ uint8_t * USBMouse::reportDesc() { + (1 * HID_DESCRIPTOR_LENGTH) \ + (2 * ENDPOINT_DESCRIPTOR_LENGTH)) -uint8_t * USBMouse::configurationDesc() { - static uint8_t configurationDescriptor[] = { +const uint8_t * USBMouse::configurationDesc() { + uint8_t configurationDescriptorTemp[] = { CONFIGURATION_DESCRIPTOR_LENGTH, // bLength CONFIGURATION_DESCRIPTOR, // bDescriptorType LSB(TOTAL_DESCRIPTOR_LENGTH), // wTotalLength (LSB) @@ -240,5 +240,7 @@ uint8_t * USBMouse::configurationDesc() { MSB(MAX_PACKET_SIZE_EPINT), // wMaxPacketSize (MSB) 1, // bInterval (milliseconds) }; + MBED_ASSERT(sizeof(configurationDescriptorTemp) == sizeof(configurationDescriptor)); + memcpy(configurationDescriptor, configurationDescriptorTemp, sizeof(configurationDescriptor)); return configurationDescriptor; } diff --git a/features/unsupported/USBDevice/USBHID/USBMouse.h b/features/unsupported/USBDevice/USBHID/USBMouse.h index 7aa4263343..9371b0e850 100644 --- a/features/unsupported/USBDevice/USBHID/USBMouse.h +++ b/features/unsupported/USBDevice/USBHID/USBMouse.h @@ -190,7 +190,7 @@ class USBMouse: public USBHID * * @returns pointer to the report descriptor */ - virtual uint8_t * reportDesc(); + virtual const uint8_t * reportDesc(); protected: /* @@ -198,11 +198,12 @@ class USBMouse: public USBHID * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); private: MOUSE_TYPE mouse_type; uint8_t button; + uint8_t configurationDescriptor[41]; bool mouseSend(int8_t x, int8_t y, uint8_t buttons, int8_t z); }; diff --git a/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.cpp b/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.cpp index cd68091202..5c544a80b8 100644 --- a/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.cpp +++ b/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.cpp @@ -348,9 +348,9 @@ const KEYMAP keymap[KEYMAP_SIZE] = { #endif -uint8_t * USBMouseKeyboard::reportDesc() { +const uint8_t * USBMouseKeyboard::reportDesc() { if (mouse_type == REL_MOUSE) { - static uint8_t reportDescriptor[] = { + static const uint8_t reportDescriptor[] = { // Keyboard USAGE_PAGE(1), 0x01, USAGE(1), 0x06, @@ -442,7 +442,7 @@ uint8_t * USBMouseKeyboard::reportDesc() { reportLength = sizeof(reportDescriptor); return reportDescriptor; } else if (mouse_type == ABS_MOUSE) { - static uint8_t reportDescriptor[] = { + static const uint8_t reportDescriptor[] = { // Keyboard USAGE_PAGE(1), 0x01, diff --git a/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.h b/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.h index 1b19b10db2..fb2bbc6d9c 100644 --- a/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.h +++ b/features/unsupported/USBDevice/USBHID/USBMouseKeyboard.h @@ -195,7 +195,7 @@ class USBMouseKeyboard: public USBHID, public Stream * * @returns pointer to the report descriptor */ - virtual uint8_t * reportDesc(); + virtual const uint8_t * reportDesc(); /* * Called when a data is received on the OUT endpoint. Useful to switch on LED of LOCK keys diff --git a/features/unsupported/USBDevice/USBMIDI/USBMIDI.cpp b/features/unsupported/USBDevice/USBMIDI/USBMIDI.cpp index 084574a790..fb37d3d1db 100644 --- a/features/unsupported/USBDevice/USBMIDI/USBMIDI.cpp +++ b/features/unsupported/USBDevice/USBMIDI/USBMIDI.cpp @@ -157,8 +157,8 @@ bool USBMIDI::USBCallback_setConfiguration(uint8_t configuration) { } -uint8_t * USBMIDI::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBMIDI::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x0c, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'A',0,'u',0,'d',0,'i',0,'o',0 //bString iInterface - Audio @@ -166,8 +166,8 @@ uint8_t * USBMIDI::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBMIDI::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBMIDI::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x16, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'M',0,'b',0,'e',0,'d',0,' ',0,'A',0,'u',0,'d',0,'i',0,'o',0 //bString iProduct - Mbed Audio @@ -176,8 +176,8 @@ uint8_t * USBMIDI::stringIproductDesc() { } -uint8_t * USBMIDI::configurationDesc() { - static uint8_t configDescriptor[] = { +const uint8_t * USBMIDI::configurationDesc() { + static const uint8_t configDescriptor[] = { // configuration descriptor 0x09, 0x02, 0x65, 0x00, 0x02, 0x01, 0x00, 0xc0, 0x50, diff --git a/features/unsupported/USBDevice/USBMIDI/USBMIDI.h b/features/unsupported/USBDevice/USBMIDI/USBMIDI.h index cc5be5b7d8..c69cae14c4 100644 --- a/features/unsupported/USBDevice/USBMIDI/USBMIDI.h +++ b/features/unsupported/USBDevice/USBMIDI/USBMIDI.h @@ -85,21 +85,21 @@ protected: * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); private: uint8_t data[MAX_MIDI_MESSAGE_SIZE+1]; diff --git a/features/unsupported/USBDevice/USBMSD/USBMSD.cpp b/features/unsupported/USBDevice/USBMSD/USBMSD.cpp index ee5ad24733..21d50f9b9f 100644 --- a/features/unsupported/USBDevice/USBMSD/USBMSD.cpp +++ b/features/unsupported/USBDevice/USBMSD/USBMSD.cpp @@ -589,8 +589,8 @@ bool USBMSD::USBCallback_setConfiguration(uint8_t configuration) { } -uint8_t * USBMSD::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBMSD::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x08, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'M',0,'S',0,'D',0 //bString iInterface - MSD @@ -598,8 +598,8 @@ uint8_t * USBMSD::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBMSD::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBMSD::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x12, //bLength STRING_DESCRIPTOR, //bDescriptorType 0x03 'M',0,'b',0,'e',0,'d',0,' ',0,'M',0,'S',0,'D',0 //bString iProduct - Mbed Audio @@ -608,8 +608,8 @@ uint8_t * USBMSD::stringIproductDesc() { } -uint8_t * USBMSD::configurationDesc() { - static uint8_t configDescriptor[] = { +const uint8_t * USBMSD::configurationDesc() { + static const uint8_t configDescriptor[] = { // Configuration 1 9, // bLength diff --git a/features/unsupported/USBDevice/USBMSD/USBMSD.h b/features/unsupported/USBDevice/USBMSD/USBMSD.h index ff750026c1..8d83c1a855 100644 --- a/features/unsupported/USBDevice/USBMSD/USBMSD.h +++ b/features/unsupported/USBDevice/USBMSD/USBMSD.h @@ -139,21 +139,21 @@ protected: * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); /* * Callback called when a packet is received diff --git a/features/unsupported/USBDevice/USBSerial/USBCDC.cpp b/features/unsupported/USBDevice/USBSerial/USBCDC.cpp index d6dc16ef2f..ec46f0fda3 100644 --- a/features/unsupported/USBDevice/USBSerial/USBCDC.cpp +++ b/features/unsupported/USBDevice/USBSerial/USBCDC.cpp @@ -144,8 +144,8 @@ bool USBCDC::readEP_NB(uint8_t * buffer, uint32_t * size) { } -uint8_t * USBCDC::deviceDesc() { - static uint8_t deviceDescriptor[] = { +const uint8_t * USBCDC::deviceDesc() { + uint8_t deviceDescriptorTemp[] = { 18, // bLength 1, // bDescriptorType 0x10, 0x01, // bcdUSB @@ -161,11 +161,13 @@ uint8_t * USBCDC::deviceDesc() { 3, // iSerialNumber 1 // bNumConfigurations }; + MBED_ASSERT(sizeof(deviceDescriptorTemp) == sizeof(deviceDescriptor)); + memcpy(deviceDescriptor, deviceDescriptorTemp, sizeof(deviceDescriptor)); return deviceDescriptor; } -uint8_t * USBCDC::stringIinterfaceDesc() { - static uint8_t stringIinterfaceDescriptor[] = { +const uint8_t * USBCDC::stringIinterfaceDesc() { + static const uint8_t stringIinterfaceDescriptor[] = { 0x08, STRING_DESCRIPTOR, 'C',0,'D',0,'C',0, @@ -173,8 +175,8 @@ uint8_t * USBCDC::stringIinterfaceDesc() { return stringIinterfaceDescriptor; } -uint8_t * USBCDC::stringIproductDesc() { - static uint8_t stringIproductDescriptor[] = { +const uint8_t * USBCDC::stringIproductDesc() { + static const uint8_t stringIproductDescriptor[] = { 0x16, STRING_DESCRIPTOR, 'C',0,'D',0,'C',0,' ',0,'D',0,'E',0,'V',0,'I',0,'C',0,'E',0 @@ -185,8 +187,8 @@ uint8_t * USBCDC::stringIproductDesc() { #define CONFIG1_DESC_SIZE (9+8+9+5+5+4+5+7+9+7+7) -uint8_t * USBCDC::configurationDesc() { - static uint8_t configDescriptor[] = { +const uint8_t * USBCDC::configurationDesc() { + static const uint8_t configDescriptor[] = { // configuration descriptor 9, // bLength 2, // bDescriptorType diff --git a/features/unsupported/USBDevice/USBSerial/USBCDC.h b/features/unsupported/USBDevice/USBSerial/USBCDC.h index c41e425212..0f59c2c621 100644 --- a/features/unsupported/USBDevice/USBSerial/USBCDC.h +++ b/features/unsupported/USBDevice/USBSerial/USBCDC.h @@ -46,28 +46,28 @@ protected: * * @returns pointer to the device descriptor */ - virtual uint8_t * deviceDesc(); + virtual const uint8_t * deviceDesc(); /* * Get string product descriptor * * @returns pointer to the string product descriptor */ - virtual uint8_t * stringIproductDesc(); + virtual const uint8_t * stringIproductDesc(); /* * Get string interface descriptor * * @returns pointer to the string interface descriptor */ - virtual uint8_t * stringIinterfaceDesc(); + virtual const uint8_t * stringIinterfaceDesc(); /* * Get configuration descriptor * * @returns pointer to the configuration descriptor */ - virtual uint8_t * configurationDesc(); + virtual const uint8_t * configurationDesc(); /* * Send a buffer From 40125cf1215b2740816e0e049898216c3fba57bc Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Thu, 11 Jan 2018 14:08:09 -0600 Subject: [PATCH 099/133] Remove use of deprecated attach in USB Attach callbacks with the assignment operator rather than with the deprecated attach function. This fixes deprecation warnings. This patch also adds the ability to attach a Callback directly. --- .../unsupported/USBDevice/USBAudio/USBAudio.h | 49 ++++++++++++++++--- .../USBDevice/USBSerial/USBSerial.h | 13 ++++- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/features/unsupported/USBDevice/USBAudio/USBAudio.h b/features/unsupported/USBDevice/USBAudio/USBAudio.h index f1bdbe6d48..e72f42e559 100644 --- a/features/unsupported/USBDevice/USBAudio/USBAudio.h +++ b/features/unsupported/USBDevice/USBAudio/USBAudio.h @@ -152,7 +152,7 @@ public: * */ void attach(void(*fptr)(void)) { - updateVol.attach(fptr); + updateVol = Callback(fptr); } /** attach a handler to Tx Done * @@ -160,7 +160,7 @@ public: * */ void attachTx(void(*fptr)(void)) { - txDone.attach(fptr); + txDone = Callback(fptr); } /** attach a handler to Rx Done * @@ -168,7 +168,7 @@ public: * */ void attachRx(void(*fptr)(void)) { - rxDone.attach(fptr); + rxDone = Callback(fptr); } /** Attach a nonstatic void/void member function to update the volume @@ -179,15 +179,52 @@ public: */ template void attach(T *tptr, void(T::*mptr)(void)) { - updateVol.attach(tptr, mptr); + updateVol = Callback(tptr, mptr); } + /** Attach a nonstatic void/void member function to Tx Done + * + * @param tptr Object pointer + * @param mptr Member function pointer + * + */ template void attachTx(T *tptr, void(T::*mptr)(void)) { - txDone.attach(tptr, mptr); + txDone = Callback(tptr, mptr); } + /** Attach a nonstatic void/void member function to Rx Done + * + * @param tptr Object pointer + * @param mptr Member function pointer + * + */ template void attachRx(T *tptr, void(T::*mptr)(void)) { - rxDone.attach(tptr, mptr); + rxDone = Callback(tptr, mptr); + } + + /** Attach a Callback to update the volume + * + * @param cb Callback to attach + * + */ + void attach(Callback &cb) { + updateVol = cb; + } + /** attach a Callback to Tx Done + * + * @param cb Callback to attach + * + */ + void attachTx(Callback &cb) { + txDone = cb; + } + /** attach a Callback to Rx Done + * + * @param cb Callback to attach + * + */ + void attachRx(Callback &cb) { + rxDone = cb; } diff --git a/features/unsupported/USBDevice/USBSerial/USBSerial.h b/features/unsupported/USBDevice/USBSerial/USBSerial.h index 825b03caf6..69ed61abf5 100644 --- a/features/unsupported/USBDevice/USBSerial/USBSerial.h +++ b/features/unsupported/USBDevice/USBSerial/USBSerial.h @@ -127,7 +127,7 @@ public: template void attach(T* tptr, void (T::*mptr)(void)) { if((mptr != NULL) && (tptr != NULL)) { - rx.attach(tptr, mptr); + rx = Callback(mptr, tptr); } } @@ -138,10 +138,19 @@ public: */ void attach(void (*fptr)(void)) { if(fptr != NULL) { - rx.attach(fptr); + rx = Callback(fptr); } } + /** + * Attach a Callback called when a packet is received + * + * @param cb Callback to attach + */ + void attach(Callback &cb) { + rx = cb; + } + /** * Attach a callback to call when serial's settings are changed. * From f0b9add71e50abb14568fafe3f3ff04206feb836 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Fri, 5 Jan 2018 15:02:43 -0600 Subject: [PATCH 100/133] Fix clearing of ISTAT in Kinetis USB The ISTAT register is write 1 to clear. Because of this ORing this register with itself fill clear all bits that are set. This patch updates the code to use plain assignment so only desired bit is cleared. --- .../USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp b/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp index 71bf529900..69471edf70 100644 --- a/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp +++ b/features/unsupported/USBDevice/targets/TARGET_Freescale/USBHAL_KL25Z.cpp @@ -500,7 +500,7 @@ void USBHAL::usbisr(void) { if (istat & 1<<7) { if (USB0->ENDPOINT[0].ENDPT & USB_ENDPT_EPSTALL_MASK) USB0->ENDPOINT[0].ENDPT &= ~USB_ENDPT_EPSTALL_MASK; - USB0->ISTAT |= USB_ISTAT_STALL_MASK; + USB0->ISTAT = USB_ISTAT_STALL_MASK; } // token interrupt @@ -555,13 +555,13 @@ void USBHAL::usbisr(void) { // sleep interrupt if (istat & 1<<4) { - USB0->ISTAT |= USB_ISTAT_SLEEP_MASK; + USB0->ISTAT = USB_ISTAT_SLEEP_MASK; } // error interrupt if (istat & USB_ISTAT_ERROR_MASK) { USB0->ERRSTAT = 0xFF; - USB0->ISTAT |= USB_ISTAT_ERROR_MASK; + USB0->ISTAT = USB_ISTAT_ERROR_MASK; } } From c5d5718ed487160fc5b24c5e1529884d3cf22453 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Thu, 25 Jan 2018 15:27:35 -0600 Subject: [PATCH 101/133] Remove tickless assert for tick count Remove the assert that the tick count of the OS matches the tick count of the tickless timer as this occurs frequently when debugging. This is because the function svcRtxKernelResume only increments the OS's tick count until the next wakeup event so if the device was halted by a debugger past the next wakeup event the tick counts will be out of sync. --- rtos/TARGET_CORTEX/mbed_rtx_idle.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp b/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp index f41b562c54..23830a8f5d 100644 --- a/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp +++ b/rtos/TARGET_CORTEX/mbed_rtx_idle.cpp @@ -194,7 +194,6 @@ static void default_idle_hook(void) core_util_critical_section_enter(); uint32_t ticks_to_sleep = svcRtxKernelSuspend(); - MBED_ASSERT(os_timer->get_tick() == svcRtxKernelGetTickCount()); if (ticks_to_sleep) { os_timer->schedule_tick(ticks_to_sleep); From 706e133ee816e881d9decb1e4e4574075cf1a617 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Fri, 10 Nov 2017 22:23:03 +0100 Subject: [PATCH 102/133] add cmake exporter for CLion use --- tools/export/__init__.py | 4 +- tools/export/cmake/CMakeLists.txt.tmpl | 94 +++++++++++ tools/export/cmake/README.md | 15 ++ tools/export/cmake/__init__.py | 225 +++++++++++++++++++++++++ 4 files changed, 337 insertions(+), 1 deletion(-) create mode 100644 tools/export/cmake/CMakeLists.txt.tmpl create mode 100644 tools/export/cmake/README.md create mode 100644 tools/export/cmake/__init__.py diff --git a/tools/export/__init__.py b/tools/export/__init__.py index c15669618f..914d43bca3 100644 --- a/tools/export/__init__.py +++ b/tools/export/__init__.py @@ -33,6 +33,7 @@ from tools.export import embitz, coide, kds, simplicity, atmelstudio, mcuxpresso from tools.export import sw4stm32, e2studio, zip, cmsis, uvision, cdt, vscode from tools.export import gnuarmeclipse from tools.export import qtcreator +from tools.export import cmake from tools.export import nb from tools.targets import TARGET_NAMES @@ -63,7 +64,8 @@ EXPORTERS = { 'qtcreator': qtcreator.QtCreator, 'vscode_gcc_arm' : vscode.VSCodeGcc, 'vscode_iar' : vscode.VSCodeIAR, - 'vscode_armc5' : vscode.VSCodeArmc5 + 'vscode_armc5' : vscode.VSCodeArmc5, + 'cmake_gcc_arm': cmake.GccArm } ERROR_MESSAGE_UNSUPPORTED_TOOLCHAIN = """ diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl new file mode 100644 index 0000000000..4bb1d11cc2 --- /dev/null +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -0,0 +1,94 @@ +# This file was automagically generated by mbed.org. +# If you would like to add your own targets, create a +# project.cmake file locally in your project directory. + +CMAKE_MINIMUM_REQUIRED(VERSION 3.9) +SET(CMAKE_SYSTEM_NAME Generic) +#SET(CMAKE_SYSTEM_PROCESSOR arm) +SET(CMAKE_CROSSCOMPILING TRUE) + +# force compiler settings +SET(CMAKE_C_COMPILER_WORKS TRUE) +SET(CMAKE_CXX_COMPILER_WORKS TRUE) + +SET(CMAKE_ASM_COMPILER_INIT "{{asm}}") +SET(CMAKE_C_COMPILER_INIT "{{cc}}") +SET(CMAKE_CXX_COMPILER_INIT "{{cxx}}") +SET(CMAKE_CXX_LINK_EXECUTABLE "{{ld}}") + +{% if pp -%} +SET(PREPROC "{{pp}}") +{%- endif %} +{% if hex_files %} +SET(SREC_CAT "srec_cat") +{%- endif %} + +# here starts the project +PROJECT({{name}} C CXX ASM) +#SET(CMAKE_VERBOSE_MAKEFILE ON) + +SET(CMAKE_C_FLAGS "{{cc_flags}} -include mbed_config.h") +SET(CMAKE_CXX_FLAGS "{{cxx_flags}} -include mbed_config.h") +SET(CMAKE_ASM_FLAGS "{{asm_flags}} -include mbed_config.h") +SET(CMAKE_LINKER_FLAGS "{{ld_flags}}") + +SET(LD_SYS_LIBS "{{ld_sys_libs|join(" ")}}") +SET(ELF2BIN {{elf2bin}}) + +SET(CMAKE_EXE_LINKER_FLAGS "{{ld_flags}} {{link_script_option}} ${LD_SYS_LIBS}") + +ADD_DEFINITIONS( + {% for d in symbols %}-D{{d}} + {% endfor %}) +INCLUDE_DIRECTORIES( + {% for p in include_paths %}{{p}} + {% endfor %}) + +{% for libname,libsrcs in libs.items() %} +# target for library "{{libname}}" +ADD_LIBRARY({{libname}} STATIC EXCLUDE_FROM_ALL + {% for libsrc in libsrcs %}{{libsrc}} + {% endfor %}) +{% endfor %} + +# executable {{name}} +ADD_EXECUTABLE({{name}} EXCLUDE_FROM_ALL + {% for src in sources %}{{src}} + {% endfor %}) +TARGET_LINK_LIBRARIES({{name}} + {% for libname in libs %}{{libname}} + {% endfor %}) + +########################################################################## +# mbed-cli specific targets +########################################################################## + +# detect the build type and select the corresponding cli profile +SET(MBED_BUILD_PROFILE "") +STRING(TOLOWER ${CMAKE_BUILD_TYPE} LOWERCASE_CMAKE_BUILD_TYPE) +IF(LOWERCASE_CMAKE_BUILD_TYPE MATCHES debug) + SET(MBED_BUILD_PROFILE "mbed-os/tools/profiles/debug.json") +ELSEIF(LOWERCASE_CMAKE_BUILD_TYPE MATCHES relwithdebinfo) + SET(MBED_BUILD_PROFILE "mbed-os/tools/profiles/develop.json") +ELSEIF(LOWERCASE_CMAKE_BUILD_TYPE MATCHES release) + SET(MBED_BUILD_PROFILE "mbed-os/tools/profiles/release.json") +ELSEIF(LOWERCASE_CMAKE_BUILD_TYPE MATCHES minsizerel) + SET(MBED_BUILD_PROFILE "mbed-os/tools/profiles/release.json") +ELSE() + MESSAGE(WARNING "Build type '${CMAKE_BUILD_TYPE}' is unknown, using debug profile") + SET(MBED_BUILD_PROFILE "mbed-os/tools/profiles/debug.json") +ENDIF() + +# optional custom target to build via mbed-cli +MESSAGE(STATUS "Creating target 01-{{name}} for mbed compilation...") +ADD_CUSTOM_TARGET(01-{{name}} ALL + COMMAND ${CMAKE_COMMAND} -E echo "mbed compile --build BUILD/${CMAKE_BUILD_TYPE} ${MBED_BUILD_PROFILE}" + COMMAND mbed compile --build BUILD/${CMAKE_BUILD_TYPE} --profile ${MBED_BUILD_PROFILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + SOURCES ${SOURCE_FILES} ${SYS_SOURCE_FILES}) + +IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/project.cmake) + INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/project.cmake) +ELSE() + MESSAGE(STATUS "Add a local project.cmake file to add your own targets.") +ENDIF() \ No newline at end of file diff --git a/tools/export/cmake/README.md b/tools/export/cmake/README.md new file mode 100644 index 0000000000..338097d271 --- /dev/null +++ b/tools/export/cmake/README.md @@ -0,0 +1,15 @@ +# CLion CMakeLists.txt Generator + +This exporter generates a CMakeLists.txt file that can be used to +develop mbed using [IntelliJ CLion](https://www.jetbrains.com/clion/). + +It will not create a functional CMake build system that mimics the +mbed build system, but rather uses the mbed-cli itself to compile +the targets. The generated files help CLion to understand the +includes and dependencies of your code. + +Run the following command to create/overwrite your CMakeLists.txt. +``` +mbed export -i cmake_gcc_arm +``` +> Run the command again if files or libraries have been added or removed. \ No newline at end of file diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py new file mode 100644 index 0000000000..ee00bf1a2e --- /dev/null +++ b/tools/export/cmake/__init__.py @@ -0,0 +1,225 @@ +""" +mbed SDK +Copyright (c) 2011-2016 ARM Limited + +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. +""" +import re +import shutil +from os import remove +from os.path import splitext, basename, exists +from subprocess import Popen, PIPE + +from jinja2.exceptions import TemplateNotFound + +from tools.export.exporters import Exporter +from tools.utils import NotSupportedException + + +class CMake(Exporter): + """Generic CMake template that mimics the behavior of the python build + system + """ + + TEMPLATE = 'CMakeLists.txt' + + MBED_CONFIG_HEADER_SUPPORTED = True + + PREPROCESS_ASM = False + + @classmethod + def is_target_supported(cls, target_name): + return True + + def generate(self): + """Generate the CMakefiles.txt + """ + self.resources.win_to_unix() + + sources = set(self.resources.c_sources + \ + self.resources.cpp_sources + \ + self.resources.s_sources + \ + self.resources.headers) + + libnames = [l[:-4] for l in self.resources.lib_refs] + libs = {re.sub(r'^[.]/', '', l): sorted([f for f in sources if f.startswith(l)]) for l in libnames} + libs = {k: v for k, v in libs.items() if len(v) != 0} + srcs = sorted([f for f in sources if f not in [item for sublist in libs.values() for item in sublist]]) + + libraries = [self.prepare_lib(basename(lib)) for lib + in self.resources.libraries] + sys_libs = [self.prepare_sys_lib(lib) for lib + in self.toolchain.sys_libs] + + ctx = { + 'name': self.project_name, + 'target': self.target, + 'sources': srcs, + 'libs': libs, + 'libraries': libraries, + 'ld_sys_libs': sys_libs, + 'include_paths': sorted(list(set(self.resources.inc_dirs))), + 'library_paths': sorted(self.resources.lib_dirs), + 'linker_script': self.resources.linker_script, + 'hex_files': self.resources.hex_files, + 'ar': basename(self.toolchain.ar), + 'cc': basename(self.toolchain.cc[0]), + 'cc_flags': " ".join(self.toolchain.cc[1:]), + 'cxx': basename(self.toolchain.cppc[0]), + 'cxx_flags': " ".join(self.toolchain.cppc[1:]), + 'asm': basename(self.toolchain.asm[0]), + 'asm_flags': " ".join(self.toolchain.asm[1:]), + 'symbols': self.toolchain.get_symbols(), + 'ld': basename(self.toolchain.ld[0]), + 'ld_flags': " ".join(self.toolchain.ld[1:]), + 'elf2bin': basename(self.toolchain.elf2bin), + 'link_script_ext': self.toolchain.LINKER_EXT, + 'link_script_option': self.LINK_SCRIPT_OPTION, + 'user_library_flag': self.USER_LIBRARY_FLAG, + 'needs_asm_preproc': self.PREPROCESS_ASM, + } + + if hasattr(self.toolchain, "preproc"): + ctx['pp'] = " ".join(["\'" + part + "\'" for part + in ([basename(self.toolchain.preproc[0])] + + self.toolchain.preproc[1:] + + self.toolchain.ld[1:])]) + else: + ctx['pp'] = None + + for templatefile in ['cmake/%s.tmpl' % self.TEMPLATE]: + try: + self.gen_file(templatefile, ctx, 'CMakeLists.txt') + break + except TemplateNotFound: + pass + else: + raise NotSupportedException("This make tool is in development") + + @staticmethod + def build(project_name, log_name="build_log.txt", cleanup=True): + """ Build Make project """ + # > Make -j + cmd = ["make", "-j"] + + # Build the project + p = Popen(cmd, stdout=PIPE, stderr=PIPE) + out, err = p.communicate() + ret_code = p.returncode + + out_string = "=" * 10 + "STDOUT" + "=" * 10 + "\n" + out_string += out + out_string += "=" * 10 + "STDERR" + "=" * 10 + "\n" + out_string += err + + if ret_code == 0: + out_string += "SUCCESS" + else: + out_string += "FAILURE" + + print out_string + + if log_name: + # Write the output to the log file + with open(log_name, 'w+') as f: + f.write(out_string) + + # Cleanup the exported and built files + if cleanup: + remove("CMakeLists.txt") + remove(log_name) + # legacy .build directory cleaned if exists + if exists('.build'): + shutil.rmtree('.build') + if exists('BUILD'): + shutil.rmtree('BUILD') + + if ret_code != 0: + # Seems like something went wrong. + return -1 + else: + return 0 + + +class GccArm(CMake): + """GCC ARM specific cmake target""" + NAME = 'CMake-GCC-ARM' + TOOLCHAIN = "GCC_ARM" + LINK_SCRIPT_OPTION = "-T" + USER_LIBRARY_FLAG = "-L" + + @staticmethod + def prepare_lib(libname): + if "lib" == libname[:3]: + libname = libname[3:-2] + return "-l" + libname + + @staticmethod + def prepare_sys_lib(libname): + return "-l" + libname + + +# class Arm(CMake): +# """ARM Compiler generic cmake target""" +# LINK_SCRIPT_OPTION = "--scatter" +# USER_LIBRARY_FLAG = "--userlibpath " +# +# @staticmethod +# def prepare_lib(libname): +# return libname +# +# @staticmethod +# def prepare_sys_lib(libname): +# return libname +# +# def generate(self): +# if self.resources.linker_script: +# new_script = self.toolchain.correct_scatter_shebang( +# self.resources.linker_script) +# if new_script is not self.resources.linker_script: +# self.resources.linker_script = new_script +# self.generated_files.append(new_script) +# return super(Arm, self).generate() +# +# +# class Armc5(Arm): +# """ARM Compiler 5 (armcc) specific makefile target""" +# NAME = 'CMake-ARMc5' +# TOOLCHAIN = "ARM" +# PREPROCESS_ASM = True +# +# +# class Armc6(Arm): +# """ARM Compiler 6 (armclang) specific generic makefile target""" +# NAME = 'CMake-ARMc6' +# TOOLCHAIN = "ARMC6" +# +# +# class IAR(CMake): +# """IAR specific cmake target""" +# NAME = 'CMake-IAR' +# TOOLCHAIN = "IAR" +# LINK_SCRIPT_OPTION = "--config" +# USER_LIBRARY_FLAG = "-L" +# +# @staticmethod +# def prepare_lib(libname): +# if "lib" == libname[:3]: +# libname = libname[3:] +# return "-l" + splitext(libname)[0] +# +# @staticmethod +# def prepare_sys_lib(libname): +# if "lib" == libname[:3]: +# libname = libname[3:] +# return "-l" + splitext(libname)[0] From bb6081eb5b814ae5afedc8d570022816996d5045 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Wed, 15 Nov 2017 10:03:04 +0100 Subject: [PATCH 103/133] explain code, fix naming, work on linking --- tools/export/cmake/CMakeLists.txt.tmpl | 47 ++++++++------- tools/export/cmake/__init__.py | 83 ++++++++++++++++---------- 2 files changed, 75 insertions(+), 55 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 4bb1d11cc2..6f0920cadb 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -11,31 +11,27 @@ SET(CMAKE_CROSSCOMPILING TRUE) SET(CMAKE_C_COMPILER_WORKS TRUE) SET(CMAKE_CXX_COMPILER_WORKS TRUE) -SET(CMAKE_ASM_COMPILER_INIT "{{asm}}") -SET(CMAKE_C_COMPILER_INIT "{{cc}}") -SET(CMAKE_CXX_COMPILER_INIT "{{cxx}}") -SET(CMAKE_CXX_LINK_EXECUTABLE "{{ld}}") - -{% if pp -%} -SET(PREPROC "{{pp}}") -{%- endif %} +SET(CMAKE_ASM_COMPILER_INIT "{{asm}}") +SET(CMAKE_C_COMPILER_INIT "{{cc}}") +SET(CMAKE_CXX_COMPILER_INIT "{{cxx}}") +SET(ELF2BIN "{{elf2bin}}") {% if hex_files %} SET(SREC_CAT "srec_cat") {%- endif %} # here starts the project -PROJECT({{name}} C CXX ASM) +PROJECT(cmake-{{name}} C CXX ASM) #SET(CMAKE_VERBOSE_MAKEFILE ON) +SET(LD_SYS_LIBS "{%- block sys_libs -%} -Wl,--start-group {{ld_sys_libs|join(" ")}} {{libraries|join(" ")}} -Wl,--end-group {%- endblock -%}") + SET(CMAKE_C_FLAGS "{{cc_flags}} -include mbed_config.h") SET(CMAKE_CXX_FLAGS "{{cxx_flags}} -include mbed_config.h") SET(CMAKE_ASM_FLAGS "{{asm_flags}} -include mbed_config.h") -SET(CMAKE_LINKER_FLAGS "{{ld_flags}}") - -SET(LD_SYS_LIBS "{{ld_sys_libs|join(" ")}}") -SET(ELF2BIN {{elf2bin}}) - -SET(CMAKE_EXE_LINKER_FLAGS "{{ld_flags}} {{link_script_option}} ${LD_SYS_LIBS}") +SET(CMAKE_CXX_LINK_FLAGS "{{ld_flags}}") +{% if pp -%} +SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_INK_FLAGS} {{link_script_option}} ${CMAKE_BINARY_DIR}/{{name}}.link_script.ld ${LD_SYS_LIBS}") +{%- endif %} ADD_DEFINITIONS( {% for d in symbols %}-D{{d}} @@ -44,21 +40,29 @@ INCLUDE_DIRECTORIES( {% for p in include_paths %}{{p}} {% endfor %}) -{% for libname,libsrcs in libs.items() %} +{% for libname,libsrcs in dependencies.items() %} # target for library "{{libname}}" -ADD_LIBRARY({{libname}} STATIC EXCLUDE_FROM_ALL +ADD_LIBRARY({{libname}} STATIC {% for libsrc in libsrcs %}{{libsrc}} {% endfor %}) {% endfor %} # executable {{name}} -ADD_EXECUTABLE({{name}} EXCLUDE_FROM_ALL +ADD_EXECUTABLE({{name}}.elf {% for src in sources %}{{src}} {% endfor %}) -TARGET_LINK_LIBRARIES({{name}} - {% for libname in libs %}{{libname}} +TARGET_LINK_LIBRARIES({{name}}.elf + {% for libname in dependencies %}{{libname}} {% endfor %}) +{% if pp -%} +add_custom_command(TARGET {{name}}.elf PRE_LINK + COMMAND "{{pp}}" {{pp_flags}} {{linker_script}} -o ${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld" + ) +{%- endif %} + ########################################################################## # mbed-cli specific targets ########################################################################## @@ -80,8 +84,7 @@ ELSE() ENDIF() # optional custom target to build via mbed-cli -MESSAGE(STATUS "Creating target 01-{{name}} for mbed compilation...") -ADD_CUSTOM_TARGET(01-{{name}} ALL +ADD_CUSTOM_TARGET(mbed-cli-build EXCLUDE_FROM_ALL COMMAND ${CMAKE_COMMAND} -E echo "mbed compile --build BUILD/${CMAKE_BUILD_TYPE} ${MBED_BUILD_PROFILE}" COMMAND mbed compile --build BUILD/${CMAKE_BUILD_TYPE} --profile ${MBED_BUILD_PROFILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index ee00bf1a2e..c6dde08e7e 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -22,7 +22,8 @@ from subprocess import Popen, PIPE from jinja2.exceptions import TemplateNotFound -from tools.export.exporters import Exporter +from tools.export.exporters import Exporter, apply_supported_whitelist +from tools.targets import TARGET_MAP from tools.utils import NotSupportedException @@ -37,35 +38,55 @@ class CMake(Exporter): PREPROCESS_ASM = False + POST_BINARY_WHITELIST = set([ + "MCU_NRF51Code.binary_hook", + "TEENSY3_1Code.binary_hook", + "LPCTargetCode.lpc_patch", + "LPC4088Code.binary_hook" + ]) + @classmethod def is_target_supported(cls, target_name): - return True + target = TARGET_MAP[target_name] + return apply_supported_whitelist( + cls.TOOLCHAIN, cls.POST_BINARY_WHITELIST, target) def generate(self): """Generate the CMakefiles.txt """ self.resources.win_to_unix() - sources = set(self.resources.c_sources + \ - self.resources.cpp_sources + \ - self.resources.s_sources + \ - self.resources.headers) + # get all source files including headers, adding headers allows IDEs to detect which files + # belong to the project, otherwise headers may be greyed out and not work with inspection + # (that is true for CLion and definitely for Visual Code) + allSourceFiles = set(self.resources.c_sources + + self.resources.cpp_sources + + self.resources.s_sources + + self.resources.headers) - libnames = [l[:-4] for l in self.resources.lib_refs] - libs = {re.sub(r'^[.]/', '', l): sorted([f for f in sources if f.startswith(l)]) for l in libnames} - libs = {k: v for k, v in libs.items() if len(v) != 0} - srcs = sorted([f for f in sources if f not in [item for sublist in libs.values() for item in sublist]]) + # create a list of dependencies (mbed add ...) + dependencies = [l[:-4] for l in self.resources.lib_refs] + # separate the individual dependency source files into a map with the dep name as key and an array if files + depSources = {re.sub(r'^[.]/', '', l): + sorted([f for f in allSourceFiles if f.startswith(l)]) for l in dependencies} + # delete dependencies that have no source files (may happen if a sub-dependency is ignored by .mbedignore) + depSources = {k: v for k, v in depSources.items() if len(v) != 0} - libraries = [self.prepare_lib(basename(lib)) for lib - in self.resources.libraries] - sys_libs = [self.prepare_sys_lib(lib) for lib - in self.toolchain.sys_libs] + # remove all source files that ended up being part of one of the dependencies + # we flatten the list of source files from all dependencies and + # then only add file to srcs if its not in that list + # (basically srcs = allSourcefiles - flatten(depSources.values()) + srcs = [f for f in allSourceFiles if f not in [item for sublist in depSources.values() for item in sublist]] + + # additional libraries + libraries = [self.prepare_lib(basename(lib)) for lib in self.resources.libraries] + sys_libs = [self.prepare_sys_lib(lib) for lib in self.toolchain.sys_libs] ctx = { 'name': self.project_name, 'target': self.target, 'sources': srcs, - 'libs': libs, + 'dependencies': depSources, 'libraries': libraries, 'ld_sys_libs': sys_libs, 'include_paths': sorted(list(set(self.resources.inc_dirs))), @@ -74,14 +95,15 @@ class CMake(Exporter): 'hex_files': self.resources.hex_files, 'ar': basename(self.toolchain.ar), 'cc': basename(self.toolchain.cc[0]), - 'cc_flags': " ".join(self.toolchain.cc[1:]), + 'cc_flags': " ".join(flag for flag in self.toolchain.cc[1:] if not flag == "-c"), 'cxx': basename(self.toolchain.cppc[0]), - 'cxx_flags': " ".join(self.toolchain.cppc[1:]), + 'cxx_flags': " ".join(flag for flag in self.toolchain.cppc[1:] if not flag == "-c"), 'asm': basename(self.toolchain.asm[0]), - 'asm_flags': " ".join(self.toolchain.asm[1:]), - 'symbols': self.toolchain.get_symbols(), + 'asm_flags': " ".join(flag for flag in self.toolchain.asm[1:] if not flag == "-c"), + 'symbols': sorted(self.toolchain.get_symbols()), 'ld': basename(self.toolchain.ld[0]), - 'ld_flags': " ".join(self.toolchain.ld[1:]), + # fix the missing underscore '_' (see + 'ld_flags': re.sub("--wrap,_(?!_)", "--wrap,__", " ".join(self.toolchain.ld[1:])), 'elf2bin': basename(self.toolchain.elf2bin), 'link_script_ext': self.toolchain.LINKER_EXT, 'link_script_option': self.LINK_SCRIPT_OPTION, @@ -90,21 +112,17 @@ class CMake(Exporter): } if hasattr(self.toolchain, "preproc"): - ctx['pp'] = " ".join(["\'" + part + "\'" for part - in ([basename(self.toolchain.preproc[0])] + - self.toolchain.preproc[1:] + - self.toolchain.ld[1:])]) + ctx['pp'] = basename(self.toolchain.preproc[0]) + ctx['pp_flags'] = " ".join(self.toolchain.preproc[1:] + + self.toolchain.ld[1:]) else: ctx['pp'] = None + ctx['pp_flags'] = None - for templatefile in ['cmake/%s.tmpl' % self.TEMPLATE]: - try: - self.gen_file(templatefile, ctx, 'CMakeLists.txt') - break - except TemplateNotFound: - pass - else: - raise NotSupportedException("This make tool is in development") + try: + self.gen_file('cmake/%s.tmpl' % self.TEMPLATE, ctx, 'CMakeLists.txt') + except TemplateNotFound: + pass @staticmethod def build(project_name, log_name="build_log.txt", cleanup=True): @@ -168,7 +186,6 @@ class GccArm(CMake): def prepare_sys_lib(libname): return "-l" + libname - # class Arm(CMake): # """ARM Compiler generic cmake target""" # LINK_SCRIPT_OPTION = "--scatter" From 5e669e0599dfe8717a3456be3a8c4780eef58f08 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Sat, 18 Nov 2017 11:10:48 +0100 Subject: [PATCH 104/133] simplify the complicated removal of dependency sources add hex file generation --- tools/export/cmake/CMakeLists.txt.tmpl | 15 ++++++++++----- tools/export/cmake/__init__.py | 9 ++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 6f0920cadb..236ace8d61 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -30,7 +30,7 @@ SET(CMAKE_CXX_FLAGS "{{cxx_flags}} -include mbed_config.h") SET(CMAKE_ASM_FLAGS "{{asm_flags}} -include mbed_config.h") SET(CMAKE_CXX_LINK_FLAGS "{{ld_flags}}") {% if pp -%} -SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_INK_FLAGS} {{link_script_option}} ${CMAKE_BINARY_DIR}/{{name}}.link_script.ld ${LD_SYS_LIBS}") +SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${LD_SYS_LIBS} {{link_script_option}} ${CMAKE_BINARY_DIR}/{{name}}.link_script.ld") {%- endif %} ADD_DEFINITIONS( @@ -48,21 +48,26 @@ ADD_LIBRARY({{libname}} STATIC {% endfor %} # executable {{name}} -ADD_EXECUTABLE({{name}}.elf +ADD_EXECUTABLE({{name}} {% for src in sources %}{{src}} {% endfor %}) -TARGET_LINK_LIBRARIES({{name}}.elf - {% for libname in dependencies %}{{libname}} +TARGET_LINK_LIBRARIES({{name}} + {% for libname in dependencies.keys()|sort(reverse=true) %}{{libname}} {% endfor %}) {% if pp -%} -add_custom_command(TARGET {{name}}.elf PRE_LINK +add_custom_command(TARGET {{name}} PRE_LINK COMMAND "{{pp}}" {{pp_flags}} {{linker_script}} -o ${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld" ) {%- endif %} +add_custom_command(TARGET {{name}} POST_BUILD + COMMAND ${ELF2BIN} -O ihex $ $.hex + ) + + ########################################################################## # mbed-cli specific targets ########################################################################## diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index c6dde08e7e..f1bc47b076 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -73,10 +73,9 @@ class CMake(Exporter): depSources = {k: v for k, v in depSources.items() if len(v) != 0} # remove all source files that ended up being part of one of the dependencies - # we flatten the list of source files from all dependencies and - # then only add file to srcs if its not in that list - # (basically srcs = allSourcefiles - flatten(depSources.values()) - srcs = [f for f in allSourceFiles if f not in [item for sublist in depSources.values() for item in sublist]] + srcs = allSourceFiles + for dep in depSources.values(): + srcs.difference_update(dep) # additional libraries libraries = [self.prepare_lib(basename(lib)) for lib in self.resources.libraries] @@ -85,7 +84,7 @@ class CMake(Exporter): ctx = { 'name': self.project_name, 'target': self.target, - 'sources': srcs, + 'sources': sorted(srcs), 'dependencies': depSources, 'libraries': libraries, 'ld_sys_libs': sys_libs, From 441cd56acd23e0c19a223a8309c918bdc715e839 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Fri, 12 Jan 2018 22:00:11 +0100 Subject: [PATCH 105/133] add handling of sub-dependencies, fix profile selection --- tools/export/cmake/CMakeLists.txt.tmpl | 5 +++-- tools/export/cmake/__init__.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 236ace8d61..c67cf09059 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -51,6 +51,7 @@ ADD_LIBRARY({{libname}} STATIC ADD_EXECUTABLE({{name}} {% for src in sources %}{{src}} {% endfor %}) +SET_TARGET_PROPERTIES({{name}} PROPERTIES ENABLE_EXPORTS 1) TARGET_LINK_LIBRARIES({{name}} {% for libname in dependencies.keys()|sort(reverse=true) %}{{libname}} {% endfor %}) @@ -89,8 +90,8 @@ ELSE() ENDIF() # optional custom target to build via mbed-cli -ADD_CUSTOM_TARGET(mbed-cli-build EXCLUDE_FROM_ALL - COMMAND ${CMAKE_COMMAND} -E echo "mbed compile --build BUILD/${CMAKE_BUILD_TYPE} ${MBED_BUILD_PROFILE}" +ADD_CUSTOM_TARGET(mbed-cli-build + COMMAND ${CMAKE_COMMAND} -E echo "mbed compile --build BUILD/${CMAKE_BUILD_TYPE} --profile ${MBED_BUILD_PROFILE}" COMMAND mbed compile --build BUILD/${CMAKE_BUILD_TYPE} --profile ${MBED_BUILD_PROFILE} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} SOURCES ${SOURCE_FILES} ${SYS_SOURCE_FILES}) diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index f1bc47b076..79e815d29d 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -67,7 +67,7 @@ class CMake(Exporter): # create a list of dependencies (mbed add ...) dependencies = [l[:-4] for l in self.resources.lib_refs] # separate the individual dependency source files into a map with the dep name as key and an array if files - depSources = {re.sub(r'^[.]/', '', l): + depSources = {re.sub(r'^[.]/', '', l).replace('/', '_'): sorted([f for f in allSourceFiles if f.startswith(l)]) for l in dependencies} # delete dependencies that have no source files (may happen if a sub-dependency is ignored by .mbedignore) depSources = {k: v for k, v in depSources.items() if len(v) != 0} From 49e5fd0b102520b319c23467263cca6b34fc94bd Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Fri, 12 Jan 2018 23:04:40 +0100 Subject: [PATCH 106/133] fix linker issue --- tools/export/cmake/CMakeLists.txt.tmpl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index c67cf09059..386ba3d817 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -55,6 +55,8 @@ SET_TARGET_PROPERTIES({{name}} PROPERTIES ENABLE_EXPORTS 1) TARGET_LINK_LIBRARIES({{name}} {% for libname in dependencies.keys()|sort(reverse=true) %}{{libname}} {% endfor %}) +# add dependencies for stdc++, c and nosys so the linker stage works +TARGET_LINK_LIBRARIES({{name}} stdc++ c nosys) {% if pp -%} add_custom_command(TARGET {{name}} PRE_LINK From e332d5c23df25b51946cd02b8e99e98c19ee76fc Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Fri, 12 Jan 2018 23:21:50 +0100 Subject: [PATCH 107/133] change linking stage (dependencies), print built hex file name --- tools/export/cmake/CMakeLists.txt.tmpl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 386ba3d817..a466e05bfe 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -55,8 +55,8 @@ SET_TARGET_PROPERTIES({{name}} PROPERTIES ENABLE_EXPORTS 1) TARGET_LINK_LIBRARIES({{name}} {% for libname in dependencies.keys()|sort(reverse=true) %}{{libname}} {% endfor %}) -# add dependencies for stdc++, c and nosys so the linker stage works -TARGET_LINK_LIBRARIES({{name}} stdc++ c nosys) +# add syslibs dependencies to create the correct linker order +TARGET_LINK_LIBRARIES({{name}} {{ld_sys_libs|join(" ")}}) {% if pp -%} add_custom_command(TARGET {{name}} PRE_LINK @@ -68,6 +68,7 @@ add_custom_command(TARGET {{name}} PRE_LINK add_custom_command(TARGET {{name}} POST_BUILD COMMAND ${ELF2BIN} -O ihex $ $.hex + COMMAND ${CMAKE_COMMAND} -E echo "-- built: $.hex" ) From ca09a299d63df36e6d1db71692ad6e7cd10db939 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Sat, 13 Jan 2018 11:25:22 +0100 Subject: [PATCH 108/133] add ci build operations --- tools/export/cmake/CMakeLists.txt.tmpl | 18 ++++++++++++---- tools/export/cmake/__init__.py | 30 +++++++++++++++++++++----- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index a466e05bfe..5e0a6a4976 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -11,16 +11,26 @@ SET(CMAKE_CROSSCOMPILING TRUE) SET(CMAKE_C_COMPILER_WORKS TRUE) SET(CMAKE_CXX_COMPILER_WORKS TRUE) -SET(CMAKE_ASM_COMPILER_INIT "{{asm}}") -SET(CMAKE_C_COMPILER_INIT "{{cc}}") -SET(CMAKE_CXX_COMPILER_INIT "{{cxx}}") -SET(ELF2BIN "{{elf2bin}}") +# force cmake compilers +SET(CMAKE_ASM_COMPILER "{{asm}}") +SET(CMAKE_C_COMPILER "{{cc}}") +SET(CMAKE_CXX_COMPILER "{{cxx}}") +SET(ELF2BIN "{{elf2bin}}") {% if hex_files %} SET(SREC_CAT "srec_cat") {%- endif %} +# if the environment does not specify build type, set to Debug +IF(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug" + CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ENDIF() + # here starts the project PROJECT(cmake-{{name}} C CXX ASM) + +# uncomment below to have a verbose build process #SET(CMAKE_VERBOSE_MAKEFILE ON) SET(LD_SYS_LIBS "{%- block sys_libs -%} -Wl,--start-group {{ld_sys_libs|join(" ")}} {{libraries|join(" ")}} -Wl,--end-group {%- endblock -%}") diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index 79e815d29d..5d1387f04a 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -16,15 +16,14 @@ limitations under the License. """ import re import shutil -from os import remove -from os.path import splitext, basename, exists +from os import remove, getcwd, chdir, mkdir +from os.path import basename, exists from subprocess import Popen, PIPE from jinja2.exceptions import TemplateNotFound from tools.export.exporters import Exporter, apply_supported_whitelist from tools.targets import TARGET_MAP -from tools.utils import NotSupportedException class CMake(Exporter): @@ -126,14 +125,34 @@ class CMake(Exporter): @staticmethod def build(project_name, log_name="build_log.txt", cleanup=True): """ Build Make project """ - # > Make -j - cmd = ["make", "-j"] + + # change into our build directory + current_dir = getcwd() + if not exists("BUILD"): + mkdir("BUILD") + chdir("BUILD") + + # > run cmake initial command + cmd = ["cmake", ".."] # Build the project p = Popen(cmd, stdout=PIPE, stderr=PIPE) out, err = p.communicate() ret_code = p.returncode + if ret_code == 0: + # we create the cmake files inside BUILD, change into and run cmake + + # > run make -j + cmd = ["make", "-j"] + + p = Popen(cmd, stdout=PIPE, stderr=PIPE) + out, err = p.communicate() + ret_code = p.returncode + + # go back to the original directory + chdir(current_dir) + out_string = "=" * 10 + "STDOUT" + "=" * 10 + "\n" out_string += out out_string += "=" * 10 + "STDERR" + "=" * 10 + "\n" @@ -161,6 +180,7 @@ class CMake(Exporter): if exists('BUILD'): shutil.rmtree('BUILD') + if ret_code != 0: # Seems like something went wrong. return -1 From 0087bc28cbdc768bf54e26200d6454adce8a7296 Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Mon, 15 Jan 2018 15:51:43 +0100 Subject: [PATCH 109/133] add link library paths to build --- tools/export/cmake/CMakeLists.txt.tmpl | 8 ++++---- tools/export/cmake/__init__.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 5e0a6a4976..7ffbb004a2 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -38,9 +38,9 @@ SET(LD_SYS_LIBS "{%- block sys_libs -%} -Wl,--start-group {{ld_sys_libs|join(" " SET(CMAKE_C_FLAGS "{{cc_flags}} -include mbed_config.h") SET(CMAKE_CXX_FLAGS "{{cxx_flags}} -include mbed_config.h") SET(CMAKE_ASM_FLAGS "{{asm_flags}} -include mbed_config.h") -SET(CMAKE_CXX_LINK_FLAGS "{{ld_flags}}") +SET(CMAKE_CXX_LINK_FLAGS "{{ld_flags}} {% for p in library_paths %} {{user_library_flag}}${CMAKE_CURRENT_SOURCE_DIR}/{{p}} {% endfor %}") {% if pp -%} -SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${LD_SYS_LIBS} {{link_script_option}} ${CMAKE_BINARY_DIR}/{{name}}.link_script.ld") +SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} ${LD_SYS_LIBS} {{link_script_option}} ${CMAKE_BINARY_DIR}/{{name}}_pp.link_script.ld") {%- endif %} ADD_DEFINITIONS( @@ -70,9 +70,9 @@ TARGET_LINK_LIBRARIES({{name}} {{ld_sys_libs|join(" ")}}) {% if pp -%} add_custom_command(TARGET {{name}} PRE_LINK - COMMAND "{{pp}}" {{pp_flags}} {{linker_script}} -o ${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld + COMMAND "{{pp}}" {{pp_flags}} {{linker_script}} -o ${CMAKE_CURRENT_BINARY_DIR}/{{name}}_pp.link_script.ld WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/{{name}}.link_script.ld" + BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/{{name}}_pp.link_script.ld" ) {%- endif %} diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index 5d1387f04a..6a28cd9d54 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -88,7 +88,7 @@ class CMake(Exporter): 'libraries': libraries, 'ld_sys_libs': sys_libs, 'include_paths': sorted(list(set(self.resources.inc_dirs))), - 'library_paths': sorted(self.resources.lib_dirs), + 'library_paths': sorted([re.sub(r'^[.]/', '', l) for l in self.resources.lib_dirs]), 'linker_script': self.resources.linker_script, 'hex_files': self.resources.hex_files, 'ar': basename(self.toolchain.ar), From b055db154ba6e2d5789920f8d7b54d33036df33d Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Fri, 19 Jan 2018 13:14:35 +0100 Subject: [PATCH 110/133] use the normal name without cmake- prefix --- tools/export/cmake/CMakeLists.txt.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 7ffbb004a2..7bf387f66a 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -28,7 +28,7 @@ IF(NOT CMAKE_BUILD_TYPE) ENDIF() # here starts the project -PROJECT(cmake-{{name}} C CXX ASM) +PROJECT({{name}} C CXX ASM) # uncomment below to have a verbose build process #SET(CMAKE_VERBOSE_MAKEFILE ON) From c983f0f891e198c29ab0ba324ba1eb0ce40f7c2d Mon Sep 17 00:00:00 2001 From: "Matthias L. Jugel" Date: Mon, 22 Jan 2018 18:19:24 +0100 Subject: [PATCH 111/133] flatten the compiled files list --- tools/export/cmake/CMakeLists.txt.tmpl | 10 --------- tools/export/cmake/__init__.py | 29 ++++++++------------------ 2 files changed, 9 insertions(+), 30 deletions(-) diff --git a/tools/export/cmake/CMakeLists.txt.tmpl b/tools/export/cmake/CMakeLists.txt.tmpl index 7bf387f66a..544e1af32e 100644 --- a/tools/export/cmake/CMakeLists.txt.tmpl +++ b/tools/export/cmake/CMakeLists.txt.tmpl @@ -50,21 +50,11 @@ INCLUDE_DIRECTORIES( {% for p in include_paths %}{{p}} {% endfor %}) -{% for libname,libsrcs in dependencies.items() %} -# target for library "{{libname}}" -ADD_LIBRARY({{libname}} STATIC - {% for libsrc in libsrcs %}{{libsrc}} - {% endfor %}) -{% endfor %} - # executable {{name}} ADD_EXECUTABLE({{name}} {% for src in sources %}{{src}} {% endfor %}) SET_TARGET_PROPERTIES({{name}} PROPERTIES ENABLE_EXPORTS 1) -TARGET_LINK_LIBRARIES({{name}} - {% for libname in dependencies.keys()|sort(reverse=true) %}{{libname}} - {% endfor %}) # add syslibs dependencies to create the correct linker order TARGET_LINK_LIBRARIES({{name}} {{ld_sys_libs|join(" ")}}) diff --git a/tools/export/cmake/__init__.py b/tools/export/cmake/__init__.py index 6a28cd9d54..9c1638e9d1 100644 --- a/tools/export/cmake/__init__.py +++ b/tools/export/cmake/__init__.py @@ -58,36 +58,26 @@ class CMake(Exporter): # get all source files including headers, adding headers allows IDEs to detect which files # belong to the project, otherwise headers may be greyed out and not work with inspection # (that is true for CLion and definitely for Visual Code) - allSourceFiles = set(self.resources.c_sources + - self.resources.cpp_sources + - self.resources.s_sources + - self.resources.headers) - - # create a list of dependencies (mbed add ...) - dependencies = [l[:-4] for l in self.resources.lib_refs] - # separate the individual dependency source files into a map with the dep name as key and an array if files - depSources = {re.sub(r'^[.]/', '', l).replace('/', '_'): - sorted([f for f in allSourceFiles if f.startswith(l)]) for l in dependencies} - # delete dependencies that have no source files (may happen if a sub-dependency is ignored by .mbedignore) - depSources = {k: v for k, v in depSources.items() if len(v) != 0} - - # remove all source files that ended up being part of one of the dependencies - srcs = allSourceFiles - for dep in depSources.values(): - srcs.difference_update(dep) + srcs = set(self.resources.c_sources + + self.resources.cpp_sources + + self.resources.s_sources + + self.resources.headers) + srcs = [re.sub(r'^[.]/', '', f) for f in srcs] # additional libraries libraries = [self.prepare_lib(basename(lib)) for lib in self.resources.libraries] sys_libs = [self.prepare_sys_lib(lib) for lib in self.toolchain.sys_libs] + # sort includes reverse, so the deepest dir comes first (ensures short includes) + includes = sorted([re.sub(r'^[.]/', '', l) for l in self.resources.inc_dirs], reverse=True) + ctx = { 'name': self.project_name, 'target': self.target, 'sources': sorted(srcs), - 'dependencies': depSources, 'libraries': libraries, 'ld_sys_libs': sys_libs, - 'include_paths': sorted(list(set(self.resources.inc_dirs))), + 'include_paths': includes, 'library_paths': sorted([re.sub(r'^[.]/', '', l) for l in self.resources.lib_dirs]), 'linker_script': self.resources.linker_script, 'hex_files': self.resources.hex_files, @@ -180,7 +170,6 @@ class CMake(Exporter): if exists('BUILD'): shutil.rmtree('BUILD') - if ret_code != 0: # Seems like something went wrong. return -1 From 47656776ddc1ba8c79b71b6c0086af7f014f5cdc Mon Sep 17 00:00:00 2001 From: Przemyslaw Stekiel Date: Wed, 13 Sep 2017 11:17:46 +0200 Subject: [PATCH 112/133] Add RTC time test. --- TESTS/mbed_drivers/rtc/main.cpp | 489 ++++++++++++++++++++++++++++++-- 1 file changed, 464 insertions(+), 25 deletions(-) diff --git a/TESTS/mbed_drivers/rtc/main.cpp b/TESTS/mbed_drivers/rtc/main.cpp index fae4d06e20..141dee2659 100644 --- a/TESTS/mbed_drivers/rtc/main.cpp +++ b/TESTS/mbed_drivers/rtc/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved + * Copyright (c) 2017, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -16,41 +16,480 @@ */ #include "mbed.h" #include "greentea-client/test_env.h" -#include "unity/unity.h" -#include "utest/utest.h" +#include "unity.h" +#include "utest.h" +#include "rtos.h" +#include "rtc_api.h" + +#if !DEVICE_RTC +#error [NOT_SUPPORTED] test not supported +#endif using namespace utest::v1; -#define CUSTOM_TIME 1256729737 +/* On some boards RTC counter can not be + * Initialised with 0 value in such case + * drivers sets RTC counter to 1. */ +#define CUSTOM_TIME_0 1 +#define CUSTOM_TIME_1 1256729737 +#define CUSTOM_TIME_2 2147483637 -void test_case_rtc_strftime() { - greentea_send_kv("timestamp", CUSTOM_TIME); +#define DELAY_10_SEC 10 +#define MS_PER_SEC 1000 +#define RTC_DELTA 1 - char buffer[32] = {0}; - char kv_buff[64] = {0}; - set_time(CUSTOM_TIME); // Set RTC time to Wed, 28 Oct 2009 11:35:37 +static volatile int rtc_enabled_ret; +static volatile time_t rtc_time_val; +static volatile bool rtc_read_called; +static volatile bool rtc_write_called; +static volatile bool rtc_init_called; +static volatile bool rtc_isenabled_called; - for (int i=0; i<10; ++i) { - time_t seconds = time(NULL); - sprintf(kv_buff, "[%ld] ", seconds); - strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S %p", localtime(&seconds)); - strcat(kv_buff, buffer); - greentea_send_kv("rtc", kv_buff); - wait(1); - } +/* Stub of RTC read function. */ +static time_t read_rtc_stub(void) +{ + rtc_read_called = true; + + return rtc_time_val; +} + +/* Stub of RTC write function. */ +static void write_rtc_stub(time_t t) +{ + rtc_write_called = true; + + rtc_time_val = t; +} + +/* Stub of RTC init function. */ +static void init_rtc_stub(void) +{ + rtc_init_called = true; +} + +/* Stub of RTC isenabled function. */ +static int isenabled_rtc_stub(void) +{ + rtc_isenabled_called = true; + + return rtc_enabled_ret; +} + +/* This test verifies if attach_rtc provides availability to + * connect specific RTC driver functions. + * + * This is unit test to verify if correct functions are used + * to support RTC. + * + * Given specific RTC driver functions have been attached (stubs). + * When set_time/time functions are called. + * Then set_time/time functions use attached RTC functions. + */ +void test_attach_RTC_stub_funtions() +{ + time_t seconds = 0; + + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Init stub variables/set to unexpected. */ + rtc_write_called = false; + rtc_init_called = false; + + /* Call set_time() function. We expect that init and write RTC stubs + * will be executed. + */ + set_time(CUSTOM_TIME_1); + + /* Verify results. */ + TEST_ASSERT_EQUAL(true, rtc_write_called); + TEST_ASSERT_EQUAL(true, rtc_init_called); + + /* Init stub variables/set to unexpected. */ + rtc_time_val = CUSTOM_TIME_1; + rtc_enabled_ret = true; + rtc_isenabled_called = false; + rtc_read_called = false; + + /* Call time() function. We expect that isenabled and read RTC stubs + * are be executed. + */ + time(NULL); + + /* Verify results. */ + TEST_ASSERT_EQUAL(true, rtc_isenabled_called); + TEST_ASSERT_EQUAL(true, rtc_read_called); + + /* This part of the test can be executed only on RTC devices. */ + + /* Restore env. */ + attach_rtc(rtc_read, rtc_write, rtc_init, rtc_isenabled); + + /* Set to unexpected. */ + rtc_write_called = false; + rtc_init_called = false; + rtc_isenabled_called = false; + rtc_init_called = false; + + /* Set time. */ + set_time(CUSTOM_TIME_1); + + /* Get time. */ + seconds = time(NULL); + + /* Stub RTC functions should not be called now. */ + TEST_ASSERT_EQUAL(false, rtc_isenabled_called); + TEST_ASSERT_EQUAL(false, rtc_init_called); + TEST_ASSERT_EQUAL(false, rtc_write_called); + TEST_ASSERT_EQUAL(false, rtc_init_called); + + /* Check if time has been successfully set and retrieved. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, seconds); +} + +/* This test verifies if attach_rtc provides availability to + * connect specific RTC driver functions. + * + * This is unit test to verify if correct functions are used + * to support RTC. + * + * Given specific RTC driver functions have been attached (original). + * When set_time/time functions are called. + * Then set_time/time functions use attached RTC functions. + */ +void test_attach_RTC_org_funtions() +{ + time_t seconds = 0; + + /* Attache original driver functions. */ + attach_rtc(rtc_read, rtc_write, rtc_init, rtc_isenabled); + + /* Set to unexpected. */ + rtc_write_called = false; + rtc_init_called = false; + rtc_isenabled_called = false; + rtc_init_called = false; + + /* Set time. */ + set_time(CUSTOM_TIME_1); + + /* Get time. */ + seconds = time(NULL); + + /* Stub RTC functions should not be called now. */ + TEST_ASSERT_EQUAL(false, rtc_isenabled_called); + TEST_ASSERT_EQUAL(false, rtc_init_called); + TEST_ASSERT_EQUAL(false, rtc_write_called); + TEST_ASSERT_EQUAL(false, rtc_init_called); + + /* Check if time has been successfully set and retrieved. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, seconds); +} + +/* This test verifies if time() function returns + * current time when all RTC functions are + * defined and RTC is enabled. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has RTC functions defined and RTC is enabled. + * When time() functions is called. + * Then current time is returned. + */ +void test_time_RTC_func_defined_RTC_is_enabled() +{ + time_t seconds = 0; + + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Simulate that RTC is enabled. */ + rtc_enabled_ret = true; + + /* Simulate current time. */ + rtc_time_val = CUSTOM_TIME_1; + + /* Try to get current time. */ + seconds = time(NULL); + + /* Check if expected value has been returned. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, seconds); +} + +/* This test verifies if time() function resets time + * when RTC functions are defined and RTC is disabled. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has RTC functions defined and RTC is disabled. + * When time() functions is called. + * Then function result is 0. + */ +void test_time_RTC_func_defined_RTC_is_disabled() +{ + time_t seconds = 0; + + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Simulate that RTC is disabled. */ + rtc_enabled_ret = false; + + /* Simulate current time. */ + rtc_time_val = CUSTOM_TIME_1; + + /* Try to get current time. */ + seconds = time(NULL); + + /* Check if expected value has been returned. */ + TEST_ASSERT_EQUAL(0, seconds); +} + +/* This test verifies if time() function can be successfully + * executed when isenabled RTC function is undefined. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has isenabled RTC function undefined. + * When time() functions is called. + * Then current time is returned. + */ +void test_time_isenabled_RTC_func_undefined() +{ + time_t seconds = 0; + + /* Attache RTC read/write/init stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, NULL); + + /* Simulate current time. */ + rtc_time_val = CUSTOM_TIME_1; + + /* Try to get current time. */ + seconds = time(NULL); + + /* Check if expected value has been returned. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, seconds); +} + +/* This test verifies if time() function returns -1 if + * read RTC function is undefined. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has read RTC function undefined. + * When time() functions is called. + * Then -1 is returned. + */ +void test_time_read_RTC_func_undefined() +{ + time_t seconds = 0; + + /* Attache RTC write/init/isenabled stubs. */ + attach_rtc(NULL, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Simulate current time. */ + rtc_time_val = CUSTOM_TIME_1; + + /* Try to get current time. */ + seconds = time(NULL); + + /* Check if expected value has been returned. */ + TEST_ASSERT_EQUAL((time_t)-1, seconds); +} + +/* This test verifies if time() function stores + * the result in given time buffer (if specified). + * + * Note: Stubs are used instead original RTC functions. + * Other test cases calls time() routine with + * undefined time buffer. + * + * Given environment has all RTC function defined, RTC is enabled and time buffer is passed to time() function. + * When time() functions is called. + * Then current time is stored in the specified buffer. + */ +void test_time_called_with_param() +{ + time_t seconds = 0; + time_t buffer = 0; + + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Simulate that RTC is enabled. */ + rtc_enabled_ret = true; + + /* Simulate current time. */ + rtc_time_val = CUSTOM_TIME_1; + + /* Try to get current time. */ + seconds = time(&buffer); + + /* Check if expected value has been returned. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, seconds); + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, buffer); +} + +/* This test verifies if set_time() function inits the RTC + * and writes current time if RTC functions are defined. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has RTC functions defined. + * When set_time() functions is called. + * Then function initialises RTC and sets RTC time. + */ +void test_set_time_RTC_func_defined() +{ + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, init_rtc_stub, isenabled_rtc_stub); + + /* Set to unexpected. */ + rtc_time_val = 123; + rtc_init_called = false; + + /* Set current time. */ + rtc_time_val = 123; + + /* Set new RTC time. */ + set_time(CUSTOM_TIME_1); + + /* Check if RTC init has been performed and RTC time has been updated. */ + TEST_ASSERT_EQUAL(true, rtc_init_called); + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, time(NULL)); + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, rtc_time_val); +} + +/* This test verifies if set_time() function can be + * successfully executed when init RTC function is undefined. + * + * Note: Stubs are used instead of original RTC functions. + * + * Given environment has init RTC function undefined. + * When set_time() functions is called. + * Then function sets RTC time. + */ +void test_set_time_init_RTC_func_undefined() +{ + /* Attache RTC read/write/isenabled stubs. */ + attach_rtc(read_rtc_stub, write_rtc_stub, NULL, isenabled_rtc_stub); + + /* Set to unexpected. */ + rtc_time_val = 123; + + /* Set new RTC time. */ + set_time(CUSTOM_TIME_1); + + /* Check if RTC time has been updated. */ + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, time(NULL)); + TEST_ASSERT_EQUAL(CUSTOM_TIME_1, rtc_time_val); +} + +/* This test verifies if set_time() function can be + * successfully executed when write RTC function is undefined. + * + * Note: Stubs are used instead original RTC functions. + * + * Given environemt has write RTC function undefined. + * When set_time() function is called. + * Then function inits RTC and does not modify RTC time. + */ +void test_set_time_write_RTC_func_undefined() +{ + /* Attache RTC read/write/init/isenabled stubs. */ + attach_rtc(read_rtc_stub, NULL, init_rtc_stub, isenabled_rtc_stub); + + /* Set to unexpected. */ + rtc_time_val = 123; + rtc_init_called = false; + + /* Set new RTC time. */ + set_time(CUSTOM_TIME_1); + + /* Check if RTC has been initialized and RTC time has not been updated. */ + TEST_ASSERT_EQUAL(true, rtc_init_called); + TEST_ASSERT_EQUAL(123, time(NULL)); + TEST_ASSERT_EQUAL(123, rtc_time_val); +} + +/* This test verifies if RTC time can be successfully set. + * + * Note: Original RTC functions are used in this test. + * + * Given environment has RTC available. + * When set_time() functions is called. + * Then RTC time is retrieved. + */ +template +void test_functional_set() +{ + /* Set original RTC functions. */ + attach_rtc(rtc_read, rtc_write, rtc_init, rtc_isenabled); + + /* Set new RTC time. */ + set_time(timeValue); + + /* Get current time and verify that new value has been set. */ + TEST_ASSERT_EQUAL(timeValue, time(NULL)); +} + +/* This test verifies if RTC counts seconds. + * + * Note: Original RTC functions are used in this test. + * + * Given RTC has time set. + * When some time has passed (seconds). + * Then RTC time is updated. + */ +void test_functional_count() +{ + time_t seconds = 0; + + /* Set original RTC functions. */ + attach_rtc(rtc_read, rtc_write, rtc_init, rtc_isenabled); + + /* Set new RTC time. */ + set_time(CUSTOM_TIME_2); + + /* Wait 10 sec. */ + wait_ms(DELAY_10_SEC * MS_PER_SEC); + + /* Get time. */ + seconds = time(NULL); + + /* Verify that RTC counts seconds. */ + TEST_ASSERT_UINT_WITHIN(RTC_DELTA, (unsigned int)seconds, CUSTOM_TIME_2 + DELAY_10_SEC); +} + +utest::v1::status_t test_setup(const size_t number_of_cases) +{ + GREENTEA_SETUP(20, "default_auto"); + return verbose_test_setup_handler(number_of_cases); } Case cases[] = { - Case("RTC strftime", test_case_rtc_strftime), + Case("Unit Test: attach stub RTC functions.", test_attach_RTC_stub_funtions), + Case("Unit Test: attach original RTC functions.", test_attach_RTC_org_funtions), + + Case("Unit Test: time() - RTC functions are defined, RTC is enabled.", test_time_RTC_func_defined_RTC_is_enabled), + Case("Unit Test: time() - RTC functions are defined, RTC is disabled.", test_time_RTC_func_defined_RTC_is_disabled), + Case("Unit Test: time() - isenabled RTC function is undefined.", test_time_isenabled_RTC_func_undefined), + Case("Unit Test: time() - read RTC function is undefined.", test_time_read_RTC_func_undefined), + Case("Unit Test: time() - result is stored in given buffer.", test_time_called_with_param), + + Case("Unit Test: set_time() - RTC functions are defined.", test_set_time_RTC_func_defined), + Case("Unit Test: set_time() - init RTC function is undefined.", test_set_time_init_RTC_func_undefined), + Case("Unit Test: set_time() - write RTC function is undefined.", test_set_time_write_RTC_func_undefined), + + Case("Functional Test: set time - CUSTOM_TIME_0.", test_functional_set), + Case("Functional Test: set time - CUSTOM_TIME_1.", test_functional_set), + Case("Functional Test: set time - CUSTOM_TIME_2.", test_functional_set), + + Case("Functional Test: RTC counts seconds.", test_functional_count), }; -utest::v1::status_t greentea_test_setup(const size_t number_of_cases) { - GREENTEA_SETUP(20, "rtc_auto"); - return greentea_test_setup_handler(number_of_cases); -} - -Specification specification(greentea_test_setup, cases, greentea_test_teardown_handler); +Specification specification(test_setup, cases); int main() { - Harness::run(specification); + return !Harness::run(specification); } From baada694429fe21c96a27193b99d8e6ff1afcc5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cruz=20Monrreal=20II=C2=89?= Date: Sat, 27 Jan 2018 00:58:05 -0600 Subject: [PATCH 113/133] Update Mbed version block for patch release --- mbed.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mbed.h b/mbed.h index fd27fba1a2..07a803a1dd 100644 --- a/mbed.h +++ b/mbed.h @@ -16,13 +16,13 @@ #ifndef MBED_H #define MBED_H -#define MBED_LIBRARY_VERSION 158 +#define MBED_LIBRARY_VERSION 159 #if MBED_CONF_RTOS_PRESENT // RTOS present, this is valid only for mbed OS 5 #define MBED_MAJOR_VERSION 5 #define MBED_MINOR_VERSION 7 -#define MBED_PATCH_VERSION 3 +#define MBED_PATCH_VERSION 4 #else // mbed 2 From d6db9b5263eb52d73f2e1f423959ad399b71a069 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 11 Jan 2018 16:27:33 -0600 Subject: [PATCH 114/133] littlefs: Fixed file truncation without writes In the open call, the LFS_O_TRUNC flag was correctly zeroing the file, but it wasn't actually writing the change out to disk. This went unnoticed because in the cases where the truncate was followed by a file write, the updated contents would be written out correctly. Marking the file as dirty if the file isn't already truncated fixes the problem with the least impact. Also added better test cases around truncating files. --- features/filesystem/littlefs/littlefs/lfs.c | 3 ++ .../littlefs/littlefs/tests/test_files.sh | 29 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/features/filesystem/littlefs/littlefs/lfs.c b/features/filesystem/littlefs/littlefs/lfs.c index f83624ec92..9678181fd3 100644 --- a/features/filesystem/littlefs/littlefs/lfs.c +++ b/features/filesystem/littlefs/littlefs/lfs.c @@ -1261,6 +1261,9 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file, file->pos = 0; if (flags & LFS_O_TRUNC) { + if (file->size != 0) { + file->flags |= LFS_F_DIRTY; + } file->head = 0xffffffff; file->size = 0; } diff --git a/features/filesystem/littlefs/littlefs/tests/test_files.sh b/features/filesystem/littlefs/littlefs/tests/test_files.sh index 6086107c89..444346371b 100755 --- a/features/filesystem/littlefs/littlefs/tests/test_files.sh +++ b/features/filesystem/littlefs/littlefs/tests/test_files.sh @@ -34,7 +34,8 @@ tests/test.py << TEST lfs_size_t chunk = 31; srand(0); lfs_mount(&lfs, &cfg) => 0; - lfs_file_open(&lfs, &file[0], "$2", LFS_O_WRONLY | LFS_O_CREAT) => 0; + lfs_file_open(&lfs, &file[0], "$2", + ${3:-LFS_O_WRONLY | LFS_O_CREAT | LFS_O_TRUNC}) => 0; for (lfs_size_t i = 0; i < size; i += chunk) { chunk = (chunk < size - i) ? chunk : size - i; for (lfs_size_t b = 0; b < chunk; b++) { @@ -53,7 +54,10 @@ tests/test.py << TEST lfs_size_t chunk = 29; srand(0); lfs_mount(&lfs, &cfg) => 0; - lfs_file_open(&lfs, &file[0], "$2", LFS_O_RDONLY) => 0; + lfs_stat(&lfs, "$2", &info) => 0; + info.type => LFS_TYPE_REG; + info.size => size; + lfs_file_open(&lfs, &file[0], "$2", ${3:-LFS_O_RDONLY}) => 0; for (lfs_size_t i = 0; i < size; i += chunk) { chunk = (chunk < size - i) ? chunk : size - i; lfs_file_read(&lfs, &file[0], buffer, chunk) => chunk; @@ -78,10 +82,27 @@ echo "--- Large file test ---" w_test $LARGESIZE largeavacado r_test $LARGESIZE largeavacado +echo "--- Zero file test ---" +w_test 0 noavacado +r_test 0 noavacado + +echo "--- Truncate small test ---" +w_test $SMALLSIZE mediumavacado +r_test $SMALLSIZE mediumavacado +w_test $MEDIUMSIZE mediumavacado +r_test $MEDIUMSIZE mediumavacado + +echo "--- Truncate zero test ---" +w_test $SMALLSIZE noavacado +r_test $SMALLSIZE noavacado +w_test 0 noavacado +r_test 0 noavacado + echo "--- Non-overlap check ---" r_test $SMALLSIZE smallavacado r_test $MEDIUMSIZE mediumavacado r_test $LARGESIZE largeavacado +r_test 0 noavacado echo "--- Dir check ---" tests/test.py << TEST @@ -105,6 +126,10 @@ tests/test.py << TEST strcmp(info.name, "largeavacado") => 0; info.type => LFS_TYPE_REG; info.size => $LARGESIZE; + lfs_dir_read(&lfs, &dir[0], &info) => 1; + strcmp(info.name, "noavacado") => 0; + info.type => LFS_TYPE_REG; + info.size => 0; lfs_dir_read(&lfs, &dir[0], &info) => 0; lfs_dir_close(&lfs, &dir[0]) => 0; lfs_unmount(&lfs) => 0; From 5fa45e827ae90830a7674c544b4883d67db4f83f Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 5 Jan 2018 17:29:05 +0100 Subject: [PATCH 115/133] L4 ST CUBE V1.11.0 Update to STM32CubeL4 V1.11.0 Conflicts solved: targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.h --- .../TARGET_STM32L432xC/device/stm32l432xx.h | 7869 ++++++------ .../TARGET_STM32L432xC/device/stm32l4xx.h | 29 +- .../device/system_stm32l4xx.h | 2 - .../TARGET_STM32L433xC/device/stm32l433xx.h | 8491 +++++++------ .../TARGET_STM32L433xC/device/stm32l4xx.h | 29 +- .../device/system_stm32l4xx.h | 2 - .../TARGET_STM32L475xG/device/stm32l475xx.h | 9830 +++++++-------- .../TARGET_STM32L475xG/device/stm32l4xx.h | 29 +- .../device/system_stm32l4xx.h | 2 - .../TARGET_STM32L476xG/device/stm32l476xx.h | 9888 +++++++-------- .../TARGET_STM32L476xG/device/stm32l4xx.h | 29 +- .../device/system_stm32l4xx.h | 2 - .../TARGET_STM32L486xG/device/stm32l486xx.h | 9976 +++++++-------- .../TARGET_STM32L486xG/device/stm32l4xx.h | 21 +- .../device/system_stm32l4xx.h | 2 - .../TARGET_STM32L496xG/device/stm32l496xx.h | 10525 ++++++++-------- .../TARGET_STM32L496xG/device/stm32l4xx.h | 21 +- .../device/system_stm32l4xx.h | 2 - .../device/Release_Notes_stm32l4xx_hal.html | 94 +- .../TARGET_STM32L4/device/stm32_hal_legacy.h | 645 +- .../TARGET_STM32L4/device/stm32l4xx_hal.c | 18 +- .../TARGET_STM32L4/device/stm32l4xx_hal.h | 40 +- .../TARGET_STM32L4/device/stm32l4xx_hal_adc.c | 1433 ++- .../TARGET_STM32L4/device/stm32l4xx_hal_adc.h | 1418 ++- .../device/stm32l4xx_hal_adc_ex.c | 656 +- .../device/stm32l4xx_hal_adc_ex.h | 1078 +- .../TARGET_STM32L4/device/stm32l4xx_hal_can.c | 2719 ++-- .../TARGET_STM32L4/device/stm32l4xx_hal_can.h | 762 +- .../device/stm32l4xx_hal_can_legacy.h | 769 ++ .../device/stm32l4xx_hal_comp.c | 122 +- .../device/stm32l4xx_hal_comp.h | 254 +- .../device/stm32l4xx_hal_conf.h | 31 +- .../device/stm32l4xx_hal_cortex.c | 51 +- .../device/stm32l4xx_hal_cortex.h | 38 +- .../TARGET_STM32L4/device/stm32l4xx_hal_crc.c | 237 +- .../TARGET_STM32L4/device/stm32l4xx_hal_crc.h | 50 +- .../device/stm32l4xx_hal_crc_ex.c | 4 +- .../device/stm32l4xx_hal_crc_ex.h | 14 +- .../device/stm32l4xx_hal_cryp.c | 6 +- .../device/stm32l4xx_hal_cryp.h | 8 +- .../device/stm32l4xx_hal_cryp_ex.c | 62 +- .../device/stm32l4xx_hal_cryp_ex.h | 6 +- .../TARGET_STM32L4/device/stm32l4xx_hal_dac.c | 82 +- .../TARGET_STM32L4/device/stm32l4xx_hal_dac.h | 57 +- .../device/stm32l4xx_hal_dac_ex.c | 20 +- .../device/stm32l4xx_hal_dac_ex.h | 45 +- .../device/stm32l4xx_hal_dcmi.c | 17 +- .../device/stm32l4xx_hal_dcmi.h | 9 +- .../TARGET_STM32L4/device/stm32l4xx_hal_def.h | 6 +- .../device/stm32l4xx_hal_dfsdm.c | 307 +- .../device/stm32l4xx_hal_dfsdm.h | 69 +- .../device/stm32l4xx_hal_dfsdm_ex.c | 151 + .../device/stm32l4xx_hal_dfsdm_ex.h | 109 + .../TARGET_STM32L4/device/stm32l4xx_hal_dma.c | 501 +- .../TARGET_STM32L4/device/stm32l4xx_hal_dma.h | 203 +- .../device/stm32l4xx_hal_dma2d.c | 30 +- .../device/stm32l4xx_hal_dma2d.h | 68 +- .../device/stm32l4xx_hal_dma_ex.c | 319 + .../device/stm32l4xx_hal_dma_ex.h | 298 + .../TARGET_STM32L4/device/stm32l4xx_hal_dsi.c | 2379 ++++ .../TARGET_STM32L4/device/stm32l4xx_hal_dsi.h | 1296 ++ .../device/stm32l4xx_hal_firewall.c | 137 +- .../device/stm32l4xx_hal_firewall.h | 2 - .../device/stm32l4xx_hal_flash.c | 36 +- .../device/stm32l4xx_hal_flash.h | 139 +- .../device/stm32l4xx_hal_flash_ex.c | 197 +- .../device/stm32l4xx_hal_flash_ex.h | 52 +- .../device/stm32l4xx_hal_flash_ramfunc.c | 118 +- .../device/stm32l4xx_hal_flash_ramfunc.h | 5 +- .../device/stm32l4xx_hal_gfxmmu.c | 567 + .../device/stm32l4xx_hal_gfxmmu.h | 306 + .../device/stm32l4xx_hal_gpio.c | 2 - .../device/stm32l4xx_hal_gpio.h | 2 - .../device/stm32l4xx_hal_gpio_ex.h | 158 +- .../device/stm32l4xx_hal_hash.c | 59 +- .../device/stm32l4xx_hal_hash.h | 6 +- .../device/stm32l4xx_hal_hash_ex.c | 6 +- .../device/stm32l4xx_hal_hash_ex.h | 6 +- .../TARGET_STM32L4/device/stm32l4xx_hal_hcd.c | 8 +- .../TARGET_STM32L4/device/stm32l4xx_hal_hcd.h | 8 +- .../TARGET_STM32L4/device/stm32l4xx_hal_i2c.c | 795 +- .../TARGET_STM32L4/device/stm32l4xx_hal_i2c.h | 62 +- .../device/stm32l4xx_hal_i2c_ex.c | 28 +- .../device/stm32l4xx_hal_i2c_ex.h | 10 +- .../device/stm32l4xx_hal_irda.c | 278 +- .../device/stm32l4xx_hal_irda.h | 302 +- .../device/stm32l4xx_hal_irda_ex.h | 10 +- .../device/stm32l4xx_hal_iwdg.c | 2 - .../device/stm32l4xx_hal_iwdg.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_lcd.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_lcd.h | 2 - .../device/stm32l4xx_hal_lptim.c | 2 - .../device/stm32l4xx_hal_lptim.h | 2 - .../device/stm32l4xx_hal_ltdc.c | 1896 +++ .../device/stm32l4xx_hal_ltdc.h | 649 + .../device/stm32l4xx_hal_ltdc_ex.c | 167 + .../device/stm32l4xx_hal_ltdc_ex.h | 101 + .../device/stm32l4xx_hal_nand.c | 6 +- .../device/stm32l4xx_hal_nand.h | 6 +- .../TARGET_STM32L4/device/stm32l4xx_hal_nor.c | 6 +- .../TARGET_STM32L4/device/stm32l4xx_hal_nor.h | 6 +- .../device/stm32l4xx_hal_opamp.c | 2 - .../device/stm32l4xx_hal_opamp.h | 33 +- .../device/stm32l4xx_hal_opamp_ex.c | 5 +- .../device/stm32l4xx_hal_opamp_ex.h | 6 +- .../device/stm32l4xx_hal_ospi.c | 2564 ++++ .../device/stm32l4xx_hal_ospi.h | 968 ++ .../TARGET_STM32L4/device/stm32l4xx_hal_pcd.c | 8 +- .../TARGET_STM32L4/device/stm32l4xx_hal_pcd.h | 8 +- .../device/stm32l4xx_hal_pcd_ex.c | 34 +- .../device/stm32l4xx_hal_pcd_ex.h | 8 +- .../TARGET_STM32L4/device/stm32l4xx_hal_pwr.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_pwr.h | 2 - .../device/stm32l4xx_hal_pwr_ex.c | 147 +- .../device/stm32l4xx_hal_pwr_ex.h | 30 +- .../device/stm32l4xx_hal_qspi.c | 311 +- .../device/stm32l4xx_hal_qspi.h | 46 +- .../TARGET_STM32L4/device/stm32l4xx_hal_rcc.c | 508 +- .../TARGET_STM32L4/device/stm32l4xx_hal_rcc.h | 825 +- .../device/stm32l4xx_hal_rcc_ex.c | 961 +- .../device/stm32l4xx_hal_rcc_ex.h | 1039 +- .../TARGET_STM32L4/device/stm32l4xx_hal_rng.c | 36 +- .../TARGET_STM32L4/device/stm32l4xx_hal_rng.h | 62 +- .../TARGET_STM32L4/device/stm32l4xx_hal_rtc.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_rtc.h | 14 +- .../device/stm32l4xx_hal_rtc_ex.c | 2 - .../device/stm32l4xx_hal_rtc_ex.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_sai.c | 260 +- .../TARGET_STM32L4/device/stm32l4xx_hal_sai.h | 94 +- .../device/stm32l4xx_hal_sai_ex.c | 142 + .../device/stm32l4xx_hal_sai_ex.h | 132 + .../TARGET_STM32L4/device/stm32l4xx_hal_sd.c | 542 +- .../TARGET_STM32L4/device/stm32l4xx_hal_sd.h | 28 +- .../device/stm32l4xx_hal_sd_ex.c | 550 + .../device/stm32l4xx_hal_sd_ex.h | 144 + .../device/stm32l4xx_hal_smartcard.c | 889 +- .../device/stm32l4xx_hal_smartcard.h | 484 +- .../device/stm32l4xx_hal_smartcard_ex.c | 297 +- .../device/stm32l4xx_hal_smartcard_ex.h | 224 +- .../device/stm32l4xx_hal_smbus.c | 896 +- .../device/stm32l4xx_hal_smbus.h | 144 +- .../TARGET_STM32L4/device/stm32l4xx_hal_spi.c | 302 +- .../TARGET_STM32L4/device/stm32l4xx_hal_spi.h | 214 +- .../device/stm32l4xx_hal_spi_ex.c | 8 +- .../device/stm32l4xx_hal_spi_ex.h | 2 - .../device/stm32l4xx_hal_sram.c | 6 +- .../device/stm32l4xx_hal_sram.h | 6 +- .../device/stm32l4xx_hal_swpmi.c | 2 - .../device/stm32l4xx_hal_swpmi.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_tim.c | 619 +- .../TARGET_STM32L4/device/stm32l4xx_hal_tim.h | 304 +- .../device/stm32l4xx_hal_tim_ex.c | 331 +- .../device/stm32l4xx_hal_tim_ex.h | 87 +- .../TARGET_STM32L4/device/stm32l4xx_hal_tsc.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_hal_tsc.h | 2 - .../device/stm32l4xx_hal_uart.c | 1783 ++- .../device/stm32l4xx_hal_uart.h | 817 +- .../device/stm32l4xx_hal_uart_ex.c | 592 +- .../device/stm32l4xx_hal_uart_ex.h | 165 +- .../device/stm32l4xx_hal_usart.c | 1463 ++- .../device/stm32l4xx_hal_usart.h | 568 +- .../device/stm32l4xx_hal_usart_ex.c | 551 + .../device/stm32l4xx_hal_usart_ex.h | 160 +- .../device/stm32l4xx_hal_wwdg.c | 2 - .../device/stm32l4xx_hal_wwdg.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_adc.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_adc.h | 305 +- .../TARGET_STM32L4/device/stm32l4xx_ll_bus.h | 221 +- .../TARGET_STM32L4/device/stm32l4xx_ll_comp.c | 62 +- .../TARGET_STM32L4/device/stm32l4xx_ll_comp.h | 28 +- .../device/stm32l4xx_ll_cortex.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_crc.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_crc.h | 23 +- .../TARGET_STM32L4/device/stm32l4xx_ll_crs.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_crs.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_dac.c | 19 +- .../TARGET_STM32L4/device/stm32l4xx_ll_dac.h | 33 +- .../TARGET_STM32L4/device/stm32l4xx_ll_dma.c | 35 +- .../TARGET_STM32L4/device/stm32l4xx_ll_dma.h | 419 +- .../device/stm32l4xx_ll_dma2d.c | 33 +- .../device/stm32l4xx_ll_dma2d.h | 121 +- .../device/stm32l4xx_ll_dmamux.h | 1795 +++ .../TARGET_STM32L4/device/stm32l4xx_ll_exti.c | 10 +- .../TARGET_STM32L4/device/stm32l4xx_ll_exti.h | 41 +- .../TARGET_STM32L4/device/stm32l4xx_ll_fmc.c | 92 +- .../TARGET_STM32L4/device/stm32l4xx_ll_fmc.h | 41 +- .../TARGET_STM32L4/device/stm32l4xx_ll_gpio.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_gpio.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_i2c.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_i2c.h | 24 +- .../TARGET_STM32L4/device/stm32l4xx_ll_iwdg.h | 2 - .../device/stm32l4xx_ll_lptim.c | 38 +- .../device/stm32l4xx_ll_lptim.h | 2 - .../device/stm32l4xx_ll_lpuart.c | 37 +- .../device/stm32l4xx_ll_lpuart.h | 711 +- .../device/stm32l4xx_ll_opamp.c | 2 - .../device/stm32l4xx_ll_opamp.h | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_pwr.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_pwr.h | 199 +- .../TARGET_STM32L4/device/stm32l4xx_ll_rcc.c | 387 +- .../TARGET_STM32L4/device/stm32l4xx_ll_rcc.h | 1775 ++- .../TARGET_STM32L4/device/stm32l4xx_ll_rng.c | 50 +- .../TARGET_STM32L4/device/stm32l4xx_ll_rng.h | 79 +- .../TARGET_STM32L4/device/stm32l4xx_ll_rtc.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_rtc.h | 29 +- .../device/stm32l4xx_ll_sdmmc.c | 90 +- .../device/stm32l4xx_ll_sdmmc.h | 199 +- .../TARGET_STM32L4/device/stm32l4xx_ll_spi.c | 2 - .../TARGET_STM32L4/device/stm32l4xx_ll_spi.h | 2 - .../device/stm32l4xx_ll_swpmi.c | 2 - .../device/stm32l4xx_ll_swpmi.h | 2 - .../device/stm32l4xx_ll_system.h | 52 +- .../TARGET_STM32L4/device/stm32l4xx_ll_tim.c | 54 +- .../TARGET_STM32L4/device/stm32l4xx_ll_tim.h | 139 +- .../device/stm32l4xx_ll_usart.c | 41 +- .../device/stm32l4xx_ll_usart.h | 968 +- .../TARGET_STM32L4/device/stm32l4xx_ll_usb.c | 8 +- .../TARGET_STM32L4/device/stm32l4xx_ll_usb.h | 8 +- .../device/stm32l4xx_ll_utils.c | 213 +- .../device/stm32l4xx_ll_utils.h | 18 +- .../TARGET_STM32L4/device/stm32l4xx_ll_wwdg.h | 2 - 221 files changed, 68846 insertions(+), 39408 deletions(-) create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.c create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dmamux.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h index 984f5abf52..5dc42a0c10 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l432xx.h * @author MCD Application Team - * @version V1.3.1 - * @date 21-April-2017 * @brief CMSIS STM32L432xx Device Peripheral Access Layer Header File. * * This file contains: @@ -321,7 +319,7 @@ typedef struct /** * @brief Clock Recovery System */ -typedef struct +typedef struct { __IO uint32_t CR; /*!< CRS ccontrol register, Address offset: 0x00 */ __IO uint32_t CFGR; /*!< CRS configuration register, Address offset: 0x04 */ @@ -574,7 +572,7 @@ typedef struct uint32_t RESERVED1; /*!< Reserved, Address offset: 0x48 */ uint32_t RESERVED2; /*!< Reserved, Address offset: 0x4C */ uint32_t RESERVED3; /*!< Reserved, Address offset: 0x50 */ - uint32_t RESERVED4; /*!< Reserved, Address offset: 0x54 */ + uint32_t RESERVED4; /*!< Reserved, Address offset: 0x54 */ __IO uint32_t PUCRH; /*!< Pull_up control register of portH, Address offset: 0x58 */ __IO uint32_t PDCRH; /*!< Pull_Down control register of portH, Address offset: 0x5C */ } PWR_TypeDef; @@ -741,12 +739,10 @@ typedef struct __IO uint32_t CR1; /*!< SPI Control register 1, Address offset: 0x00 */ __IO uint32_t CR2; /*!< SPI Control register 2, Address offset: 0x04 */ __IO uint32_t SR; /*!< SPI Status register, Address offset: 0x08 */ - __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ __IO uint32_t CRCPR; /*!< SPI CRC polynomial register, Address offset: 0x10 */ __IO uint32_t RXCRCR; /*!< SPI Rx CRC register, Address offset: 0x14 */ __IO uint32_t TXCRCR; /*!< SPI Tx CRC register, Address offset: 0x18 */ - uint32_t RESERVED1; /*!< Reserved, Address offset: 0x1C */ - uint32_t RESERVED2; /*!< Reserved, Address offset: 0x20 */ } SPI_TypeDef; @@ -865,42 +861,42 @@ typedef struct uint16_t RESERVED5; /*!< Reserved, 0x2A */ } USART_TypeDef; -/** +/** * @brief Universal Serial Bus Full Speed Device */ - + typedef struct { - __IO uint16_t EP0R; /*!< USB Endpoint 0 register, Address offset: 0x00 */ - __IO uint16_t RESERVED0; /*!< Reserved */ + __IO uint16_t EP0R; /*!< USB Endpoint 0 register, Address offset: 0x00 */ + __IO uint16_t RESERVED0; /*!< Reserved */ __IO uint16_t EP1R; /*!< USB Endpoint 1 register, Address offset: 0x04 */ - __IO uint16_t RESERVED1; /*!< Reserved */ + __IO uint16_t RESERVED1; /*!< Reserved */ __IO uint16_t EP2R; /*!< USB Endpoint 2 register, Address offset: 0x08 */ - __IO uint16_t RESERVED2; /*!< Reserved */ - __IO uint16_t EP3R; /*!< USB Endpoint 3 register, Address offset: 0x0C */ - __IO uint16_t RESERVED3; /*!< Reserved */ + __IO uint16_t RESERVED2; /*!< Reserved */ + __IO uint16_t EP3R; /*!< USB Endpoint 3 register, Address offset: 0x0C */ + __IO uint16_t RESERVED3; /*!< Reserved */ __IO uint16_t EP4R; /*!< USB Endpoint 4 register, Address offset: 0x10 */ - __IO uint16_t RESERVED4; /*!< Reserved */ + __IO uint16_t RESERVED4; /*!< Reserved */ __IO uint16_t EP5R; /*!< USB Endpoint 5 register, Address offset: 0x14 */ - __IO uint16_t RESERVED5; /*!< Reserved */ + __IO uint16_t RESERVED5; /*!< Reserved */ __IO uint16_t EP6R; /*!< USB Endpoint 6 register, Address offset: 0x18 */ - __IO uint16_t RESERVED6; /*!< Reserved */ + __IO uint16_t RESERVED6; /*!< Reserved */ __IO uint16_t EP7R; /*!< USB Endpoint 7 register, Address offset: 0x1C */ - __IO uint16_t RESERVED7[17]; /*!< Reserved */ + __IO uint16_t RESERVED7[17]; /*!< Reserved */ __IO uint16_t CNTR; /*!< Control register, Address offset: 0x40 */ - __IO uint16_t RESERVED8; /*!< Reserved */ + __IO uint16_t RESERVED8; /*!< Reserved */ __IO uint16_t ISTR; /*!< Interrupt status register, Address offset: 0x44 */ - __IO uint16_t RESERVED9; /*!< Reserved */ + __IO uint16_t RESERVED9; /*!< Reserved */ __IO uint16_t FNR; /*!< Frame number register, Address offset: 0x48 */ - __IO uint16_t RESERVEDA; /*!< Reserved */ + __IO uint16_t RESERVEDA; /*!< Reserved */ __IO uint16_t DADDR; /*!< Device address register, Address offset: 0x4C */ - __IO uint16_t RESERVEDB; /*!< Reserved */ + __IO uint16_t RESERVEDB; /*!< Reserved */ __IO uint16_t BTABLE; /*!< Buffer Table address register, Address offset: 0x50 */ - __IO uint16_t RESERVEDC; /*!< Reserved */ + __IO uint16_t RESERVEDC; /*!< Reserved */ __IO uint16_t LPMCSR; /*!< LPM Control and Status register, Address offset: 0x54 */ - __IO uint16_t RESERVEDD; /*!< Reserved */ + __IO uint16_t RESERVEDD; /*!< Reserved */ __IO uint16_t BCDR; /*!< Battery Charging detector register, Address offset: 0x58 */ - __IO uint16_t RESERVEDE; /*!< Reserved */ + __IO uint16_t RESERVEDE; /*!< Reserved */ } USB_TypeDef; @@ -933,7 +929,7 @@ typedef struct /** @addtogroup Peripheral_memory_map * @{ */ -#define FLASH_BASE ((uint32_t)0x08000000U) /*!< FLASH(up to 1 MB) base address */ +#define FLASH_BASE ((uint32_t)0x08000000U) /*!< FLASH(up to 256 KB) base address */ #define SRAM1_BASE ((uint32_t)0x20000000U) /*!< SRAM1(up to 48 KB) base address */ #define SRAM2_BASE ((uint32_t)0x10000000U) /*!< SRAM2(16 KB) base address */ #define PERIPH_BASE ((uint32_t)0x40000000U) /*!< Peripheral base address */ @@ -941,7 +937,6 @@ typedef struct #define QSPI_R_BASE ((uint32_t)0xA0001000U) /*!< QUADSPI control registers base address */ #define SRAM1_BB_BASE ((uint32_t)0x22000000U) /*!< SRAM1(96 KB) base address in the bit-band region */ -#define SRAM2_BB_BASE ((uint32_t)0x12000000U) /*!< SRAM2(32 KB) base address in the bit-band region */ #define PERIPH_BB_BASE ((uint32_t)0x42000000U) /*!< Peripheral base address in the bit-band region */ /* Legacy defines */ @@ -1165,72 +1160,72 @@ typedef struct /* Note: No specific macro feature on this device */ /******************** Bit definition for ADC_ISR register *******************/ -#define ADC_ISR_ADRDY_Pos (0U) +#define ADC_ISR_ADRDY_Pos (0U) #define ADC_ISR_ADRDY_Msk (0x1U << ADC_ISR_ADRDY_Pos) /*!< 0x00000001 */ #define ADC_ISR_ADRDY ADC_ISR_ADRDY_Msk /*!< ADC ready flag */ -#define ADC_ISR_EOSMP_Pos (1U) +#define ADC_ISR_EOSMP_Pos (1U) #define ADC_ISR_EOSMP_Msk (0x1U << ADC_ISR_EOSMP_Pos) /*!< 0x00000002 */ #define ADC_ISR_EOSMP ADC_ISR_EOSMP_Msk /*!< ADC group regular end of sampling flag */ -#define ADC_ISR_EOC_Pos (2U) +#define ADC_ISR_EOC_Pos (2U) #define ADC_ISR_EOC_Msk (0x1U << ADC_ISR_EOC_Pos) /*!< 0x00000004 */ #define ADC_ISR_EOC ADC_ISR_EOC_Msk /*!< ADC group regular end of unitary conversion flag */ -#define ADC_ISR_EOS_Pos (3U) +#define ADC_ISR_EOS_Pos (3U) #define ADC_ISR_EOS_Msk (0x1U << ADC_ISR_EOS_Pos) /*!< 0x00000008 */ #define ADC_ISR_EOS ADC_ISR_EOS_Msk /*!< ADC group regular end of sequence conversions flag */ -#define ADC_ISR_OVR_Pos (4U) +#define ADC_ISR_OVR_Pos (4U) #define ADC_ISR_OVR_Msk (0x1U << ADC_ISR_OVR_Pos) /*!< 0x00000010 */ #define ADC_ISR_OVR ADC_ISR_OVR_Msk /*!< ADC group regular overrun flag */ -#define ADC_ISR_JEOC_Pos (5U) +#define ADC_ISR_JEOC_Pos (5U) #define ADC_ISR_JEOC_Msk (0x1U << ADC_ISR_JEOC_Pos) /*!< 0x00000020 */ #define ADC_ISR_JEOC ADC_ISR_JEOC_Msk /*!< ADC group injected end of unitary conversion flag */ -#define ADC_ISR_JEOS_Pos (6U) +#define ADC_ISR_JEOS_Pos (6U) #define ADC_ISR_JEOS_Msk (0x1U << ADC_ISR_JEOS_Pos) /*!< 0x00000040 */ #define ADC_ISR_JEOS ADC_ISR_JEOS_Msk /*!< ADC group injected end of sequence conversions flag */ -#define ADC_ISR_AWD1_Pos (7U) +#define ADC_ISR_AWD1_Pos (7U) #define ADC_ISR_AWD1_Msk (0x1U << ADC_ISR_AWD1_Pos) /*!< 0x00000080 */ #define ADC_ISR_AWD1 ADC_ISR_AWD1_Msk /*!< ADC analog watchdog 1 flag */ -#define ADC_ISR_AWD2_Pos (8U) +#define ADC_ISR_AWD2_Pos (8U) #define ADC_ISR_AWD2_Msk (0x1U << ADC_ISR_AWD2_Pos) /*!< 0x00000100 */ #define ADC_ISR_AWD2 ADC_ISR_AWD2_Msk /*!< ADC analog watchdog 2 flag */ -#define ADC_ISR_AWD3_Pos (9U) +#define ADC_ISR_AWD3_Pos (9U) #define ADC_ISR_AWD3_Msk (0x1U << ADC_ISR_AWD3_Pos) /*!< 0x00000200 */ #define ADC_ISR_AWD3 ADC_ISR_AWD3_Msk /*!< ADC analog watchdog 3 flag */ -#define ADC_ISR_JQOVF_Pos (10U) +#define ADC_ISR_JQOVF_Pos (10U) #define ADC_ISR_JQOVF_Msk (0x1U << ADC_ISR_JQOVF_Pos) /*!< 0x00000400 */ #define ADC_ISR_JQOVF ADC_ISR_JQOVF_Msk /*!< ADC group injected contexts queue overflow flag */ /******************** Bit definition for ADC_IER register *******************/ -#define ADC_IER_ADRDYIE_Pos (0U) +#define ADC_IER_ADRDYIE_Pos (0U) #define ADC_IER_ADRDYIE_Msk (0x1U << ADC_IER_ADRDYIE_Pos) /*!< 0x00000001 */ #define ADC_IER_ADRDYIE ADC_IER_ADRDYIE_Msk /*!< ADC ready interrupt */ -#define ADC_IER_EOSMPIE_Pos (1U) +#define ADC_IER_EOSMPIE_Pos (1U) #define ADC_IER_EOSMPIE_Msk (0x1U << ADC_IER_EOSMPIE_Pos) /*!< 0x00000002 */ #define ADC_IER_EOSMPIE ADC_IER_EOSMPIE_Msk /*!< ADC group regular end of sampling interrupt */ -#define ADC_IER_EOCIE_Pos (2U) +#define ADC_IER_EOCIE_Pos (2U) #define ADC_IER_EOCIE_Msk (0x1U << ADC_IER_EOCIE_Pos) /*!< 0x00000004 */ #define ADC_IER_EOCIE ADC_IER_EOCIE_Msk /*!< ADC group regular end of unitary conversion interrupt */ -#define ADC_IER_EOSIE_Pos (3U) +#define ADC_IER_EOSIE_Pos (3U) #define ADC_IER_EOSIE_Msk (0x1U << ADC_IER_EOSIE_Pos) /*!< 0x00000008 */ #define ADC_IER_EOSIE ADC_IER_EOSIE_Msk /*!< ADC group regular end of sequence conversions interrupt */ -#define ADC_IER_OVRIE_Pos (4U) +#define ADC_IER_OVRIE_Pos (4U) #define ADC_IER_OVRIE_Msk (0x1U << ADC_IER_OVRIE_Pos) /*!< 0x00000010 */ #define ADC_IER_OVRIE ADC_IER_OVRIE_Msk /*!< ADC group regular overrun interrupt */ -#define ADC_IER_JEOCIE_Pos (5U) +#define ADC_IER_JEOCIE_Pos (5U) #define ADC_IER_JEOCIE_Msk (0x1U << ADC_IER_JEOCIE_Pos) /*!< 0x00000020 */ #define ADC_IER_JEOCIE ADC_IER_JEOCIE_Msk /*!< ADC group injected end of unitary conversion interrupt */ -#define ADC_IER_JEOSIE_Pos (6U) +#define ADC_IER_JEOSIE_Pos (6U) #define ADC_IER_JEOSIE_Msk (0x1U << ADC_IER_JEOSIE_Pos) /*!< 0x00000040 */ #define ADC_IER_JEOSIE ADC_IER_JEOSIE_Msk /*!< ADC group injected end of sequence conversions interrupt */ -#define ADC_IER_AWD1IE_Pos (7U) +#define ADC_IER_AWD1IE_Pos (7U) #define ADC_IER_AWD1IE_Msk (0x1U << ADC_IER_AWD1IE_Pos) /*!< 0x00000080 */ #define ADC_IER_AWD1IE ADC_IER_AWD1IE_Msk /*!< ADC analog watchdog 1 interrupt */ -#define ADC_IER_AWD2IE_Pos (8U) +#define ADC_IER_AWD2IE_Pos (8U) #define ADC_IER_AWD2IE_Msk (0x1U << ADC_IER_AWD2IE_Pos) /*!< 0x00000100 */ #define ADC_IER_AWD2IE ADC_IER_AWD2IE_Msk /*!< ADC analog watchdog 2 interrupt */ -#define ADC_IER_AWD3IE_Pos (9U) +#define ADC_IER_AWD3IE_Pos (9U) #define ADC_IER_AWD3IE_Msk (0x1U << ADC_IER_AWD3IE_Pos) /*!< 0x00000200 */ #define ADC_IER_AWD3IE ADC_IER_AWD3IE_Msk /*!< ADC analog watchdog 3 interrupt */ -#define ADC_IER_JQOVFIE_Pos (10U) +#define ADC_IER_JQOVFIE_Pos (10U) #define ADC_IER_JQOVFIE_Msk (0x1U << ADC_IER_JQOVFIE_Pos) /*!< 0x00000400 */ #define ADC_IER_JQOVFIE ADC_IER_JQOVFIE_Msk /*!< ADC group injected contexts queue overflow interrupt */ @@ -1248,56 +1243,56 @@ typedef struct #define ADC_IER_JQOVF (ADC_IER_JQOVFIE) /******************** Bit definition for ADC_CR register ********************/ -#define ADC_CR_ADEN_Pos (0U) +#define ADC_CR_ADEN_Pos (0U) #define ADC_CR_ADEN_Msk (0x1U << ADC_CR_ADEN_Pos) /*!< 0x00000001 */ #define ADC_CR_ADEN ADC_CR_ADEN_Msk /*!< ADC enable */ -#define ADC_CR_ADDIS_Pos (1U) +#define ADC_CR_ADDIS_Pos (1U) #define ADC_CR_ADDIS_Msk (0x1U << ADC_CR_ADDIS_Pos) /*!< 0x00000002 */ #define ADC_CR_ADDIS ADC_CR_ADDIS_Msk /*!< ADC disable */ -#define ADC_CR_ADSTART_Pos (2U) +#define ADC_CR_ADSTART_Pos (2U) #define ADC_CR_ADSTART_Msk (0x1U << ADC_CR_ADSTART_Pos) /*!< 0x00000004 */ #define ADC_CR_ADSTART ADC_CR_ADSTART_Msk /*!< ADC group regular conversion start */ -#define ADC_CR_JADSTART_Pos (3U) +#define ADC_CR_JADSTART_Pos (3U) #define ADC_CR_JADSTART_Msk (0x1U << ADC_CR_JADSTART_Pos) /*!< 0x00000008 */ #define ADC_CR_JADSTART ADC_CR_JADSTART_Msk /*!< ADC group injected conversion start */ -#define ADC_CR_ADSTP_Pos (4U) +#define ADC_CR_ADSTP_Pos (4U) #define ADC_CR_ADSTP_Msk (0x1U << ADC_CR_ADSTP_Pos) /*!< 0x00000010 */ #define ADC_CR_ADSTP ADC_CR_ADSTP_Msk /*!< ADC group regular conversion stop */ -#define ADC_CR_JADSTP_Pos (5U) +#define ADC_CR_JADSTP_Pos (5U) #define ADC_CR_JADSTP_Msk (0x1U << ADC_CR_JADSTP_Pos) /*!< 0x00000020 */ #define ADC_CR_JADSTP ADC_CR_JADSTP_Msk /*!< ADC group injected conversion stop */ -#define ADC_CR_ADVREGEN_Pos (28U) +#define ADC_CR_ADVREGEN_Pos (28U) #define ADC_CR_ADVREGEN_Msk (0x1U << ADC_CR_ADVREGEN_Pos) /*!< 0x10000000 */ #define ADC_CR_ADVREGEN ADC_CR_ADVREGEN_Msk /*!< ADC voltage regulator enable */ -#define ADC_CR_DEEPPWD_Pos (29U) +#define ADC_CR_DEEPPWD_Pos (29U) #define ADC_CR_DEEPPWD_Msk (0x1U << ADC_CR_DEEPPWD_Pos) /*!< 0x20000000 */ #define ADC_CR_DEEPPWD ADC_CR_DEEPPWD_Msk /*!< ADC deep power down enable */ -#define ADC_CR_ADCALDIF_Pos (30U) +#define ADC_CR_ADCALDIF_Pos (30U) #define ADC_CR_ADCALDIF_Msk (0x1U << ADC_CR_ADCALDIF_Pos) /*!< 0x40000000 */ #define ADC_CR_ADCALDIF ADC_CR_ADCALDIF_Msk /*!< ADC differential mode for calibration */ -#define ADC_CR_ADCAL_Pos (31U) +#define ADC_CR_ADCAL_Pos (31U) #define ADC_CR_ADCAL_Msk (0x1U << ADC_CR_ADCAL_Pos) /*!< 0x80000000 */ #define ADC_CR_ADCAL ADC_CR_ADCAL_Msk /*!< ADC calibration */ /******************** Bit definition for ADC_CFGR register ******************/ -#define ADC_CFGR_DMAEN_Pos (0U) +#define ADC_CFGR_DMAEN_Pos (0U) #define ADC_CFGR_DMAEN_Msk (0x1U << ADC_CFGR_DMAEN_Pos) /*!< 0x00000001 */ #define ADC_CFGR_DMAEN ADC_CFGR_DMAEN_Msk /*!< ADC DMA transfer enable */ -#define ADC_CFGR_DMACFG_Pos (1U) +#define ADC_CFGR_DMACFG_Pos (1U) #define ADC_CFGR_DMACFG_Msk (0x1U << ADC_CFGR_DMACFG_Pos) /*!< 0x00000002 */ #define ADC_CFGR_DMACFG ADC_CFGR_DMACFG_Msk /*!< ADC DMA transfer configuration */ -#define ADC_CFGR_RES_Pos (3U) +#define ADC_CFGR_RES_Pos (3U) #define ADC_CFGR_RES_Msk (0x3U << ADC_CFGR_RES_Pos) /*!< 0x00000018 */ #define ADC_CFGR_RES ADC_CFGR_RES_Msk /*!< ADC data resolution */ #define ADC_CFGR_RES_0 (0x1U << ADC_CFGR_RES_Pos) /*!< 0x00000008 */ #define ADC_CFGR_RES_1 (0x2U << ADC_CFGR_RES_Pos) /*!< 0x00000010 */ -#define ADC_CFGR_ALIGN_Pos (5U) +#define ADC_CFGR_ALIGN_Pos (5U) #define ADC_CFGR_ALIGN_Msk (0x1U << ADC_CFGR_ALIGN_Pos) /*!< 0x00000020 */ #define ADC_CFGR_ALIGN ADC_CFGR_ALIGN_Msk /*!< ADC data alignement */ -#define ADC_CFGR_EXTSEL_Pos (6U) +#define ADC_CFGR_EXTSEL_Pos (6U) #define ADC_CFGR_EXTSEL_Msk (0xFU << ADC_CFGR_EXTSEL_Pos) /*!< 0x000003C0 */ #define ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_Msk /*!< ADC group regular external trigger source */ #define ADC_CFGR_EXTSEL_0 (0x1U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000040 */ @@ -1305,53 +1300,53 @@ typedef struct #define ADC_CFGR_EXTSEL_2 (0x4U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000100 */ #define ADC_CFGR_EXTSEL_3 (0x8U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000200 */ -#define ADC_CFGR_EXTEN_Pos (10U) +#define ADC_CFGR_EXTEN_Pos (10U) #define ADC_CFGR_EXTEN_Msk (0x3U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000C00 */ #define ADC_CFGR_EXTEN ADC_CFGR_EXTEN_Msk /*!< ADC group regular external trigger polarity */ #define ADC_CFGR_EXTEN_0 (0x1U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000400 */ #define ADC_CFGR_EXTEN_1 (0x2U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000800 */ -#define ADC_CFGR_OVRMOD_Pos (12U) +#define ADC_CFGR_OVRMOD_Pos (12U) #define ADC_CFGR_OVRMOD_Msk (0x1U << ADC_CFGR_OVRMOD_Pos) /*!< 0x00001000 */ #define ADC_CFGR_OVRMOD ADC_CFGR_OVRMOD_Msk /*!< ADC group regular overrun configuration */ -#define ADC_CFGR_CONT_Pos (13U) +#define ADC_CFGR_CONT_Pos (13U) #define ADC_CFGR_CONT_Msk (0x1U << ADC_CFGR_CONT_Pos) /*!< 0x00002000 */ #define ADC_CFGR_CONT ADC_CFGR_CONT_Msk /*!< ADC group regular continuous conversion mode */ -#define ADC_CFGR_AUTDLY_Pos (14U) +#define ADC_CFGR_AUTDLY_Pos (14U) #define ADC_CFGR_AUTDLY_Msk (0x1U << ADC_CFGR_AUTDLY_Pos) /*!< 0x00004000 */ #define ADC_CFGR_AUTDLY ADC_CFGR_AUTDLY_Msk /*!< ADC low power auto wait */ -#define ADC_CFGR_DISCEN_Pos (16U) +#define ADC_CFGR_DISCEN_Pos (16U) #define ADC_CFGR_DISCEN_Msk (0x1U << ADC_CFGR_DISCEN_Pos) /*!< 0x00010000 */ #define ADC_CFGR_DISCEN ADC_CFGR_DISCEN_Msk /*!< ADC group regular sequencer discontinuous mode */ -#define ADC_CFGR_DISCNUM_Pos (17U) +#define ADC_CFGR_DISCNUM_Pos (17U) #define ADC_CFGR_DISCNUM_Msk (0x7U << ADC_CFGR_DISCNUM_Pos) /*!< 0x000E0000 */ #define ADC_CFGR_DISCNUM ADC_CFGR_DISCNUM_Msk /*!< ADC group regular sequencer discontinuous number of ranks */ #define ADC_CFGR_DISCNUM_0 (0x1U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00020000 */ #define ADC_CFGR_DISCNUM_1 (0x2U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00040000 */ #define ADC_CFGR_DISCNUM_2 (0x4U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00080000 */ -#define ADC_CFGR_JDISCEN_Pos (20U) +#define ADC_CFGR_JDISCEN_Pos (20U) #define ADC_CFGR_JDISCEN_Msk (0x1U << ADC_CFGR_JDISCEN_Pos) /*!< 0x00100000 */ #define ADC_CFGR_JDISCEN ADC_CFGR_JDISCEN_Msk /*!< ADC group injected sequencer discontinuous mode */ -#define ADC_CFGR_JQM_Pos (21U) +#define ADC_CFGR_JQM_Pos (21U) #define ADC_CFGR_JQM_Msk (0x1U << ADC_CFGR_JQM_Pos) /*!< 0x00200000 */ #define ADC_CFGR_JQM ADC_CFGR_JQM_Msk /*!< ADC group injected contexts queue mode */ -#define ADC_CFGR_AWD1SGL_Pos (22U) +#define ADC_CFGR_AWD1SGL_Pos (22U) #define ADC_CFGR_AWD1SGL_Msk (0x1U << ADC_CFGR_AWD1SGL_Pos) /*!< 0x00400000 */ #define ADC_CFGR_AWD1SGL ADC_CFGR_AWD1SGL_Msk /*!< ADC analog watchdog 1 monitoring a single channel or all channels */ -#define ADC_CFGR_AWD1EN_Pos (23U) +#define ADC_CFGR_AWD1EN_Pos (23U) #define ADC_CFGR_AWD1EN_Msk (0x1U << ADC_CFGR_AWD1EN_Pos) /*!< 0x00800000 */ #define ADC_CFGR_AWD1EN ADC_CFGR_AWD1EN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group regular */ -#define ADC_CFGR_JAWD1EN_Pos (24U) +#define ADC_CFGR_JAWD1EN_Pos (24U) #define ADC_CFGR_JAWD1EN_Msk (0x1U << ADC_CFGR_JAWD1EN_Pos) /*!< 0x01000000 */ #define ADC_CFGR_JAWD1EN ADC_CFGR_JAWD1EN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group injected */ -#define ADC_CFGR_JAUTO_Pos (25U) +#define ADC_CFGR_JAUTO_Pos (25U) #define ADC_CFGR_JAUTO_Msk (0x1U << ADC_CFGR_JAUTO_Pos) /*!< 0x02000000 */ #define ADC_CFGR_JAUTO ADC_CFGR_JAUTO_Msk /*!< ADC group injected automatic trigger mode */ -#define ADC_CFGR_AWD1CH_Pos (26U) +#define ADC_CFGR_AWD1CH_Pos (26U) #define ADC_CFGR_AWD1CH_Msk (0x1FU << ADC_CFGR_AWD1CH_Pos) /*!< 0x7C000000 */ #define ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_Msk /*!< ADC analog watchdog 1 monitored channel selection */ #define ADC_CFGR_AWD1CH_0 (0x01U << ADC_CFGR_AWD1CH_Pos) /*!< 0x04000000 */ @@ -1360,26 +1355,26 @@ typedef struct #define ADC_CFGR_AWD1CH_3 (0x08U << ADC_CFGR_AWD1CH_Pos) /*!< 0x20000000 */ #define ADC_CFGR_AWD1CH_4 (0x10U << ADC_CFGR_AWD1CH_Pos) /*!< 0x40000000 */ -#define ADC_CFGR_JQDIS_Pos (31U) +#define ADC_CFGR_JQDIS_Pos (31U) #define ADC_CFGR_JQDIS_Msk (0x1U << ADC_CFGR_JQDIS_Pos) /*!< 0x80000000 */ #define ADC_CFGR_JQDIS ADC_CFGR_JQDIS_Msk /*!< ADC group injected contexts queue disable */ /******************** Bit definition for ADC_CFGR2 register *****************/ -#define ADC_CFGR2_ROVSE_Pos (0U) +#define ADC_CFGR2_ROVSE_Pos (0U) #define ADC_CFGR2_ROVSE_Msk (0x1U << ADC_CFGR2_ROVSE_Pos) /*!< 0x00000001 */ #define ADC_CFGR2_ROVSE ADC_CFGR2_ROVSE_Msk /*!< ADC oversampler enable on scope ADC group regular */ -#define ADC_CFGR2_JOVSE_Pos (1U) +#define ADC_CFGR2_JOVSE_Pos (1U) #define ADC_CFGR2_JOVSE_Msk (0x1U << ADC_CFGR2_JOVSE_Pos) /*!< 0x00000002 */ #define ADC_CFGR2_JOVSE ADC_CFGR2_JOVSE_Msk /*!< ADC oversampler enable on scope ADC group injected */ -#define ADC_CFGR2_OVSR_Pos (2U) +#define ADC_CFGR2_OVSR_Pos (2U) #define ADC_CFGR2_OVSR_Msk (0x7U << ADC_CFGR2_OVSR_Pos) /*!< 0x0000001C */ #define ADC_CFGR2_OVSR ADC_CFGR2_OVSR_Msk /*!< ADC oversampling ratio */ #define ADC_CFGR2_OVSR_0 (0x1U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000004 */ #define ADC_CFGR2_OVSR_1 (0x2U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000008 */ #define ADC_CFGR2_OVSR_2 (0x4U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000010 */ -#define ADC_CFGR2_OVSS_Pos (5U) +#define ADC_CFGR2_OVSS_Pos (5U) #define ADC_CFGR2_OVSS_Msk (0xFU << ADC_CFGR2_OVSS_Pos) /*!< 0x000001E0 */ #define ADC_CFGR2_OVSS ADC_CFGR2_OVSS_Msk /*!< ADC oversampling shift */ #define ADC_CFGR2_OVSS_0 (0x1U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000020 */ @@ -1387,78 +1382,78 @@ typedef struct #define ADC_CFGR2_OVSS_2 (0x4U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000080 */ #define ADC_CFGR2_OVSS_3 (0x8U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000100 */ -#define ADC_CFGR2_TROVS_Pos (9U) +#define ADC_CFGR2_TROVS_Pos (9U) #define ADC_CFGR2_TROVS_Msk (0x1U << ADC_CFGR2_TROVS_Pos) /*!< 0x00000200 */ #define ADC_CFGR2_TROVS ADC_CFGR2_TROVS_Msk /*!< ADC oversampling discontinuous mode (triggered mode) for ADC group regular */ -#define ADC_CFGR2_ROVSM_Pos (10U) +#define ADC_CFGR2_ROVSM_Pos (10U) #define ADC_CFGR2_ROVSM_Msk (0x1U << ADC_CFGR2_ROVSM_Pos) /*!< 0x00000400 */ #define ADC_CFGR2_ROVSM ADC_CFGR2_ROVSM_Msk /*!< ADC oversampling mode managing interlaced conversions of ADC group regular and group injected */ /******************** Bit definition for ADC_SMPR1 register *****************/ -#define ADC_SMPR1_SMP0_Pos (0U) +#define ADC_SMPR1_SMP0_Pos (0U) #define ADC_SMPR1_SMP0_Msk (0x7U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000007 */ #define ADC_SMPR1_SMP0 ADC_SMPR1_SMP0_Msk /*!< ADC channel 0 sampling time selection */ #define ADC_SMPR1_SMP0_0 (0x1U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000001 */ #define ADC_SMPR1_SMP0_1 (0x2U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000002 */ #define ADC_SMPR1_SMP0_2 (0x4U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000004 */ -#define ADC_SMPR1_SMP1_Pos (3U) +#define ADC_SMPR1_SMP1_Pos (3U) #define ADC_SMPR1_SMP1_Msk (0x7U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000038 */ #define ADC_SMPR1_SMP1 ADC_SMPR1_SMP1_Msk /*!< ADC channel 1 sampling time selection */ #define ADC_SMPR1_SMP1_0 (0x1U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000008 */ #define ADC_SMPR1_SMP1_1 (0x2U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000010 */ #define ADC_SMPR1_SMP1_2 (0x4U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000020 */ -#define ADC_SMPR1_SMP2_Pos (6U) +#define ADC_SMPR1_SMP2_Pos (6U) #define ADC_SMPR1_SMP2_Msk (0x7U << ADC_SMPR1_SMP2_Pos) /*!< 0x000001C0 */ #define ADC_SMPR1_SMP2 ADC_SMPR1_SMP2_Msk /*!< ADC channel 2 sampling time selection */ #define ADC_SMPR1_SMP2_0 (0x1U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000040 */ #define ADC_SMPR1_SMP2_1 (0x2U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000080 */ #define ADC_SMPR1_SMP2_2 (0x4U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000100 */ -#define ADC_SMPR1_SMP3_Pos (9U) +#define ADC_SMPR1_SMP3_Pos (9U) #define ADC_SMPR1_SMP3_Msk (0x7U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000E00 */ #define ADC_SMPR1_SMP3 ADC_SMPR1_SMP3_Msk /*!< ADC channel 3 sampling time selection */ #define ADC_SMPR1_SMP3_0 (0x1U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000200 */ #define ADC_SMPR1_SMP3_1 (0x2U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000400 */ #define ADC_SMPR1_SMP3_2 (0x4U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000800 */ -#define ADC_SMPR1_SMP4_Pos (12U) +#define ADC_SMPR1_SMP4_Pos (12U) #define ADC_SMPR1_SMP4_Msk (0x7U << ADC_SMPR1_SMP4_Pos) /*!< 0x00007000 */ #define ADC_SMPR1_SMP4 ADC_SMPR1_SMP4_Msk /*!< ADC channel 4 sampling time selection */ #define ADC_SMPR1_SMP4_0 (0x1U << ADC_SMPR1_SMP4_Pos) /*!< 0x00001000 */ #define ADC_SMPR1_SMP4_1 (0x2U << ADC_SMPR1_SMP4_Pos) /*!< 0x00002000 */ #define ADC_SMPR1_SMP4_2 (0x4U << ADC_SMPR1_SMP4_Pos) /*!< 0x00004000 */ -#define ADC_SMPR1_SMP5_Pos (15U) +#define ADC_SMPR1_SMP5_Pos (15U) #define ADC_SMPR1_SMP5_Msk (0x7U << ADC_SMPR1_SMP5_Pos) /*!< 0x00038000 */ #define ADC_SMPR1_SMP5 ADC_SMPR1_SMP5_Msk /*!< ADC channel 5 sampling time selection */ #define ADC_SMPR1_SMP5_0 (0x1U << ADC_SMPR1_SMP5_Pos) /*!< 0x00008000 */ #define ADC_SMPR1_SMP5_1 (0x2U << ADC_SMPR1_SMP5_Pos) /*!< 0x00010000 */ #define ADC_SMPR1_SMP5_2 (0x4U << ADC_SMPR1_SMP5_Pos) /*!< 0x00020000 */ -#define ADC_SMPR1_SMP6_Pos (18U) +#define ADC_SMPR1_SMP6_Pos (18U) #define ADC_SMPR1_SMP6_Msk (0x7U << ADC_SMPR1_SMP6_Pos) /*!< 0x001C0000 */ #define ADC_SMPR1_SMP6 ADC_SMPR1_SMP6_Msk /*!< ADC channel 6 sampling time selection */ #define ADC_SMPR1_SMP6_0 (0x1U << ADC_SMPR1_SMP6_Pos) /*!< 0x00040000 */ #define ADC_SMPR1_SMP6_1 (0x2U << ADC_SMPR1_SMP6_Pos) /*!< 0x00080000 */ #define ADC_SMPR1_SMP6_2 (0x4U << ADC_SMPR1_SMP6_Pos) /*!< 0x00100000 */ -#define ADC_SMPR1_SMP7_Pos (21U) +#define ADC_SMPR1_SMP7_Pos (21U) #define ADC_SMPR1_SMP7_Msk (0x7U << ADC_SMPR1_SMP7_Pos) /*!< 0x00E00000 */ #define ADC_SMPR1_SMP7 ADC_SMPR1_SMP7_Msk /*!< ADC channel 7 sampling time selection */ #define ADC_SMPR1_SMP7_0 (0x1U << ADC_SMPR1_SMP7_Pos) /*!< 0x00200000 */ #define ADC_SMPR1_SMP7_1 (0x2U << ADC_SMPR1_SMP7_Pos) /*!< 0x00400000 */ #define ADC_SMPR1_SMP7_2 (0x4U << ADC_SMPR1_SMP7_Pos) /*!< 0x00800000 */ -#define ADC_SMPR1_SMP8_Pos (24U) +#define ADC_SMPR1_SMP8_Pos (24U) #define ADC_SMPR1_SMP8_Msk (0x7U << ADC_SMPR1_SMP8_Pos) /*!< 0x07000000 */ #define ADC_SMPR1_SMP8 ADC_SMPR1_SMP8_Msk /*!< ADC channel 8 sampling time selection */ #define ADC_SMPR1_SMP8_0 (0x1U << ADC_SMPR1_SMP8_Pos) /*!< 0x01000000 */ #define ADC_SMPR1_SMP8_1 (0x2U << ADC_SMPR1_SMP8_Pos) /*!< 0x02000000 */ #define ADC_SMPR1_SMP8_2 (0x4U << ADC_SMPR1_SMP8_Pos) /*!< 0x04000000 */ -#define ADC_SMPR1_SMP9_Pos (27U) +#define ADC_SMPR1_SMP9_Pos (27U) #define ADC_SMPR1_SMP9_Msk (0x7U << ADC_SMPR1_SMP9_Pos) /*!< 0x38000000 */ #define ADC_SMPR1_SMP9 ADC_SMPR1_SMP9_Msk /*!< ADC channel 9 sampling time selection */ #define ADC_SMPR1_SMP9_0 (0x1U << ADC_SMPR1_SMP9_Pos) /*!< 0x08000000 */ @@ -1466,63 +1461,63 @@ typedef struct #define ADC_SMPR1_SMP9_2 (0x4U << ADC_SMPR1_SMP9_Pos) /*!< 0x20000000 */ /******************** Bit definition for ADC_SMPR2 register *****************/ -#define ADC_SMPR2_SMP10_Pos (0U) +#define ADC_SMPR2_SMP10_Pos (0U) #define ADC_SMPR2_SMP10_Msk (0x7U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000007 */ #define ADC_SMPR2_SMP10 ADC_SMPR2_SMP10_Msk /*!< ADC channel 10 sampling time selection */ #define ADC_SMPR2_SMP10_0 (0x1U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000001 */ #define ADC_SMPR2_SMP10_1 (0x2U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000002 */ #define ADC_SMPR2_SMP10_2 (0x4U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000004 */ -#define ADC_SMPR2_SMP11_Pos (3U) +#define ADC_SMPR2_SMP11_Pos (3U) #define ADC_SMPR2_SMP11_Msk (0x7U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000038 */ #define ADC_SMPR2_SMP11 ADC_SMPR2_SMP11_Msk /*!< ADC channel 11 sampling time selection */ #define ADC_SMPR2_SMP11_0 (0x1U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000008 */ #define ADC_SMPR2_SMP11_1 (0x2U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000010 */ #define ADC_SMPR2_SMP11_2 (0x4U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000020 */ -#define ADC_SMPR2_SMP12_Pos (6U) +#define ADC_SMPR2_SMP12_Pos (6U) #define ADC_SMPR2_SMP12_Msk (0x7U << ADC_SMPR2_SMP12_Pos) /*!< 0x000001C0 */ #define ADC_SMPR2_SMP12 ADC_SMPR2_SMP12_Msk /*!< ADC channel 12 sampling time selection */ #define ADC_SMPR2_SMP12_0 (0x1U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000040 */ #define ADC_SMPR2_SMP12_1 (0x2U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000080 */ #define ADC_SMPR2_SMP12_2 (0x4U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000100 */ -#define ADC_SMPR2_SMP13_Pos (9U) +#define ADC_SMPR2_SMP13_Pos (9U) #define ADC_SMPR2_SMP13_Msk (0x7U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000E00 */ #define ADC_SMPR2_SMP13 ADC_SMPR2_SMP13_Msk /*!< ADC channel 13 sampling time selection */ #define ADC_SMPR2_SMP13_0 (0x1U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000200 */ #define ADC_SMPR2_SMP13_1 (0x2U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000400 */ #define ADC_SMPR2_SMP13_2 (0x4U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000800 */ -#define ADC_SMPR2_SMP14_Pos (12U) +#define ADC_SMPR2_SMP14_Pos (12U) #define ADC_SMPR2_SMP14_Msk (0x7U << ADC_SMPR2_SMP14_Pos) /*!< 0x00007000 */ #define ADC_SMPR2_SMP14 ADC_SMPR2_SMP14_Msk /*!< ADC channel 14 sampling time selection */ #define ADC_SMPR2_SMP14_0 (0x1U << ADC_SMPR2_SMP14_Pos) /*!< 0x00001000 */ #define ADC_SMPR2_SMP14_1 (0x2U << ADC_SMPR2_SMP14_Pos) /*!< 0x00002000 */ #define ADC_SMPR2_SMP14_2 (0x4U << ADC_SMPR2_SMP14_Pos) /*!< 0x00004000 */ -#define ADC_SMPR2_SMP15_Pos (15U) +#define ADC_SMPR2_SMP15_Pos (15U) #define ADC_SMPR2_SMP15_Msk (0x7U << ADC_SMPR2_SMP15_Pos) /*!< 0x00038000 */ #define ADC_SMPR2_SMP15 ADC_SMPR2_SMP15_Msk /*!< ADC channel 15 sampling time selection */ #define ADC_SMPR2_SMP15_0 (0x1U << ADC_SMPR2_SMP15_Pos) /*!< 0x00008000 */ #define ADC_SMPR2_SMP15_1 (0x2U << ADC_SMPR2_SMP15_Pos) /*!< 0x00010000 */ #define ADC_SMPR2_SMP15_2 (0x4U << ADC_SMPR2_SMP15_Pos) /*!< 0x00020000 */ -#define ADC_SMPR2_SMP16_Pos (18U) +#define ADC_SMPR2_SMP16_Pos (18U) #define ADC_SMPR2_SMP16_Msk (0x7U << ADC_SMPR2_SMP16_Pos) /*!< 0x001C0000 */ #define ADC_SMPR2_SMP16 ADC_SMPR2_SMP16_Msk /*!< ADC channel 16 sampling time selection */ #define ADC_SMPR2_SMP16_0 (0x1U << ADC_SMPR2_SMP16_Pos) /*!< 0x00040000 */ #define ADC_SMPR2_SMP16_1 (0x2U << ADC_SMPR2_SMP16_Pos) /*!< 0x00080000 */ #define ADC_SMPR2_SMP16_2 (0x4U << ADC_SMPR2_SMP16_Pos) /*!< 0x00100000 */ -#define ADC_SMPR2_SMP17_Pos (21U) +#define ADC_SMPR2_SMP17_Pos (21U) #define ADC_SMPR2_SMP17_Msk (0x7U << ADC_SMPR2_SMP17_Pos) /*!< 0x00E00000 */ #define ADC_SMPR2_SMP17 ADC_SMPR2_SMP17_Msk /*!< ADC channel 17 sampling time selection */ #define ADC_SMPR2_SMP17_0 (0x1U << ADC_SMPR2_SMP17_Pos) /*!< 0x00200000 */ #define ADC_SMPR2_SMP17_1 (0x2U << ADC_SMPR2_SMP17_Pos) /*!< 0x00400000 */ #define ADC_SMPR2_SMP17_2 (0x4U << ADC_SMPR2_SMP17_Pos) /*!< 0x00800000 */ -#define ADC_SMPR2_SMP18_Pos (24U) +#define ADC_SMPR2_SMP18_Pos (24U) #define ADC_SMPR2_SMP18_Msk (0x7U << ADC_SMPR2_SMP18_Pos) /*!< 0x07000000 */ #define ADC_SMPR2_SMP18 ADC_SMPR2_SMP18_Msk /*!< ADC channel 18 sampling time selection */ #define ADC_SMPR2_SMP18_0 (0x1U << ADC_SMPR2_SMP18_Pos) /*!< 0x01000000 */ @@ -1530,7 +1525,7 @@ typedef struct #define ADC_SMPR2_SMP18_2 (0x4U << ADC_SMPR2_SMP18_Pos) /*!< 0x04000000 */ /******************** Bit definition for ADC_TR1 register *******************/ -#define ADC_TR1_LT1_Pos (0U) +#define ADC_TR1_LT1_Pos (0U) #define ADC_TR1_LT1_Msk (0xFFFU << ADC_TR1_LT1_Pos) /*!< 0x00000FFF */ #define ADC_TR1_LT1 ADC_TR1_LT1_Msk /*!< ADC analog watchdog 1 threshold low */ #define ADC_TR1_LT1_0 (0x001U << ADC_TR1_LT1_Pos) /*!< 0x00000001 */ @@ -1546,7 +1541,7 @@ typedef struct #define ADC_TR1_LT1_10 (0x400U << ADC_TR1_LT1_Pos) /*!< 0x00000400 */ #define ADC_TR1_LT1_11 (0x800U << ADC_TR1_LT1_Pos) /*!< 0x00000800 */ -#define ADC_TR1_HT1_Pos (16U) +#define ADC_TR1_HT1_Pos (16U) #define ADC_TR1_HT1_Msk (0xFFFU << ADC_TR1_HT1_Pos) /*!< 0x0FFF0000 */ #define ADC_TR1_HT1 ADC_TR1_HT1_Msk /*!< ADC Analog watchdog 1 threshold high */ #define ADC_TR1_HT1_0 (0x001U << ADC_TR1_HT1_Pos) /*!< 0x00010000 */ @@ -1563,7 +1558,7 @@ typedef struct #define ADC_TR1_HT1_11 (0x800U << ADC_TR1_HT1_Pos) /*!< 0x08000000 */ /******************** Bit definition for ADC_TR2 register *******************/ -#define ADC_TR2_LT2_Pos (0U) +#define ADC_TR2_LT2_Pos (0U) #define ADC_TR2_LT2_Msk (0xFFU << ADC_TR2_LT2_Pos) /*!< 0x000000FF */ #define ADC_TR2_LT2 ADC_TR2_LT2_Msk /*!< ADC analog watchdog 2 threshold low */ #define ADC_TR2_LT2_0 (0x01U << ADC_TR2_LT2_Pos) /*!< 0x00000001 */ @@ -1575,7 +1570,7 @@ typedef struct #define ADC_TR2_LT2_6 (0x40U << ADC_TR2_LT2_Pos) /*!< 0x00000040 */ #define ADC_TR2_LT2_7 (0x80U << ADC_TR2_LT2_Pos) /*!< 0x00000080 */ -#define ADC_TR2_HT2_Pos (16U) +#define ADC_TR2_HT2_Pos (16U) #define ADC_TR2_HT2_Msk (0xFFU << ADC_TR2_HT2_Pos) /*!< 0x00FF0000 */ #define ADC_TR2_HT2 ADC_TR2_HT2_Msk /*!< ADC analog watchdog 2 threshold high */ #define ADC_TR2_HT2_0 (0x01U << ADC_TR2_HT2_Pos) /*!< 0x00010000 */ @@ -1588,7 +1583,7 @@ typedef struct #define ADC_TR2_HT2_7 (0x80U << ADC_TR2_HT2_Pos) /*!< 0x00800000 */ /******************** Bit definition for ADC_TR3 register *******************/ -#define ADC_TR3_LT3_Pos (0U) +#define ADC_TR3_LT3_Pos (0U) #define ADC_TR3_LT3_Msk (0xFFU << ADC_TR3_LT3_Pos) /*!< 0x000000FF */ #define ADC_TR3_LT3 ADC_TR3_LT3_Msk /*!< ADC analog watchdog 3 threshold low */ #define ADC_TR3_LT3_0 (0x01U << ADC_TR3_LT3_Pos) /*!< 0x00000001 */ @@ -1600,7 +1595,7 @@ typedef struct #define ADC_TR3_LT3_6 (0x40U << ADC_TR3_LT3_Pos) /*!< 0x00000040 */ #define ADC_TR3_LT3_7 (0x80U << ADC_TR3_LT3_Pos) /*!< 0x00000080 */ -#define ADC_TR3_HT3_Pos (16U) +#define ADC_TR3_HT3_Pos (16U) #define ADC_TR3_HT3_Msk (0xFFU << ADC_TR3_HT3_Pos) /*!< 0x00FF0000 */ #define ADC_TR3_HT3 ADC_TR3_HT3_Msk /*!< ADC analog watchdog 3 threshold high */ #define ADC_TR3_HT3_0 (0x01U << ADC_TR3_HT3_Pos) /*!< 0x00010000 */ @@ -1613,7 +1608,7 @@ typedef struct #define ADC_TR3_HT3_7 (0x80U << ADC_TR3_HT3_Pos) /*!< 0x00800000 */ /******************** Bit definition for ADC_SQR1 register ******************/ -#define ADC_SQR1_L_Pos (0U) +#define ADC_SQR1_L_Pos (0U) #define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x0000000F */ #define ADC_SQR1_L ADC_SQR1_L_Msk /*!< ADC group regular sequencer scan length */ #define ADC_SQR1_L_0 (0x1U << ADC_SQR1_L_Pos) /*!< 0x00000001 */ @@ -1621,7 +1616,7 @@ typedef struct #define ADC_SQR1_L_2 (0x4U << ADC_SQR1_L_Pos) /*!< 0x00000004 */ #define ADC_SQR1_L_3 (0x8U << ADC_SQR1_L_Pos) /*!< 0x00000008 */ -#define ADC_SQR1_SQ1_Pos (6U) +#define ADC_SQR1_SQ1_Pos (6U) #define ADC_SQR1_SQ1_Msk (0x1FU << ADC_SQR1_SQ1_Pos) /*!< 0x000007C0 */ #define ADC_SQR1_SQ1 ADC_SQR1_SQ1_Msk /*!< ADC group regular sequencer rank 1 */ #define ADC_SQR1_SQ1_0 (0x01U << ADC_SQR1_SQ1_Pos) /*!< 0x00000040 */ @@ -1630,7 +1625,7 @@ typedef struct #define ADC_SQR1_SQ1_3 (0x08U << ADC_SQR1_SQ1_Pos) /*!< 0x00000200 */ #define ADC_SQR1_SQ1_4 (0x10U << ADC_SQR1_SQ1_Pos) /*!< 0x00000400 */ -#define ADC_SQR1_SQ2_Pos (12U) +#define ADC_SQR1_SQ2_Pos (12U) #define ADC_SQR1_SQ2_Msk (0x1FU << ADC_SQR1_SQ2_Pos) /*!< 0x0001F000 */ #define ADC_SQR1_SQ2 ADC_SQR1_SQ2_Msk /*!< ADC group regular sequencer rank 2 */ #define ADC_SQR1_SQ2_0 (0x01U << ADC_SQR1_SQ2_Pos) /*!< 0x00001000 */ @@ -1639,7 +1634,7 @@ typedef struct #define ADC_SQR1_SQ2_3 (0x08U << ADC_SQR1_SQ2_Pos) /*!< 0x00008000 */ #define ADC_SQR1_SQ2_4 (0x10U << ADC_SQR1_SQ2_Pos) /*!< 0x00010000 */ -#define ADC_SQR1_SQ3_Pos (18U) +#define ADC_SQR1_SQ3_Pos (18U) #define ADC_SQR1_SQ3_Msk (0x1FU << ADC_SQR1_SQ3_Pos) /*!< 0x007C0000 */ #define ADC_SQR1_SQ3 ADC_SQR1_SQ3_Msk /*!< ADC group regular sequencer rank 3 */ #define ADC_SQR1_SQ3_0 (0x01U << ADC_SQR1_SQ3_Pos) /*!< 0x00040000 */ @@ -1648,7 +1643,7 @@ typedef struct #define ADC_SQR1_SQ3_3 (0x08U << ADC_SQR1_SQ3_Pos) /*!< 0x00200000 */ #define ADC_SQR1_SQ3_4 (0x10U << ADC_SQR1_SQ3_Pos) /*!< 0x00400000 */ -#define ADC_SQR1_SQ4_Pos (24U) +#define ADC_SQR1_SQ4_Pos (24U) #define ADC_SQR1_SQ4_Msk (0x1FU << ADC_SQR1_SQ4_Pos) /*!< 0x1F000000 */ #define ADC_SQR1_SQ4 ADC_SQR1_SQ4_Msk /*!< ADC group regular sequencer rank 4 */ #define ADC_SQR1_SQ4_0 (0x01U << ADC_SQR1_SQ4_Pos) /*!< 0x01000000 */ @@ -1658,7 +1653,7 @@ typedef struct #define ADC_SQR1_SQ4_4 (0x10U << ADC_SQR1_SQ4_Pos) /*!< 0x10000000 */ /******************** Bit definition for ADC_SQR2 register ******************/ -#define ADC_SQR2_SQ5_Pos (0U) +#define ADC_SQR2_SQ5_Pos (0U) #define ADC_SQR2_SQ5_Msk (0x1FU << ADC_SQR2_SQ5_Pos) /*!< 0x0000001F */ #define ADC_SQR2_SQ5 ADC_SQR2_SQ5_Msk /*!< ADC group regular sequencer rank 5 */ #define ADC_SQR2_SQ5_0 (0x01U << ADC_SQR2_SQ5_Pos) /*!< 0x00000001 */ @@ -1667,7 +1662,7 @@ typedef struct #define ADC_SQR2_SQ5_3 (0x08U << ADC_SQR2_SQ5_Pos) /*!< 0x00000008 */ #define ADC_SQR2_SQ5_4 (0x10U << ADC_SQR2_SQ5_Pos) /*!< 0x00000010 */ -#define ADC_SQR2_SQ6_Pos (6U) +#define ADC_SQR2_SQ6_Pos (6U) #define ADC_SQR2_SQ6_Msk (0x1FU << ADC_SQR2_SQ6_Pos) /*!< 0x000007C0 */ #define ADC_SQR2_SQ6 ADC_SQR2_SQ6_Msk /*!< ADC group regular sequencer rank 6 */ #define ADC_SQR2_SQ6_0 (0x01U << ADC_SQR2_SQ6_Pos) /*!< 0x00000040 */ @@ -1676,7 +1671,7 @@ typedef struct #define ADC_SQR2_SQ6_3 (0x08U << ADC_SQR2_SQ6_Pos) /*!< 0x00000200 */ #define ADC_SQR2_SQ6_4 (0x10U << ADC_SQR2_SQ6_Pos) /*!< 0x00000400 */ -#define ADC_SQR2_SQ7_Pos (12U) +#define ADC_SQR2_SQ7_Pos (12U) #define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0001F000 */ #define ADC_SQR2_SQ7 ADC_SQR2_SQ7_Msk /*!< ADC group regular sequencer rank 7 */ #define ADC_SQR2_SQ7_0 (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00001000 */ @@ -1685,7 +1680,7 @@ typedef struct #define ADC_SQR2_SQ7_3 (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00008000 */ #define ADC_SQR2_SQ7_4 (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00010000 */ -#define ADC_SQR2_SQ8_Pos (18U) +#define ADC_SQR2_SQ8_Pos (18U) #define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x007C0000 */ #define ADC_SQR2_SQ8 ADC_SQR2_SQ8_Msk /*!< ADC group regular sequencer rank 8 */ #define ADC_SQR2_SQ8_0 (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00040000 */ @@ -1694,7 +1689,7 @@ typedef struct #define ADC_SQR2_SQ8_3 (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00200000 */ #define ADC_SQR2_SQ8_4 (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00400000 */ -#define ADC_SQR2_SQ9_Pos (24U) +#define ADC_SQR2_SQ9_Pos (24U) #define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x1F000000 */ #define ADC_SQR2_SQ9 ADC_SQR2_SQ9_Msk /*!< ADC group regular sequencer rank 9 */ #define ADC_SQR2_SQ9_0 (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x01000000 */ @@ -1704,7 +1699,7 @@ typedef struct #define ADC_SQR2_SQ9_4 (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x10000000 */ /******************** Bit definition for ADC_SQR3 register ******************/ -#define ADC_SQR3_SQ10_Pos (0U) +#define ADC_SQR3_SQ10_Pos (0U) #define ADC_SQR3_SQ10_Msk (0x1FU << ADC_SQR3_SQ10_Pos) /*!< 0x0000001F */ #define ADC_SQR3_SQ10 ADC_SQR3_SQ10_Msk /*!< ADC group regular sequencer rank 10 */ #define ADC_SQR3_SQ10_0 (0x01U << ADC_SQR3_SQ10_Pos) /*!< 0x00000001 */ @@ -1713,7 +1708,7 @@ typedef struct #define ADC_SQR3_SQ10_3 (0x08U << ADC_SQR3_SQ10_Pos) /*!< 0x00000008 */ #define ADC_SQR3_SQ10_4 (0x10U << ADC_SQR3_SQ10_Pos) /*!< 0x00000010 */ -#define ADC_SQR3_SQ11_Pos (6U) +#define ADC_SQR3_SQ11_Pos (6U) #define ADC_SQR3_SQ11_Msk (0x1FU << ADC_SQR3_SQ11_Pos) /*!< 0x000007C0 */ #define ADC_SQR3_SQ11 ADC_SQR3_SQ11_Msk /*!< ADC group regular sequencer rank 11 */ #define ADC_SQR3_SQ11_0 (0x01U << ADC_SQR3_SQ11_Pos) /*!< 0x00000040 */ @@ -1722,7 +1717,7 @@ typedef struct #define ADC_SQR3_SQ11_3 (0x08U << ADC_SQR3_SQ11_Pos) /*!< 0x00000200 */ #define ADC_SQR3_SQ11_4 (0x10U << ADC_SQR3_SQ11_Pos) /*!< 0x00000400 */ -#define ADC_SQR3_SQ12_Pos (12U) +#define ADC_SQR3_SQ12_Pos (12U) #define ADC_SQR3_SQ12_Msk (0x1FU << ADC_SQR3_SQ12_Pos) /*!< 0x0001F000 */ #define ADC_SQR3_SQ12 ADC_SQR3_SQ12_Msk /*!< ADC group regular sequencer rank 12 */ #define ADC_SQR3_SQ12_0 (0x01U << ADC_SQR3_SQ12_Pos) /*!< 0x00001000 */ @@ -1731,7 +1726,7 @@ typedef struct #define ADC_SQR3_SQ12_3 (0x08U << ADC_SQR3_SQ12_Pos) /*!< 0x00008000 */ #define ADC_SQR3_SQ12_4 (0x10U << ADC_SQR3_SQ12_Pos) /*!< 0x00010000 */ -#define ADC_SQR3_SQ13_Pos (18U) +#define ADC_SQR3_SQ13_Pos (18U) #define ADC_SQR3_SQ13_Msk (0x1FU << ADC_SQR3_SQ13_Pos) /*!< 0x007C0000 */ #define ADC_SQR3_SQ13 ADC_SQR3_SQ13_Msk /*!< ADC group regular sequencer rank 13 */ #define ADC_SQR3_SQ13_0 (0x01U << ADC_SQR3_SQ13_Pos) /*!< 0x00040000 */ @@ -1740,7 +1735,7 @@ typedef struct #define ADC_SQR3_SQ13_3 (0x08U << ADC_SQR3_SQ13_Pos) /*!< 0x00200000 */ #define ADC_SQR3_SQ13_4 (0x10U << ADC_SQR3_SQ13_Pos) /*!< 0x00400000 */ -#define ADC_SQR3_SQ14_Pos (24U) +#define ADC_SQR3_SQ14_Pos (24U) #define ADC_SQR3_SQ14_Msk (0x1FU << ADC_SQR3_SQ14_Pos) /*!< 0x1F000000 */ #define ADC_SQR3_SQ14 ADC_SQR3_SQ14_Msk /*!< ADC group regular sequencer rank 14 */ #define ADC_SQR3_SQ14_0 (0x01U << ADC_SQR3_SQ14_Pos) /*!< 0x01000000 */ @@ -1750,7 +1745,7 @@ typedef struct #define ADC_SQR3_SQ14_4 (0x10U << ADC_SQR3_SQ14_Pos) /*!< 0x10000000 */ /******************** Bit definition for ADC_SQR4 register ******************/ -#define ADC_SQR4_SQ15_Pos (0U) +#define ADC_SQR4_SQ15_Pos (0U) #define ADC_SQR4_SQ15_Msk (0x1FU << ADC_SQR4_SQ15_Pos) /*!< 0x0000001F */ #define ADC_SQR4_SQ15 ADC_SQR4_SQ15_Msk /*!< ADC group regular sequencer rank 15 */ #define ADC_SQR4_SQ15_0 (0x01U << ADC_SQR4_SQ15_Pos) /*!< 0x00000001 */ @@ -1759,7 +1754,7 @@ typedef struct #define ADC_SQR4_SQ15_3 (0x08U << ADC_SQR4_SQ15_Pos) /*!< 0x00000008 */ #define ADC_SQR4_SQ15_4 (0x10U << ADC_SQR4_SQ15_Pos) /*!< 0x00000010 */ -#define ADC_SQR4_SQ16_Pos (6U) +#define ADC_SQR4_SQ16_Pos (6U) #define ADC_SQR4_SQ16_Msk (0x1FU << ADC_SQR4_SQ16_Pos) /*!< 0x000007C0 */ #define ADC_SQR4_SQ16 ADC_SQR4_SQ16_Msk /*!< ADC group regular sequencer rank 16 */ #define ADC_SQR4_SQ16_0 (0x01U << ADC_SQR4_SQ16_Pos) /*!< 0x00000040 */ @@ -1769,7 +1764,7 @@ typedef struct #define ADC_SQR4_SQ16_4 (0x10U << ADC_SQR4_SQ16_Pos) /*!< 0x00000400 */ /******************** Bit definition for ADC_DR register ********************/ -#define ADC_DR_RDATA_Pos (0U) +#define ADC_DR_RDATA_Pos (0U) #define ADC_DR_RDATA_Msk (0xFFFFU << ADC_DR_RDATA_Pos) /*!< 0x0000FFFF */ #define ADC_DR_RDATA ADC_DR_RDATA_Msk /*!< ADC group regular conversion data */ #define ADC_DR_RDATA_0 (0x0001U << ADC_DR_RDATA_Pos) /*!< 0x00000001 */ @@ -1790,13 +1785,13 @@ typedef struct #define ADC_DR_RDATA_15 (0x8000U << ADC_DR_RDATA_Pos) /*!< 0x00008000 */ /******************** Bit definition for ADC_JSQR register ******************/ -#define ADC_JSQR_JL_Pos (0U) +#define ADC_JSQR_JL_Pos (0U) #define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00000003 */ #define ADC_JSQR_JL ADC_JSQR_JL_Msk /*!< ADC group injected sequencer scan length */ #define ADC_JSQR_JL_0 (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00000001 */ #define ADC_JSQR_JL_1 (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00000002 */ -#define ADC_JSQR_JEXTSEL_Pos (2U) +#define ADC_JSQR_JEXTSEL_Pos (2U) #define ADC_JSQR_JEXTSEL_Msk (0xFU << ADC_JSQR_JEXTSEL_Pos) /*!< 0x0000003C */ #define ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_Msk /*!< ADC group injected external trigger source */ #define ADC_JSQR_JEXTSEL_0 (0x1U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000004 */ @@ -1804,13 +1799,13 @@ typedef struct #define ADC_JSQR_JEXTSEL_2 (0x4U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000010 */ #define ADC_JSQR_JEXTSEL_3 (0x8U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000020 */ -#define ADC_JSQR_JEXTEN_Pos (6U) +#define ADC_JSQR_JEXTEN_Pos (6U) #define ADC_JSQR_JEXTEN_Msk (0x3U << ADC_JSQR_JEXTEN_Pos) /*!< 0x000000C0 */ #define ADC_JSQR_JEXTEN ADC_JSQR_JEXTEN_Msk /*!< ADC group injected external trigger polarity */ #define ADC_JSQR_JEXTEN_0 (0x1U << ADC_JSQR_JEXTEN_Pos) /*!< 0x00000040 */ #define ADC_JSQR_JEXTEN_1 (0x2U << ADC_JSQR_JEXTEN_Pos) /*!< 0x00000080 */ -#define ADC_JSQR_JSQ1_Pos (8U) +#define ADC_JSQR_JSQ1_Pos (8U) #define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x00001F00 */ #define ADC_JSQR_JSQ1 ADC_JSQR_JSQ1_Msk /*!< ADC group injected sequencer rank 1 */ #define ADC_JSQR_JSQ1_0 (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000100 */ @@ -1819,7 +1814,7 @@ typedef struct #define ADC_JSQR_JSQ1_3 (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000800 */ #define ADC_JSQR_JSQ1_4 (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00001000 */ -#define ADC_JSQR_JSQ2_Pos (14U) +#define ADC_JSQR_JSQ2_Pos (14U) #define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x0007C000 */ #define ADC_JSQR_JSQ2 ADC_JSQR_JSQ2_Msk /*!< ADC group injected sequencer rank 2 */ #define ADC_JSQR_JSQ2_0 (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00004000 */ @@ -1828,7 +1823,7 @@ typedef struct #define ADC_JSQR_JSQ2_3 (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00020000 */ #define ADC_JSQR_JSQ2_4 (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00040000 */ -#define ADC_JSQR_JSQ3_Pos (20U) +#define ADC_JSQR_JSQ3_Pos (20U) #define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x01F00000 */ #define ADC_JSQR_JSQ3 ADC_JSQR_JSQ3_Msk /*!< ADC group injected sequencer rank 3 */ #define ADC_JSQR_JSQ3_0 (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00100000 */ @@ -1837,7 +1832,7 @@ typedef struct #define ADC_JSQR_JSQ3_3 (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00800000 */ #define ADC_JSQR_JSQ3_4 (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x01000000 */ -#define ADC_JSQR_JSQ4_Pos (26U) +#define ADC_JSQR_JSQ4_Pos (26U) #define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x7C000000 */ #define ADC_JSQR_JSQ4 ADC_JSQR_JSQ4_Msk /*!< ADC group injected sequencer rank 4 */ #define ADC_JSQR_JSQ4_0 (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x04000000 */ @@ -1847,7 +1842,7 @@ typedef struct #define ADC_JSQR_JSQ4_4 (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x40000000 */ /******************** Bit definition for ADC_OFR1 register ******************/ -#define ADC_OFR1_OFFSET1_Pos (0U) +#define ADC_OFR1_OFFSET1_Pos (0U) #define ADC_OFR1_OFFSET1_Msk (0xFFFU << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000FFF */ #define ADC_OFR1_OFFSET1 ADC_OFR1_OFFSET1_Msk /*!< ADC offset number 1 offset level */ #define ADC_OFR1_OFFSET1_0 (0x001U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000001 */ @@ -1863,7 +1858,7 @@ typedef struct #define ADC_OFR1_OFFSET1_10 (0x400U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000400 */ #define ADC_OFR1_OFFSET1_11 (0x800U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000800 */ -#define ADC_OFR1_OFFSET1_CH_Pos (26U) +#define ADC_OFR1_OFFSET1_CH_Pos (26U) #define ADC_OFR1_OFFSET1_CH_Msk (0x1FU << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x7C000000 */ #define ADC_OFR1_OFFSET1_CH ADC_OFR1_OFFSET1_CH_Msk /*!< ADC offset number 1 channel selection */ #define ADC_OFR1_OFFSET1_CH_0 (0x01U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x04000000 */ @@ -1872,12 +1867,12 @@ typedef struct #define ADC_OFR1_OFFSET1_CH_3 (0x08U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x20000000 */ #define ADC_OFR1_OFFSET1_CH_4 (0x10U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x40000000 */ -#define ADC_OFR1_OFFSET1_EN_Pos (31U) +#define ADC_OFR1_OFFSET1_EN_Pos (31U) #define ADC_OFR1_OFFSET1_EN_Msk (0x1U << ADC_OFR1_OFFSET1_EN_Pos) /*!< 0x80000000 */ #define ADC_OFR1_OFFSET1_EN ADC_OFR1_OFFSET1_EN_Msk /*!< ADC offset number 1 enable */ /******************** Bit definition for ADC_OFR2 register ******************/ -#define ADC_OFR2_OFFSET2_Pos (0U) +#define ADC_OFR2_OFFSET2_Pos (0U) #define ADC_OFR2_OFFSET2_Msk (0xFFFU << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000FFF */ #define ADC_OFR2_OFFSET2 ADC_OFR2_OFFSET2_Msk /*!< ADC offset number 2 offset level */ #define ADC_OFR2_OFFSET2_0 (0x001U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000001 */ @@ -1893,7 +1888,7 @@ typedef struct #define ADC_OFR2_OFFSET2_10 (0x400U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000400 */ #define ADC_OFR2_OFFSET2_11 (0x800U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000800 */ -#define ADC_OFR2_OFFSET2_CH_Pos (26U) +#define ADC_OFR2_OFFSET2_CH_Pos (26U) #define ADC_OFR2_OFFSET2_CH_Msk (0x1FU << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x7C000000 */ #define ADC_OFR2_OFFSET2_CH ADC_OFR2_OFFSET2_CH_Msk /*!< ADC offset number 2 channel selection */ #define ADC_OFR2_OFFSET2_CH_0 (0x01U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x04000000 */ @@ -1902,12 +1897,12 @@ typedef struct #define ADC_OFR2_OFFSET2_CH_3 (0x08U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x20000000 */ #define ADC_OFR2_OFFSET2_CH_4 (0x10U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x40000000 */ -#define ADC_OFR2_OFFSET2_EN_Pos (31U) +#define ADC_OFR2_OFFSET2_EN_Pos (31U) #define ADC_OFR2_OFFSET2_EN_Msk (0x1U << ADC_OFR2_OFFSET2_EN_Pos) /*!< 0x80000000 */ #define ADC_OFR2_OFFSET2_EN ADC_OFR2_OFFSET2_EN_Msk /*!< ADC offset number 2 enable */ /******************** Bit definition for ADC_OFR3 register ******************/ -#define ADC_OFR3_OFFSET3_Pos (0U) +#define ADC_OFR3_OFFSET3_Pos (0U) #define ADC_OFR3_OFFSET3_Msk (0xFFFU << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000FFF */ #define ADC_OFR3_OFFSET3 ADC_OFR3_OFFSET3_Msk /*!< ADC offset number 3 offset level */ #define ADC_OFR3_OFFSET3_0 (0x001U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000001 */ @@ -1923,7 +1918,7 @@ typedef struct #define ADC_OFR3_OFFSET3_10 (0x400U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000400 */ #define ADC_OFR3_OFFSET3_11 (0x800U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000800 */ -#define ADC_OFR3_OFFSET3_CH_Pos (26U) +#define ADC_OFR3_OFFSET3_CH_Pos (26U) #define ADC_OFR3_OFFSET3_CH_Msk (0x1FU << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x7C000000 */ #define ADC_OFR3_OFFSET3_CH ADC_OFR3_OFFSET3_CH_Msk /*!< ADC offset number 3 channel selection */ #define ADC_OFR3_OFFSET3_CH_0 (0x01U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x04000000 */ @@ -1932,12 +1927,12 @@ typedef struct #define ADC_OFR3_OFFSET3_CH_3 (0x08U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x20000000 */ #define ADC_OFR3_OFFSET3_CH_4 (0x10U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x40000000 */ -#define ADC_OFR3_OFFSET3_EN_Pos (31U) +#define ADC_OFR3_OFFSET3_EN_Pos (31U) #define ADC_OFR3_OFFSET3_EN_Msk (0x1U << ADC_OFR3_OFFSET3_EN_Pos) /*!< 0x80000000 */ #define ADC_OFR3_OFFSET3_EN ADC_OFR3_OFFSET3_EN_Msk /*!< ADC offset number 3 enable */ /******************** Bit definition for ADC_OFR4 register ******************/ -#define ADC_OFR4_OFFSET4_Pos (0U) +#define ADC_OFR4_OFFSET4_Pos (0U) #define ADC_OFR4_OFFSET4_Msk (0xFFFU << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000FFF */ #define ADC_OFR4_OFFSET4 ADC_OFR4_OFFSET4_Msk /*!< ADC offset number 4 offset level */ #define ADC_OFR4_OFFSET4_0 (0x001U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000001 */ @@ -1953,7 +1948,7 @@ typedef struct #define ADC_OFR4_OFFSET4_10 (0x400U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000400 */ #define ADC_OFR4_OFFSET4_11 (0x800U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000800 */ -#define ADC_OFR4_OFFSET4_CH_Pos (26U) +#define ADC_OFR4_OFFSET4_CH_Pos (26U) #define ADC_OFR4_OFFSET4_CH_Msk (0x1FU << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x7C000000 */ #define ADC_OFR4_OFFSET4_CH ADC_OFR4_OFFSET4_CH_Msk /*!< ADC offset number 4 channel selection */ #define ADC_OFR4_OFFSET4_CH_0 (0x01U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x04000000 */ @@ -1962,12 +1957,12 @@ typedef struct #define ADC_OFR4_OFFSET4_CH_3 (0x08U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x20000000 */ #define ADC_OFR4_OFFSET4_CH_4 (0x10U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x40000000 */ -#define ADC_OFR4_OFFSET4_EN_Pos (31U) +#define ADC_OFR4_OFFSET4_EN_Pos (31U) #define ADC_OFR4_OFFSET4_EN_Msk (0x1U << ADC_OFR4_OFFSET4_EN_Pos) /*!< 0x80000000 */ #define ADC_OFR4_OFFSET4_EN ADC_OFR4_OFFSET4_EN_Msk /*!< ADC offset number 4 enable */ /******************** Bit definition for ADC_JDR1 register ******************/ -#define ADC_JDR1_JDATA_Pos (0U) +#define ADC_JDR1_JDATA_Pos (0U) #define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */ #define ADC_JDR1_JDATA ADC_JDR1_JDATA_Msk /*!< ADC group injected sequencer rank 1 conversion data */ #define ADC_JDR1_JDATA_0 (0x0001U << ADC_JDR1_JDATA_Pos) /*!< 0x00000001 */ @@ -1988,7 +1983,7 @@ typedef struct #define ADC_JDR1_JDATA_15 (0x8000U << ADC_JDR1_JDATA_Pos) /*!< 0x00008000 */ /******************** Bit definition for ADC_JDR2 register ******************/ -#define ADC_JDR2_JDATA_Pos (0U) +#define ADC_JDR2_JDATA_Pos (0U) #define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */ #define ADC_JDR2_JDATA ADC_JDR2_JDATA_Msk /*!< ADC group injected sequencer rank 2 conversion data */ #define ADC_JDR2_JDATA_0 (0x0001U << ADC_JDR2_JDATA_Pos) /*!< 0x00000001 */ @@ -2009,7 +2004,7 @@ typedef struct #define ADC_JDR2_JDATA_15 (0x8000U << ADC_JDR2_JDATA_Pos) /*!< 0x00008000 */ /******************** Bit definition for ADC_JDR3 register ******************/ -#define ADC_JDR3_JDATA_Pos (0U) +#define ADC_JDR3_JDATA_Pos (0U) #define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */ #define ADC_JDR3_JDATA ADC_JDR3_JDATA_Msk /*!< ADC group injected sequencer rank 3 conversion data */ #define ADC_JDR3_JDATA_0 (0x0001U << ADC_JDR3_JDATA_Pos) /*!< 0x00000001 */ @@ -2030,7 +2025,7 @@ typedef struct #define ADC_JDR3_JDATA_15 (0x8000U << ADC_JDR3_JDATA_Pos) /*!< 0x00008000 */ /******************** Bit definition for ADC_JDR4 register ******************/ -#define ADC_JDR4_JDATA_Pos (0U) +#define ADC_JDR4_JDATA_Pos (0U) #define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */ #define ADC_JDR4_JDATA ADC_JDR4_JDATA_Msk /*!< ADC group injected sequencer rank 4 conversion data */ #define ADC_JDR4_JDATA_0 (0x0001U << ADC_JDR4_JDATA_Pos) /*!< 0x00000001 */ @@ -2051,7 +2046,7 @@ typedef struct #define ADC_JDR4_JDATA_15 (0x8000U << ADC_JDR4_JDATA_Pos) /*!< 0x00008000 */ /******************** Bit definition for ADC_AWD2CR register ****************/ -#define ADC_AWD2CR_AWD2CH_Pos (0U) +#define ADC_AWD2CR_AWD2CH_Pos (0U) #define ADC_AWD2CR_AWD2CH_Msk (0x7FFFFU << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x0007FFFF */ #define ADC_AWD2CR_AWD2CH ADC_AWD2CR_AWD2CH_Msk /*!< ADC analog watchdog 2 monitored channel selection */ #define ADC_AWD2CR_AWD2CH_0 (0x00001U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000001 */ @@ -2075,7 +2070,7 @@ typedef struct #define ADC_AWD2CR_AWD2CH_18 (0x40000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00040000 */ /******************** Bit definition for ADC_AWD3CR register ****************/ -#define ADC_AWD3CR_AWD3CH_Pos (0U) +#define ADC_AWD3CR_AWD3CH_Pos (0U) #define ADC_AWD3CR_AWD3CH_Msk (0x7FFFFU << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x0007FFFF */ #define ADC_AWD3CR_AWD3CH ADC_AWD3CR_AWD3CH_Msk /*!< ADC analog watchdog 3 monitored channel selection */ #define ADC_AWD3CR_AWD3CH_0 (0x00001U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000001 */ @@ -2099,7 +2094,7 @@ typedef struct #define ADC_AWD3CR_AWD3CH_18 (0x40000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00040000 */ /******************** Bit definition for ADC_DIFSEL register ****************/ -#define ADC_DIFSEL_DIFSEL_Pos (0U) +#define ADC_DIFSEL_DIFSEL_Pos (0U) #define ADC_DIFSEL_DIFSEL_Msk (0x7FFFFU << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x0007FFFF */ #define ADC_DIFSEL_DIFSEL ADC_DIFSEL_DIFSEL_Msk /*!< ADC channel differential or single-ended mode */ #define ADC_DIFSEL_DIFSEL_0 (0x00001U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000001 */ @@ -2123,7 +2118,7 @@ typedef struct #define ADC_DIFSEL_DIFSEL_18 (0x40000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00040000 */ /******************** Bit definition for ADC_CALFACT register ***************/ -#define ADC_CALFACT_CALFACT_S_Pos (0U) +#define ADC_CALFACT_CALFACT_S_Pos (0U) #define ADC_CALFACT_CALFACT_S_Msk (0x7FU << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x0000007F */ #define ADC_CALFACT_CALFACT_S ADC_CALFACT_CALFACT_S_Msk /*!< ADC calibration factor in single-ended mode */ #define ADC_CALFACT_CALFACT_S_0 (0x01U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000001 */ @@ -2134,7 +2129,7 @@ typedef struct #define ADC_CALFACT_CALFACT_S_5 (0x20U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000020 */ #define ADC_CALFACT_CALFACT_S_6 (0x40U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000040 */ -#define ADC_CALFACT_CALFACT_D_Pos (16U) +#define ADC_CALFACT_CALFACT_D_Pos (16U) #define ADC_CALFACT_CALFACT_D_Msk (0x7FU << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x007F0000 */ #define ADC_CALFACT_CALFACT_D ADC_CALFACT_CALFACT_D_Msk /*!< ADC calibration factor in differential mode */ #define ADC_CALFACT_CALFACT_D_0 (0x01U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00010000 */ @@ -2147,13 +2142,13 @@ typedef struct /************************* ADC Common registers *****************************/ /******************** Bit definition for ADC_CCR register *******************/ -#define ADC_CCR_CKMODE_Pos (16U) +#define ADC_CCR_CKMODE_Pos (16U) #define ADC_CCR_CKMODE_Msk (0x3U << ADC_CCR_CKMODE_Pos) /*!< 0x00030000 */ #define ADC_CCR_CKMODE ADC_CCR_CKMODE_Msk /*!< ADC common clock source and prescaler (prescaler only for clock source synchronous) */ #define ADC_CCR_CKMODE_0 (0x1U << ADC_CCR_CKMODE_Pos) /*!< 0x00010000 */ #define ADC_CCR_CKMODE_1 (0x2U << ADC_CCR_CKMODE_Pos) /*!< 0x00020000 */ -#define ADC_CCR_PRESC_Pos (18U) +#define ADC_CCR_PRESC_Pos (18U) #define ADC_CCR_PRESC_Msk (0xFU << ADC_CCR_PRESC_Pos) /*!< 0x003C0000 */ #define ADC_CCR_PRESC ADC_CCR_PRESC_Msk /*!< ADC common clock prescaler, only for clock source asynchronous */ #define ADC_CCR_PRESC_0 (0x1U << ADC_CCR_PRESC_Pos) /*!< 0x00040000 */ @@ -2161,13 +2156,13 @@ typedef struct #define ADC_CCR_PRESC_2 (0x4U << ADC_CCR_PRESC_Pos) /*!< 0x00100000 */ #define ADC_CCR_PRESC_3 (0x8U << ADC_CCR_PRESC_Pos) /*!< 0x00200000 */ -#define ADC_CCR_VREFEN_Pos (22U) +#define ADC_CCR_VREFEN_Pos (22U) #define ADC_CCR_VREFEN_Msk (0x1U << ADC_CCR_VREFEN_Pos) /*!< 0x00400000 */ #define ADC_CCR_VREFEN ADC_CCR_VREFEN_Msk /*!< ADC internal path to VrefInt enable */ -#define ADC_CCR_TSEN_Pos (23U) +#define ADC_CCR_TSEN_Pos (23U) #define ADC_CCR_TSEN_Msk (0x1U << ADC_CCR_TSEN_Pos) /*!< 0x00800000 */ #define ADC_CCR_TSEN ADC_CCR_TSEN_Msk /*!< ADC internal path to temperature sensor enable */ -#define ADC_CCR_VBATEN_Pos (24U) +#define ADC_CCR_VBATEN_Pos (24U) #define ADC_CCR_VBATEN_Msk (0x1U << ADC_CCR_VBATEN_Pos) /*!< 0x01000000 */ #define ADC_CCR_VBATEN ADC_CCR_VBATEN_Msk /*!< ADC internal path to battery voltage enable */ @@ -2178,3475 +2173,3475 @@ typedef struct /******************************************************************************/ /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!*/ -#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Pos (14U) #define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ #define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ -#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Pos (16U) #define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ #define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ -#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Pos (30U) #define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ #define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ /***************** Bit definition for DAC_SWTRIGR register ******************/ -#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) #define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ #define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!

Update History

-

V1.7.1 +

V1.8.2 +/ 22-December-2017

+

Main +Changes

+
  • Maintenance Release of HAL and Low Layer drivers
+

   

HAL Drivers changes

+
  • HAL CAN driver
    • Rework of HAL CAN driver (compatibility break) 
      • A +new HAL CAN driver has been redesigned with new APIs, to bypass +limitations on CAN Tx/Rx FIFO management present with previous HAL CAN +driver version.
      • The +new HAL CAN driver is the recommended version. It is located as usual +in Drivers/STM32L4xx_HAL_Driver/Src and +Drivers/STM32L4xx_HAL_Driver/Inc folders. It can be enabled through +switch HAL_CAN_MODULE_ENABLED in stm32l4xx_hal_conf.h
      • The +legacy HAL CAN +driver is also present in the release in +Drivers/STM32L4xx_HAL_Driver/Src/Legacy and +Drivers/STM32L4xx_HAL_Driver/Inc/Legacy +folders for software compatibility reasons. Its usage is not +recommended as deprecated. It can however be enabled through +switch HAL_CAN_LEGACY_MODULE_ENABLED in +stm32l4xx_hal_conf.h
      • Short migration guide:
        • Fields of CAN_InitTypeDef structure are renamed : 
          • SJW +to SyncJumpWidth, BS1 to TimeSeg1, BS2 to TimeSeg2, TTCM to +TimeTriggeredMode, ABOM to AutoBusOff, AWUM to AutoWakeUp, NART to +AutoRetransmission (inversed), RFLM to ReceiveFifoLocked and TXFP to +TransmitFifoPriority
        • HAL_CAN_Init() is split into both HAL_CAN_Init() and HAL_CAN_Start()
        • HAL_CAN_Transmit() +is replaced by HAL_CAN_AddTxMessage() to place Tx request, then +HAL_CAN_GetTxMailboxesFreeLevel() for polling until completion
        • HAL_CAN_Transmit_IT() +is replaced by HAL_CAN_ActivateNotification() to enable transmission with interrupt mode, then HAL_CAN_AddTxMessage() to place Tx request
        • HAL_CAN_Receive() +is replaced by HAL_CAN_GetRxFifoFillLevel() for polling until reception, then HAL_CAN_GetRxMessage() to get Rx message
        • HAL_CAN_Receive_IT() +is replaced by HAL_CAN_ActivateNotification() to enable reception with interrupt mode, then HAL_CAN_GetRxMessage() in the receive callback to get Rx message
        • HAL_CAN_Sleep() is renamed to HAL_CAN_RequestSleep()
        • HAL_CAN_TxCpltCallback() is split into HAL_CAN_TxMailbox0CompleteCallback(), HAL_CAN_TxMailbox1CompleteCallback() and HAL_CAN_TxMailbox2CompleteCallback()
        • HAL_CAN_RxCpltCallback() is split into HAL_CAN_RxFifo0MsgPendingCallback() and HAL_CAN_RxFifo1MsgPendingCallback()
      • More complete "how to use the new driver" is detailed in the driver header section itself
  • HAL CORTEX driver
    • HAL_MPU_Enable() and HAL_MPU_Disable() functions moved to stm32l4xx_hal_cortex.c
  • HAL CRC driver
    • Fix GCC warning 
  • HAL FLASH driver
    • HAL_FLASH_Unlock() updated to not return HAL_ERROR if flash is already unlocked 
  • HAL OSPI driver
    • Cleanup IO Manager ports
  • HAL RCC driver
    • RCC_RTCCLKSOURCE_NO_CLK renamed to RCC_RTCCLKSOURCE_NONE
    • HAL_RCC_DeInit() updates
      • Clear of status flags
      • Wait for PLLs disable flags to clear PLLs configuration registers
    • Fix MISRA C-2004 rule 10.6 ('U' suffix)
  • HAL TIM driver
    • Fix MISRA C-2004 rule 10.6 ('U' suffix)

LL Drivers changes

+
  • LL CRC driver
    • Fix GCC warning
  • LL RCC driver
    • Add LL_RCC_PLL_SetMainSource() and LL_RCC_HSI_IsEnabledInStopMode() APIs
    • LL_RCC_DeInit() update
      • Clear of status flags
      • Wait for PLLs disable flags to clear PLLs configuration registers
    • Fix IS_LL_RCC_I2C_CLKSOURCE() assert macro

V1.8.1 +/ 13-October-2017

+

Main +Changes

+
  • Maintenance Release of HAL and Low Layer drivers
+

   

HAL Drivers changes

+
  • HAL generic driver
    • Fix compilation issue with ARMCC --gnu option on __packed declaration in stm32l4xx_hal_def.h
  • HAL ADC driver
    • Reuse LL ADC definitions
    • Fix MISRA C-2004 rule 19.10
  • HAL DSI driver
    • Fix +timing issue at highest optimization level on IAR on DSI Host, DSI +Wrapper, DSI PLL and DSI regulator enable/disable macros 
    • Add macro __HAL_DSI_RESET_HANDLE_STATE()
  • HAL FLASH driver
    • HAL_FLASH_Unlock() shall not return an error when Flash already unlocked
  • HAL I2C driver
    • Fix race condition in HAL_I2C_Master_Receive() and HAL_I2C_Slave_Receive()
    • Fix RD_WRN bit management in case of I2C_NO_STARTSTOP request
  • HAL OSPI driver
    • Add note on limitation of HAL_OSPI_AutoPolling() and HAL_OSPI_AutoPolling_IT() usage in octal mode (cf. Errata Sheet)
    • Fix compilation warning in C++
  • HAL QSPI driver
    • Fix MISRA C-2004 rules 10.3, 11.4 and 12.6
  • HAL RCC driver
    • Update +SDMMC1 clock source selection on STM32L4Rx/STM32L4Sx devices to +select PLL divider "P" output instead of internal multiplexor on +MSI, HSI48, PLLSAI1 or PLL "Q" outputs as SDMMC1 kernel clock source
    • Fix __HAL_RCC_GPIOB_IS_CLK_ENABLED() macro definition
  • HAL SDMMC driver
    • Fix management of peripheral flags depending on command or data transfers.
  • HAL SMBUS driver
    • Fix RD_WRN bit management in case of SMBUS_NO_STARTSTOP request

LL Drivers changes

+
  • LL DAC driver
    • Add missing definition for external triggers from TIM and LPTIM instances
  • LL DMA2D driver
    • Fix CodeSonar warning in LL_DMA2D_StructInit()
  • LL I2C driver
    • Fix RD_WRN bit management in case of LL_I2C_GENERATE_NOSTARTSTOP request in LL_I2C_HandleTransfer()
  • LL RCC driver
    • Update SDMMC1 clock +source selection on STM32L4Rx/STM32L4Sx devices to select PLL divider +"P" output instead of internal multiplexor on MSI, HSI48, PLLSAI1 or +PLL "Q" outputs as SDMMC1 kernel clock source
      • Add LL_RCC_SetSDMMCKernelClockSource(), LL_RCC_GetSDMMCKernelClockSource() and LL_RCC_GetSDMMCKernelClockFreq() APIs

V1.8.0 +/ 25-August-2017

+

Main +Changes

+ +
  • Release of HAL and Low Layer drivers to add support of STM32L4R5xx/STM32L4R7xx/STM32L4R9xx/ STM32L4S5xx/STM32L4S7xx/STM32L4S9xx devices
+
  • New OctoSPI, DSI, LTDC, GFXMMU peripherals supported in new HAL OSPI, HAL DSI, HAL LTDC and HAL GFXMMU drivers
  • Superset features device STM32L4S9xx API User Manual available (STM32L4S9xx_User_Manual.chm)  
   

HAL Drivers changes

+
  • HAL DSI driver (NEW):stm32l4xx_hal_dsi.h/.c files
  • HAL GFXMMU driver (NEW):stm32l4xx_hal_gfxmmu.h/.c files
  • HAL LTDC driver (NEW):stm32l4xx_hal_ltdc.h/.c and extension stm32l4xx_hal_ltdc_ex.h/.c files
  • HAL OSPI driver (NEW):stm32l4xx_hal_ospi.h/.c files
+
  • HAL generic driver
    • Add HAL_GetUIDw0(), HAL_GetUIDw1() and HAL_GetUIDw2() APIs
    • Default HAL_Delay() implementation updated to insure minimum requested delay
    • Add +__HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE() and +__HAL_SYSCFG_SRAM2_WRP_32_63_ENABLE() macros to set respectively SRAM2 +page protection attribute for page 0 to 31 and page 32 to 63
  • HAL CAN driver
    • Add FIFOs overrun error management (new error codes HAL_CAN_ERROR_FOV0 and HAL_CAN_ERROR_FOV1)
  • HAL CRYP driver
    • Fix zero padding in case of Data type
    • Fix phase setting related to payload suspension
    • Fix to not be too restrictive on input parameters in HAL_CRYPEx_AES_Auth() and  HAL_CRYPEx_AES_Auth_DMA()
  • HAL DAC driver
    • Fix Sample & Hold configuration in case of multi-channel
    • Rename DAC_HIGH_FREQUENCY_INTERFACE_MODE_ENABLE to DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ
  • HAL DMA driver
    • Fix DMAMUX synchronization signal configuration in HAL_DMAEx_ConfigMuxSync()
    • Support of DMAMUX1 peripheral via new DMA Extension APIs
      • HAL_DMAEx_ConfigMuxRequestGenerator()
      • HAL_DMAEx_EnableMuxRequestGenerator(), HAL_DMAEx_DisableMuxRequestGenerator()
      • HAL_DMAEx_ConfigMuxSync()
      • HAL_DMAEx_MUX_IRQHandler()
  • HAL DFSDM driver extension (new stm32l4xx_hal_dfsdm_ex.h/.c)
    • New APIs HAL_DFSDMEx_ChannelSetPulsesSkipping() and HAL_DFSDMEx_ChannelGetPulsesSkipping()
  • HAL DFSDM driver
    • Fix +cast issue to return possible negative value in +HAL_DFSDM_FilterGetRegularValue(), HAL_DFSDM_FilterGetInjectedValue(), +HAL_DFSDM_FilterGetExdMaxValue() and HAL_DFSDM_FilterGetExdMinValue()
  • HAL FLASH driver
    • Add new LVE pin management in HAL_FLASHEx_ConfigLVEPin()
    • Fix timeout issue in private FLASH_WaitForLastOperation() API
    • Fix error status of HAL_FLASHEx_OBProgram(
  • FMC driver
    • New field NBLSetupTime added in FMC_NORSRAM_InitTypeDef structure
    • New field DataHoldTime added in FMC_NORSRAM_TimingTypeDef structure
  • HAL HASH driver
    • Update of context swap mechanism implemented in HAL_HASH_DMAFeed_ProcessSuspend() when input data are fed to the IP by DMA
  • HAL HCD/PCD driver
    • Add support of STM32L4R5xx/STM32L4R7xx/STM32L4R9xx/ STM32L4S5xx/STM32L4S7xx/STM32L4S9xx devices
  • HAL IRDA driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • IRDA_InitTypeDef structure update to add ClockPrescaler parameter
  • HAL PCD driver
    • Fix USB PCD lock/unlock and flush TX fifo during device reset
  • HAL PWR driver
    • Add PWR_REGULATOR_VOLTAGE_SCALE1_BOOST new parameter value for HAL_PWREx_ControlVoltageScaling() to use higher supply voltage (1.28V) with main regulator voltage in range 1 above 80Mhz (maximum frequency equals to 120Mhz) for STM32L4Rx/STM32L4Sx devices  
    • Add +SRAM3 retention management APIs: HAL_PWREx_EnableSRAM3ContentRetention() and HAL_PWREx_DisableSRAM3ContentRetention()
    • Add DSI pins pull-down management
      • new HAL_PWREx_EnableDSIPinsPDActivation() and HAL_PWREx_DisableDSIPinsPDActivation() APIs
  • HAL RCC driver
    • Add clock management of new peripherals: DSI, GFXMMU, LTDC, OSPI1, OSPI2, OSPIM
    • Add OctoSPI peripherals clock source frequency computation in HAL_RCCEx_GetPeriphCLKFreq()
    • Fix issue with main PLL divider M value to allow 1 to 16 value range on STM32L4Rx/STM32L4Sx devices
    • Fix SDMMC1 clock source selection possibilities in HAL_RCCEx_PeriphCLKConfig(), __HAL_RCC_SDMMC1_CONFIG() and __HAL_RCC_GET_SDMMC1_SOURCE()
    • Fix HAL_RCCEx_GetPeriphCLKFreq() to take into account PLLSAI1 and PLLSAI2 divider M values (1 to 16 range) on STM32L4Rx/STM32L4Sx devices
    • Add undershoot/overshoot management in HAL_RCC_ClockConfig() when switching to/from system clock from main PLL above 80Mhz
  • HAL RNG driver
    • Add support of Clock Error detection and Bypass mode management in new RNG_InitTypeDef and HAL_RNG_Init() API
      • parameters ClockErrorDetection and BypassMode added in new RNG_InitTypeDef
  • HAL RTC driver
    • Fix HAL_RTC_Init() to wait for synchronization and avoid RTC registers access timing issues
  • HAL SAI driver
    • Add FIFO flush in HAL_SAI_DMAStop()
    • Fix HAL_SAI_Transmit_DMA() to follow the slave TX mode sequence described in the Reference Manual
  • HAL SD driver
    • Major rework of HAL SD driver aligned with STM32F7 series
      • BlockSize parameter removed in Read&Write block APIs since 512 byte size is always read&write.
  • HAL SMARTCARD driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • SMARTCARD_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new +HAL_SMARTCARDEx_EnableFifoMode(), HAL_SMARTCARDEx_DisableFifoMode(), +HAL_SMARTCARDEx_SetTxFifoThreshold(), HAL_SMARTCARDEx_SetRxFifoThreshold(), +HAL_SMARTCARDEx_RxFifoFullCallback() and HAL_SMARTCARDEx_TxFifoEmptyCallback() +APIs
  • HAL SMBUS driver
    • Add Analog and digital filter configuration APIs: HAL_SMBUS_ConfigAnalogFilter() and HAL_SMBUS_ConfigDigitalFilter() 
    • Add error management if occuring during STOP process
  • HAL SPI driver
    • Add control of RXFIFO emty at end of transmissing in Master transmission 2 lines mode
  • HAL SWPMI driver
    • Fix missing clock initialization before register update in HAL_SWPMI_Init()
  • HAL TIM driver
    • Add TIM_TIM1_ETR_GPIO and TIM_TIM8_ETR_GPIO definitions
    • Add TIM_TIM16_TI1_MSI, TIM_TIM16_TI1_HSE_32 and TIM_TIM16_TI1_MCO definitions for STM32L4Rx/STM32L4Sx
    • Add new AutoReloadPreload parameter in TIM_Base_InitTypeDef (user code impacted)
    • Fix wrong MOE disable conditions with new macro __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY()
  • HAL UART driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • UART_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new +HAL_UARTEx_EnableFifoMode(), HAL_UARTEx_DisableFifoMode(), +HAL_UARTEx_SetTxFifoThreshold(), HAL_UARTEx_SetRxFifoThreshold(), +HAL_UARTEx_RxFifoFullCallback() and HAL_UARTEx_TxFifoEmptyCallback() +APIs
    • Add SPI Slave mode management for STM32L4Rx/STM32L4Sx devices only
      • new HAL_UARTEx_EnableSlaveMode(), HAL_UARTEx_DisableSlaveMode() and HAL_UARTEx_ConfigNSS()
  • HAL USART driver (new stm32l4xx_hal_usart_ex.c)
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • USART_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new +HAL_USARTEx_EnableFifoMode(), HAL_USARTEx_DisableFifoMode(), +HAL_USARTEx_SetTxFifoThreshold(), HAL_USARTEx_SetRxFifoThreshold(), +HAL_USARTEx_RxFifoFullCallback() and HAL_USARTEx_TxFifoEmptyCallback() +APIs
    • Add SPI Slave mode management for STM32L4Rx/STM32L4Sx devices only
      • new HAL_USARTEx_EnableSlaveMode(), HAL_USARTEx_DisableSlaveMode() and HAL_USARTEx_ConfigNSS()

+

LL Drivers changes

  • LL DMAMUX driver (NEW):stm32l4xx_ll_dmamux.h
  • All LL drivers update to remove usage of CMSIS POSITION_VAL() macro and resort to xx_Pos position bit definition
  • LL ADC
    • Fix legacy APIs LL_ADC_REG_SetTrigSource() and LL_ADC_INJ_SetTrigSource()
  • LL BUS 
    • Add management of new peripherals: DSI, GFXMMU, LTDC, OSPI1, OSPI2, OSPIM
  • LL DMA
    • Fix simple write register access to clear DMA flags in LL_DMA_ClearFlag_XXX() APIs
  • LL DMA2D
    • Add management of output swapping mode (regular or bytes two by two) and line offset mode (pixel or byte)
  • LL EXTI 
    • Add management of EXTI line 40 (I2C4)
  • LL I2C
    • Fix LL_I2C_Init() to not set OAEN1 bit when Own Address 1 value is 0
  • LL LPUART / LL USART
    • Add management of Rx FIFO and Tx FIFO
  • LL PWR
    • Add +SRAM3 retention management APIs 
      • LL_PWR_EnableSRAM3Retention(), +LL_PWR_DisableSRAM3Retention() and LL_PWR_IsEnabledSRAM3Retention()
    • Add voltage range 1 boost mode APIs
      • LL_PWR_EnableRange1BoostMode(), LL_PWR_DisableRange1BoostMode() and LL_PWR_IsEnabledRange1BoostMode()
    • For compatibility purpose accross STM32 series, rename LL_PWR_IsActiveFlag_VOSF() to LL_PWR_IsActiveFlag_VOS()
    • Add DSI pins pull-down management
      • new LL_PWR_EnableDSIPinsPDActivation(), LL_PWR_DisableDSIPinsPDActivation() and LL_PWR_IsEnabledDSIPinsPDActivation() APIs
  • LL RCC
    • Add management of new peripheral clock sources for DSI, LTDC, OSPI1, OSPI2 and SDMMC
    • Add +new definitions for main PLL divider M values above LL_RCC_PLLM_DIV_8 +and up to LL_RCC_PLLM_DIV_16 for STM32L4Rx/STM32L4Sx devices
    • Fix +in __LL_RCC_CALC_PLLCLK_SAI_FREQ(), __LL_RCC_CALC_PLLSAI1_SAI_FREQ(), +__LL_RCC_CALC_PLLSAI1_48M_FREQ(), __LL_RCC_CALC_PLLSAI1_ADC_FREQ(), +__LL_RCC_CALC_PLLSAI2_SAI_FREQ()
    • Fix +in LL_RCC_PLLSAI1_ConfigDomain_48M(), +LL_RCC_PLLSAI1_ConfigDomain_SAI(), LL_RCC_PLLSAI1_ConfigDomain_ADC(), +LL_RCC_PLLSAI1_GetP(), LL_RCC_PLLSAI2_ConfigDomain_SAI() and +LL_RCC_PLLSAI2_GetP()
    • Fix LL_RCC_GetSDMMCClockFreq() to take into account all SDMMC1 possible clock sources
    • Add HSI48 oscillator clock source value for RNG and USB: 
      • LL_RCC_RNG_CLKSOURCE_HSI48 and update LL_RCC_GetRNGClockFreq()
      • LL_RCC_USB_CLKSOURCE_HSI48 and update LL_RCC_GetUSBClockFreq()
    • General fixes
      • Renaming of RCC_DFSDM1CLKSOURCE_PCLK to RCC_DFSDM1CLKSOURCE_PCLK2
      • Renaming of RCC_SWPMI1CLKSOURCE_PCLK to RCC_SWPMI1CLKSOURCE_PCLK1
      • Renaming of RCC_LPTIMxCLKSOURCE_PCLK to RCC_LPTIMxCLKSOURCE_PCLK1
  • LL RNG
    • Add Clock Error detection and Bypass mode management in new LL_RNG_InitTypeDef and new LL_RNG_Init() API
      • new LL_RNG_EnableClkErrorDetect(), LL_RNG_DisableClkErrorDetect() and LL_RNG_IsEnableClkErrorDetect()
      • new LL_RNG_EnableBypassMode(), LL_RNG_DisableBypassMode() and LL_RNG_IsEnabledBypassMode
  • LL RTC
    • LL_RTC_TIME_Get() and LL_RTC_DATE_Get() implementations optimization (single register read access)
  • LL SYSTEM
    • Add SRAM2 page write protection APIs: LL_SYSCFG_EnableSRAM2PageWRP_0_31() and LL_SYSCFG_EnableSRAM2PageWRP_32_63()
  • LL TIM
    • Fix definition of TIM break input polarity (inverse values LL_TIM_BKIN_POLARITY_LOW / LL_TIM_BKIN_POLARITY_HIGH)
    • Fix LL_TIM_EnableUpdateEvent(), LL_TIM_DisableUpdateEvent() and LL_TIM_IsEnabledUpdateEvent()
  • LL UTILS
    • Add management of new flash latency ranges in UTILS_SetFlashLatency()
    • Add undershoot management when switching to system clock from main PLL above 80Mhz in LL_PLL_ConfigSystemClock_MSI(), LL_PLL_ConfigSystemClock_HSI() and LL_PLL_ConfigSystemClock_HSE()

V1.7.2 +/ 16-June-2017

+

Main +Changes

+
  • Maintenance Release of HAL and Low Layer drivers

+

HAL Drivers changes

+
  • HAL CAN driver
    • Add overrun error management by the error callback
  • HAL CRC driver
    • Update of HAL_CRCEx_Polynomial_Set() to return an error when a non-supported polynomial length is passed as parameter
  • HAL CRYP driver
    • Update zero padding management with respect to data type
    • Phase setting and comments correction in case of payload phase suspension
    • Correct input parameters tests in HAL_CRYPEx_AES_Auth() and HAL_CRYPEx_AES_Auth_DMA() APIs
    • Correct interruptions and IP enabling flags setting for key derivation in IT mode
  • HAL DCMI driver
    • Comments correction to describe image size management when larger than maximum authorized DMA transfer size
  • HAL FLASH driver
    • Add software work-around in HAL_FLASH_Unlock() to clear OPTVERR flag on STM32L45x/L46x parts when initially improperly raised
    • Correct timeout issue in FLASH_WaitForLastOperation()
  • HAL HASH driver
    • Update of context swap mechanism implemented in HAL_HASH_DMAFeed_ProcessSuspend() when input data are fed to the IP by DMA

LL Drivers changes

+
  • LL RCC
    • Correct duplication of aRCC_APBAHBPrescTable
  • LL RTC
    • Simplication of implementation of function LL_RTC_DATE_Get()
  • LL TIM
    • Fix LL_TIM_EnableUpdateEvent(), LL_TIM_DisableUpdateEvent() and LL_TIM_IsEnabledUpdateEvent()

V1.7.1 / 21-April-2017

Main Changes

diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32_hal_legacy.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32_hal_legacy.h index 901e9a1c15..0ae9d0b248 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32_hal_legacy.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32_hal_legacy.h @@ -2,9 +2,7 @@ ****************************************************************************** * @file stm32_hal_legacy.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 - * @brief This file contains aliases definition for the STM32Cube HAL constants + * @brief This file contains aliases definition for the STM32Cube HAL constants * macros and functions maintained for legacy purpose. ****************************************************************************** * @attention @@ -60,7 +58,7 @@ /** * @} */ - + /** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose * @{ */ @@ -92,10 +90,10 @@ #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 #define ADC_CLOCKPRESCALER_PCLK_DIV6 ADC_CLOCK_SYNC_PCLK_DIV6 #define ADC_CLOCKPRESCALER_PCLK_DIV8 ADC_CLOCK_SYNC_PCLK_DIV8 -#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO -#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 -#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO -#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 +#define ADC_EXTERNALTRIG0_T6_TRGO ADC_EXTERNALTRIGCONV_T6_TRGO +#define ADC_EXTERNALTRIG1_T21_CC2 ADC_EXTERNALTRIGCONV_T21_CC2 +#define ADC_EXTERNALTRIG2_T2_TRGO ADC_EXTERNALTRIGCONV_T2_TRGO +#define ADC_EXTERNALTRIG3_T2_CC4 ADC_EXTERNALTRIGCONV_T2_CC4 #define ADC_EXTERNALTRIG4_T22_TRGO ADC_EXTERNALTRIGCONV_T22_TRGO #define ADC_EXTERNALTRIG7_EXT_IT11 ADC_EXTERNALTRIGCONV_EXT_IT11 #define ADC_CLOCK_ASYNC ADC_CLOCK_ASYNC_DIV1 @@ -111,21 +109,21 @@ #define HAL_ADC_STATE_EOC_INJ HAL_ADC_STATE_INJ_EOC #define HAL_ADC_STATE_ERROR HAL_ADC_STATE_ERROR_INTERNAL #define HAL_ADC_STATE_BUSY HAL_ADC_STATE_BUSY_INTERNAL -#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 +#define HAL_ADC_STATE_AWD HAL_ADC_STATE_AWD1 /** * @} */ - + /** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose * @{ - */ - -#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG + */ + +#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG /** * @} - */ - + */ + /** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose * @{ */ @@ -138,7 +136,9 @@ #define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5 #define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6 #define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7 -#define COMP_LPTIMCONNECTION_ENABLED COMP_LPTIMCONNECTION_IN1_ENABLED /*!< COMPX output is connected to LPTIM input 1 */ +#if defined(STM32L0) +#define COMP_LPTIMCONNECTION_ENABLED ((uint32_t)0x00000003U) /*!< COMPX output generic naming: connected to LPTIM input 1 for COMP1, LPTIM input 2 for COMP2 */ +#endif #define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR #if defined(STM32F373xC) || defined(STM32F378xx) #define COMP_OUTPUT_TIM3IC1 COMP_OUTPUT_COMP1_TIM3IC1 @@ -154,7 +154,7 @@ #define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4 #define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5 #define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6 - + #define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT #define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT #define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT @@ -226,7 +226,7 @@ /** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose * @{ */ - + #define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE #define CRC_OUTPUTDATA_INVERSION_ENABLED CRC_OUTPUTDATA_INVERSION_ENABLE @@ -255,28 +255,27 @@ /** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose * @{ */ -#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 -#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 -#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 -#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 -#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 +#define HAL_REMAPDMA_ADC_DMA_CH2 DMA_REMAP_ADC_DMA_CH2 +#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4 +#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5 +#define HAL_REMAPDMA_TIM16_DMA_CH4 DMA_REMAP_TIM16_DMA_CH4 +#define HAL_REMAPDMA_TIM17_DMA_CH2 DMA_REMAP_TIM17_DMA_CH2 #define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 #define HAL_REMAPDMA_TIM16_DMA_CH6 DMA_REMAP_TIM16_DMA_CH6 -#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 -#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 -#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 -#define HAL_REMAPDMA_USART3_DMA_CH32 DMA_REMAP_USART3_DMA_CH32 -#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 -#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 -#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 -#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 - -#define IS_HAL_REMAPDMA IS_DMA_REMAP +#define HAL_REMAPDMA_TIM17_DMA_CH7 DMA_REMAP_TIM17_DMA_CH7 +#define HAL_REMAPDMA_SPI2_DMA_CH67 DMA_REMAP_SPI2_DMA_CH67 +#define HAL_REMAPDMA_USART2_DMA_CH67 DMA_REMAP_USART2_DMA_CH67 +#define HAL_REMAPDMA_I2C1_DMA_CH76 DMA_REMAP_I2C1_DMA_CH76 +#define HAL_REMAPDMA_TIM1_DMA_CH6 DMA_REMAP_TIM1_DMA_CH6 +#define HAL_REMAPDMA_TIM2_DMA_CH7 DMA_REMAP_TIM2_DMA_CH7 +#define HAL_REMAPDMA_TIM3_DMA_CH6 DMA_REMAP_TIM3_DMA_CH6 + +#define IS_HAL_REMAPDMA IS_DMA_REMAP #define __HAL_REMAPDMA_CHANNEL_ENABLE __HAL_DMA_REMAP_CHANNEL_ENABLE #define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE - - - + + + /** * @} */ @@ -284,7 +283,7 @@ /** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose * @{ */ - + #define TYPEPROGRAM_BYTE FLASH_TYPEPROGRAM_BYTE #define TYPEPROGRAM_HALFWORD FLASH_TYPEPROGRAM_HALFWORD #define TYPEPROGRAM_WORD FLASH_TYPEPROGRAM_WORD @@ -360,11 +359,11 @@ /** * @} */ - + /** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose * @{ */ - + #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9 I2C_FASTMODEPLUS_PA9 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10 #define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6 I2C_FASTMODEPLUS_PB6 @@ -377,12 +376,12 @@ /** * @} */ - + /** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose * @{ */ -#if defined(STM32L4) || defined(STM32F7) +#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) #define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE #define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE #define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8 @@ -400,7 +399,7 @@ /** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose * @{ */ - + #define FSMC_NORSRAM_TYPEDEF FSMC_NORSRAM_TypeDef #define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef /** @@ -432,18 +431,18 @@ #define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1 #define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1 -#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) -#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW -#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM -#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH -#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH -#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 */ +#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) +#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW +#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM +#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH +#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 */ -#if defined(STM32L1) - #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW - #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM - #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH - #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH +#if defined(STM32L1) + #define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW + #define GPIO_SPEED_LOW GPIO_SPEED_FREQ_MEDIUM + #define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_HIGH + #define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH #endif /* STM32L1 */ #if defined(STM32F0) || defined(STM32F3) || defined(STM32F1) @@ -457,6 +456,78 @@ * @} */ +/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose + * @{ + */ + +#if defined(STM32H7) + #define __HAL_RCC_JPEG_CLK_ENABLE __HAL_RCC_JPGDECEN_CLK_ENABLE + #define __HAL_RCC_JPEG_CLK_DISABLE __HAL_RCC_JPGDECEN_CLK_DISABLE + #define __HAL_RCC_JPEG_FORCE_RESET __HAL_RCC_JPGDECRST_FORCE_RESET + #define __HAL_RCC_JPEG_RELEASE_RESET __HAL_RCC_JPGDECRST_RELEASE_RESET + #define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE + #define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE + + #define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1 + #define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2 + + #define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX + #define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX + + #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT + #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT + #define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT + #define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT + #define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT + #define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT + #define HAL_DMAMUX1_REQUEST_GEN_EXTI0 HAL_DMAMUX1_REQ_GEN_EXTI0 + #define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO HAL_DMAMUX1_REQ_GEN_TIM12_TRGO + + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT + #define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT + #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP HAL_DMAMUX2_REQ_GEN_I2C4_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP HAL_DMAMUX2_REQ_GEN_SPI6_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT HAL_DMAMUX2_REQ_GEN_COMP1_OUT + #define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT HAL_DMAMUX2_REQ_GEN_COMP2_OUT + #define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP HAL_DMAMUX2_REQ_GEN_RTC_WKUP + #define HAL_DMAMUX2_REQUEST_GEN_EXTI0 HAL_DMAMUX2_REQ_GEN_EXTI0 + #define HAL_DMAMUX2_REQUEST_GEN_EXTI2 HAL_DMAMUX2_REQ_GEN_EXTI2 + #define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT + #define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT HAL_DMAMUX2_REQ_GEN_SPI6_IT + #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT + #define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT + #define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT HAL_DMAMUX2_REQ_GEN_ADC3_IT + #define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT + #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT + #define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT + + #define HAL_DMAMUX_REQUEST_GEN_NO_EVENT HAL_DMAMUX_REQ_GEN_NO_EVENT + #define HAL_DMAMUX_REQUEST_GEN_RISING HAL_DMAMUX_REQ_GEN_RISING + #define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING + #define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING + + +#endif /* STM32H7 */ + + +/** + * @} + */ + + /** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose * @{ */ @@ -469,7 +540,7 @@ #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7 #define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7 #define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7 - + #define __HAL_HRTIM_SetCounter __HAL_HRTIM_SETCOUNTER #define __HAL_HRTIM_GetCounter __HAL_HRTIM_GETCOUNTER #define __HAL_HRTIM_SetPeriod __HAL_HRTIM_SETPERIOD @@ -542,7 +613,7 @@ #define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION #define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS LPTIM_TRIGSAMPLETIME_2TRANSITIONS #define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS LPTIM_TRIGSAMPLETIME_4TRANSITIONS -#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS +#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS LPTIM_TRIGSAMPLETIME_8TRANSITIONS /* The following 3 definition have also been present in a temporary version of lptim.h */ /* They need to be renamed also to the right name, just in case */ @@ -572,7 +643,7 @@ /** * @} */ - + /** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose * @{ */ @@ -596,11 +667,11 @@ #define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1 #define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2 #define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3 - + #define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0 #define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1 #define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2 -#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 +#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3 #define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0 #define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 @@ -609,14 +680,14 @@ #define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1 #define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0 -#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 +#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1 #define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1 - -#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO -#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 -#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 - + +#define OPAMP_PGACONNECT_NO OPAMP_PGA_CONNECT_INVERTINGINPUT_NO +#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0 +#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1 + /** * @} */ @@ -625,7 +696,7 @@ * @{ */ #define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS -#if defined(STM32F7) +#if defined(STM32F7) #define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL #endif /** @@ -637,18 +708,18 @@ */ /* Compact Flash-ATA registers description */ -#define CF_DATA ATA_DATA -#define CF_SECTOR_COUNT ATA_SECTOR_COUNT -#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER -#define CF_CYLINDER_LOW ATA_CYLINDER_LOW -#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH -#define CF_CARD_HEAD ATA_CARD_HEAD -#define CF_STATUS_CMD ATA_STATUS_CMD +#define CF_DATA ATA_DATA +#define CF_SECTOR_COUNT ATA_SECTOR_COUNT +#define CF_SECTOR_NUMBER ATA_SECTOR_NUMBER +#define CF_CYLINDER_LOW ATA_CYLINDER_LOW +#define CF_CYLINDER_HIGH ATA_CYLINDER_HIGH +#define CF_CARD_HEAD ATA_CARD_HEAD +#define CF_STATUS_CMD ATA_STATUS_CMD #define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE -#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA +#define CF_COMMON_DATA_AREA ATA_COMMON_DATA_AREA /* Compact Flash-ATA commands */ -#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD +#define CF_READ_SECTOR_CMD ATA_READ_SECTOR_CMD #define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD #define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD #define CF_IDENTIFY_CMD ATA_IDENTIFY_CMD @@ -661,31 +732,27 @@ /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose * @{ */ - + #define FORMAT_BIN RTC_FORMAT_BIN #define FORMAT_BCD RTC_FORMAT_BCD #define RTC_ALARMSUBSECONDMASK_None RTC_ALARMSUBSECONDMASK_NONE -#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE #define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE #define RTC_TAMPERMASK_FLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_TAMPERMASK_FLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE -#define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE -#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE -#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE +#define RTC_MASKTAMPERFLAG_DISABLED RTC_TAMPERMASK_FLAG_DISABLE #define RTC_MASKTAMPERFLAG_ENABLED RTC_TAMPERMASK_FLAG_ENABLE -#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT -#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE +#define RTC_TAMPER1_2_INTERRUPT RTC_ALL_TAMPER_INTERRUPT +#define RTC_TAMPER1_2_3_INTERRUPT RTC_ALL_TAMPER_INTERRUPT #define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT -#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 +#define RTC_TIMESTAMPPIN_PA0 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PI8 RTC_TIMESTAMPPIN_POS1 #define RTC_TIMESTAMPPIN_PC1 RTC_TIMESTAMPPIN_POS2 @@ -693,15 +760,15 @@ #define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1 #define RTC_OUTPUT_REMAP_PB2 RTC_OUTPUT_REMAP_POS1 -#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT -#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 +#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT +#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1 #define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1 /** * @} */ - + /** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose * @{ */ @@ -722,7 +789,7 @@ * @} */ - + /** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose * @{ */ @@ -740,7 +807,7 @@ /** * @} */ - + /** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose * @{ */ @@ -756,13 +823,13 @@ /** * @} */ - + /** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose * @{ */ #define CCER_CCxE_MASK TIM_CCER_CCxE_MASK #define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK - + #define TIM_DMABase_CR1 TIM_DMABASE_CR1 #define TIM_DMABase_CR2 TIM_DMABASE_CR2 #define TIM_DMABase_SMCR TIM_DMABASE_SMCR @@ -863,7 +930,7 @@ * @} */ - + /** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose * @{ */ @@ -903,7 +970,7 @@ /** * @} */ - + /** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose * @{ */ @@ -928,7 +995,7 @@ #define ETH_MMCRFCECR 0x00000194U #define ETH_MMCRFAECR 0x00000198U #define ETH_MMCRGUFCR 0x000001C4U - + #define ETH_MAC_TXFIFO_FULL 0x02000000U /* Tx FIFO full */ #define ETH_MAC_TXFIFONOT_EMPTY 0x01000000U /* Tx FIFO not empty */ #define ETH_MAC_TXFIFO_WRITE_ACTIVE 0x00400000U /* Tx FIFO write active */ @@ -963,7 +1030,7 @@ /** * @} */ - + /** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose * @{ */ @@ -978,39 +1045,39 @@ /** * @} - */ - + */ + #if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) ||\ defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) /** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose * @{ */ #define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888 -#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 -#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 +#define DMA2D_RGB888 DMA2D_OUTPUT_RGB888 +#define DMA2D_RGB565 DMA2D_OUTPUT_RGB565 #define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555 #define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444 #define CM_ARGB8888 DMA2D_INPUT_ARGB8888 -#define CM_RGB888 DMA2D_INPUT_RGB888 -#define CM_RGB565 DMA2D_INPUT_RGB565 +#define CM_RGB888 DMA2D_INPUT_RGB888 +#define CM_RGB565 DMA2D_INPUT_RGB565 #define CM_ARGB1555 DMA2D_INPUT_ARGB1555 #define CM_ARGB4444 DMA2D_INPUT_ARGB4444 -#define CM_L8 DMA2D_INPUT_L8 -#define CM_AL44 DMA2D_INPUT_AL44 -#define CM_AL88 DMA2D_INPUT_AL88 -#define CM_L4 DMA2D_INPUT_L4 -#define CM_A8 DMA2D_INPUT_A8 -#define CM_A4 DMA2D_INPUT_A4 +#define CM_L8 DMA2D_INPUT_L8 +#define CM_AL44 DMA2D_INPUT_AL44 +#define CM_AL88 DMA2D_INPUT_AL88 +#define CM_L4 DMA2D_INPUT_L4 +#define CM_A8 DMA2D_INPUT_A8 +#define CM_A4 DMA2D_INPUT_A4 /** * @} - */ + */ #endif /* STM32L4 || STM32F7*/ /** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1023,11 +1090,11 @@ #define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback /** * @} - */ + */ /** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_HASH_STATETypeDef HAL_HASH_StateTypeDef #define HAL_HASHPhaseTypeDef HAL_HASH_PhaseTypeDef #define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish @@ -1037,12 +1104,12 @@ /*HASH Algorithm Selection*/ -#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 +#define HASH_AlgoSelection_SHA1 HASH_ALGOSELECTION_SHA1 #define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224 #define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256 #define HASH_AlgoSelection_MD5 HASH_ALGOSELECTION_MD5 -#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH +#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH #define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC #define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY @@ -1050,7 +1117,7 @@ /** * @} */ - + /** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose * @{ */ @@ -1131,6 +1198,8 @@ #define CR_OFFSET_BB PWR_CR_OFFSET_BB #define CSR_OFFSET_BB PWR_CSR_OFFSET_BB +#define PMODE_BIT_NUMBER VOS_BIT_NUMBER +#define CR_PMODE_BB CR_VOS_BB #define DBP_BitNumber DBP_BIT_NUMBER #define PVDE_BitNumber PVDE_BIT_NUMBER @@ -1144,17 +1213,17 @@ #define BRE_BitNumber BRE_BIT_NUMBER #define PWR_MODE_EVT PWR_PVD_MODE_NORMAL - + /** * @} - */ - + */ + /** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose * @{ */ #define HAL_SMBUS_Slave_Listen_IT HAL_SMBUS_EnableListen_IT -#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback -#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback +#define HAL_SMBUS_SlaveAddrCallback HAL_SMBUS_AddrCallback +#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback /** * @} */ @@ -1165,7 +1234,7 @@ #define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo /** * @} - */ + */ /** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose * @{ @@ -1177,28 +1246,31 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback /** * @} */ - + /** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose * @{ - */ + */ #define HAL_LTDC_LineEvenCallback HAL_LTDC_LineEventCallback +#define HAL_LTDC_Relaod HAL_LTDC_Reload +#define HAL_LTDC_StructInitFromVideoConfig HAL_LTDCEx_StructInitFromVideoConfig +#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig /** * @} - */ - - + */ + + /** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose * @{ */ - + /** * @} */ @@ -1213,8 +1285,8 @@ #define AES_FLAG_CCF CRYP_FLAG_CCF /** * @} - */ - + */ + /** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose * @{ */ @@ -1223,7 +1295,7 @@ #define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH #define __HAL_REMAPMEMORY_SRAM __HAL_SYSCFG_REMAPMEMORY_SRAM #define __HAL_REMAPMEMORY_FMC __HAL_SYSCFG_REMAPMEMORY_FMC -#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM +#define __HAL_REMAPMEMORY_FMC_SDRAM __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM #define __HAL_REMAPMEMORY_FSMC __HAL_SYSCFG_REMAPMEMORY_FSMC #define __HAL_REMAPMEMORY_QUADSPI __HAL_SYSCFG_REMAPMEMORY_QUADSPI #define __HAL_FMC_BANK __HAL_SYSCFG_FMC_BANK @@ -1231,7 +1303,7 @@ #define __HAL_CLEAR_FLAG __HAL_SYSCFG_CLEAR_FLAG #define __HAL_VREFINT_OUT_ENABLE __HAL_SYSCFG_VREFINT_OUT_ENABLE #define __HAL_VREFINT_OUT_DISABLE __HAL_SYSCFG_VREFINT_OUT_DISABLE -#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_1_31_ENABLE +#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE #define SYSCFG_FLAG_VREF_READY SYSCFG_FLAG_VREFINT_READY #define SYSCFG_FLAG_RC48 RCC_FLAG_HSI48 @@ -1243,7 +1315,7 @@ * @} */ - + /** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose * @{ */ @@ -1313,7 +1385,6 @@ #define __HAL_ADC_CR1_SCANCONV ADC_CR1_SCANCONV #define __HAL_ADC_CR2_EOCSelection ADC_CR2_EOCSelection #define __HAL_ADC_CR2_DMAContReq ADC_CR2_DMAContReq -#define __HAL_ADC_GET_RESOLUTION ADC_GET_RESOLUTION #define __HAL_ADC_JSQR ADC_JSQR #define __HAL_ADC_CHSELR_CHANNEL ADC_CHSELR_CHANNEL @@ -1340,7 +1411,7 @@ /** * @} */ - + /** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose * @{ */ @@ -1413,7 +1484,7 @@ #define COMP_START __HAL_COMP_ENABLE #define COMP_STOP __HAL_COMP_DISABLE #define COMP_LOCK __HAL_COMP_LOCK - + #if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) #define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() : \ ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() : \ @@ -1600,7 +1671,7 @@ #define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || \ ((WAVE) == DAC_WAVE_NOISE)|| \ ((WAVE) == DAC_WAVE_TRIANGLE)) - + /** * @} */ @@ -1619,14 +1690,18 @@ /** * @} */ - + /** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_I2C_RESET_CR2 I2C_RESET_CR2 #define __HAL_I2C_GENERATE_START I2C_GENERATE_START +#if defined(STM32F1) +#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE +#else #define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE +#endif /* STM32F1 */ #define __HAL_I2C_RISE_TIME I2C_RISE_TIME #define __HAL_I2C_SPEED_STANDARD I2C_SPEED_STANDARD #define __HAL_I2C_SPEED_FAST I2C_SPEED_FAST @@ -1642,11 +1717,11 @@ /** * @} */ - + /** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose * @{ */ - + #define IS_I2S_INSTANCE IS_I2S_ALL_INSTANCE #define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT @@ -1657,7 +1732,7 @@ /** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose * @{ */ - + #define __IRDA_DISABLE __HAL_IRDA_DISABLE #define __IRDA_ENABLE __HAL_IRDA_ENABLE @@ -1666,7 +1741,7 @@ #define __IRDA_GETCLOCKSOURCE IRDA_GETCLOCKSOURCE #define __IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION -#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE +#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE /** @@ -1695,8 +1770,8 @@ /** * @} */ - - + + /** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose * @{ */ @@ -1761,7 +1836,7 @@ #if defined (STM32F4) #define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_ENABLE_IT() #define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_DISABLE_IT() -#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() +#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GET_FLAG() #define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_CLEAR_FLAG() #define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT() #else @@ -1769,37 +1844,37 @@ #define __HAL_PVD_EXTI_DISABLE_IT __HAL_PWR_PVD_EXTI_DISABLE_IT #define __HAL_PVD_EXTI_ENABLE_IT __HAL_PWR_PVD_EXTI_ENABLE_IT #define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT -#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG +#define __HAL_PVD_EXTI_GET_FLAG __HAL_PWR_PVD_EXTI_GET_FLAG #endif /* STM32F4 */ -/** +/** * @} - */ - - + */ + + /** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose * @{ */ - + #define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI #define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI #define HAL_RCC_CCSCallback HAL_RCC_CSSCallback #define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT()) -#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE -#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE -#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE -#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE -#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET -#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET -#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE -#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE -#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET -#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET -#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE -#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE -#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE -#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE +#define __ADC_CLK_DISABLE __HAL_RCC_ADC_CLK_DISABLE +#define __ADC_CLK_ENABLE __HAL_RCC_ADC_CLK_ENABLE +#define __ADC_CLK_SLEEP_DISABLE __HAL_RCC_ADC_CLK_SLEEP_DISABLE +#define __ADC_CLK_SLEEP_ENABLE __HAL_RCC_ADC_CLK_SLEEP_ENABLE +#define __ADC_FORCE_RESET __HAL_RCC_ADC_FORCE_RESET +#define __ADC_RELEASE_RESET __HAL_RCC_ADC_RELEASE_RESET +#define __ADC1_CLK_DISABLE __HAL_RCC_ADC1_CLK_DISABLE +#define __ADC1_CLK_ENABLE __HAL_RCC_ADC1_CLK_ENABLE +#define __ADC1_FORCE_RESET __HAL_RCC_ADC1_FORCE_RESET +#define __ADC1_RELEASE_RESET __HAL_RCC_ADC1_RELEASE_RESET +#define __ADC1_CLK_SLEEP_ENABLE __HAL_RCC_ADC1_CLK_SLEEP_ENABLE +#define __ADC1_CLK_SLEEP_DISABLE __HAL_RCC_ADC1_CLK_SLEEP_DISABLE +#define __ADC2_CLK_DISABLE __HAL_RCC_ADC2_CLK_DISABLE +#define __ADC2_CLK_ENABLE __HAL_RCC_ADC2_CLK_ENABLE #define __ADC2_FORCE_RESET __HAL_RCC_ADC2_FORCE_RESET #define __ADC2_RELEASE_RESET __HAL_RCC_ADC2_RELEASE_RESET #define __ADC3_CLK_DISABLE __HAL_RCC_ADC3_CLK_DISABLE @@ -1816,7 +1891,7 @@ #define __CRYP_CLK_SLEEP_DISABLE __HAL_RCC_CRYP_CLK_SLEEP_DISABLE #define __CRYP_CLK_ENABLE __HAL_RCC_CRYP_CLK_ENABLE #define __CRYP_CLK_DISABLE __HAL_RCC_CRYP_CLK_DISABLE -#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET +#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET #define __CRYP_RELEASE_RESET __HAL_RCC_CRYP_RELEASE_RESET #define __AFIO_CLK_DISABLE __HAL_RCC_AFIO_CLK_DISABLE #define __AFIO_CLK_ENABLE __HAL_RCC_AFIO_CLK_ENABLE @@ -2044,6 +2119,21 @@ #define __QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QSPI_CLK_SLEEP_ENABLE #define __QSPI_FORCE_RESET __HAL_RCC_QSPI_FORCE_RESET #define __QSPI_RELEASE_RESET __HAL_RCC_QSPI_RELEASE_RESET + +#if defined(STM32WB) +#define __HAL_RCC_QSPI_CLK_DISABLE __HAL_RCC_QUADSPI_CLK_DISABLE +#define __HAL_RCC_QSPI_CLK_ENABLE __HAL_RCC_QUADSPI_CLK_ENABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE +#define __HAL_RCC_QSPI_FORCE_RESET __HAL_RCC_QUADSPI_FORCE_RESET +#define __HAL_RCC_QSPI_RELEASE_RESET __HAL_RCC_QUADSPI_RELEASE_RESET +#define __HAL_RCC_QSPI_IS_CLK_ENABLED __HAL_RCC_QUADSPI_IS_CLK_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_DISABLED __HAL_RCC_QUADSPI_IS_CLK_DISABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED +#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED +#define QSPI_IRQHandler QUADSPI_IRQHandler +#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */ + #define __RNG_CLK_DISABLE __HAL_RCC_RNG_CLK_DISABLE #define __RNG_CLK_ENABLE __HAL_RCC_RNG_CLK_ENABLE #define __RNG_CLK_SLEEP_DISABLE __HAL_RCC_RNG_CLK_SLEEP_DISABLE @@ -2235,13 +2325,13 @@ #define __USART4_CLK_DISABLE __HAL_RCC_UART4_CLK_DISABLE #define __USART4_CLK_ENABLE __HAL_RCC_UART4_CLK_ENABLE #define __USART4_CLK_SLEEP_ENABLE __HAL_RCC_UART4_CLK_SLEEP_ENABLE -#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE +#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE #define __USART4_FORCE_RESET __HAL_RCC_UART4_FORCE_RESET #define __USART4_RELEASE_RESET __HAL_RCC_UART4_RELEASE_RESET #define __USART5_CLK_DISABLE __HAL_RCC_UART5_CLK_DISABLE #define __USART5_CLK_ENABLE __HAL_RCC_UART5_CLK_ENABLE #define __USART5_CLK_SLEEP_ENABLE __HAL_RCC_UART5_CLK_SLEEP_ENABLE -#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE +#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE #define __USART5_FORCE_RESET __HAL_RCC_UART5_FORCE_RESET #define __USART5_RELEASE_RESET __HAL_RCC_UART5_RELEASE_RESET #define __USART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE @@ -2294,111 +2384,111 @@ #define __USB_OTG_HS_CLK_DISABLE __HAL_RCC_USB_OTG_HS_CLK_DISABLE #define __USB_OTG_HS_CLK_ENABLE __HAL_RCC_USB_OTG_HS_CLK_ENABLE #define __USB_OTG_HS_ULPI_CLK_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE -#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE +#define __USB_OTG_HS_ULPI_CLK_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE #define __TIM9_CLK_SLEEP_ENABLE __HAL_RCC_TIM9_CLK_SLEEP_ENABLE -#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE +#define __TIM9_CLK_SLEEP_DISABLE __HAL_RCC_TIM9_CLK_SLEEP_DISABLE #define __TIM10_CLK_SLEEP_ENABLE __HAL_RCC_TIM10_CLK_SLEEP_ENABLE -#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE +#define __TIM10_CLK_SLEEP_DISABLE __HAL_RCC_TIM10_CLK_SLEEP_DISABLE #define __TIM11_CLK_SLEEP_ENABLE __HAL_RCC_TIM11_CLK_SLEEP_ENABLE -#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE +#define __TIM11_CLK_SLEEP_DISABLE __HAL_RCC_TIM11_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE #define __ETHMACPTP_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE #define __ETHMACPTP_CLK_ENABLE __HAL_RCC_ETHMACPTP_CLK_ENABLE -#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE +#define __ETHMACPTP_CLK_DISABLE __HAL_RCC_ETHMACPTP_CLK_DISABLE #define __HASH_CLK_ENABLE __HAL_RCC_HASH_CLK_ENABLE #define __HASH_FORCE_RESET __HAL_RCC_HASH_FORCE_RESET #define __HASH_RELEASE_RESET __HAL_RCC_HASH_RELEASE_RESET #define __HASH_CLK_SLEEP_ENABLE __HAL_RCC_HASH_CLK_SLEEP_ENABLE #define __HASH_CLK_SLEEP_DISABLE __HAL_RCC_HASH_CLK_SLEEP_DISABLE -#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE +#define __HASH_CLK_DISABLE __HAL_RCC_HASH_CLK_DISABLE #define __SPI5_CLK_ENABLE __HAL_RCC_SPI5_CLK_ENABLE #define __SPI5_CLK_DISABLE __HAL_RCC_SPI5_CLK_DISABLE #define __SPI5_FORCE_RESET __HAL_RCC_SPI5_FORCE_RESET #define __SPI5_RELEASE_RESET __HAL_RCC_SPI5_RELEASE_RESET #define __SPI5_CLK_SLEEP_ENABLE __HAL_RCC_SPI5_CLK_SLEEP_ENABLE -#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE +#define __SPI5_CLK_SLEEP_DISABLE __HAL_RCC_SPI5_CLK_SLEEP_DISABLE #define __SPI6_CLK_ENABLE __HAL_RCC_SPI6_CLK_ENABLE #define __SPI6_CLK_DISABLE __HAL_RCC_SPI6_CLK_DISABLE #define __SPI6_FORCE_RESET __HAL_RCC_SPI6_FORCE_RESET #define __SPI6_RELEASE_RESET __HAL_RCC_SPI6_RELEASE_RESET #define __SPI6_CLK_SLEEP_ENABLE __HAL_RCC_SPI6_CLK_SLEEP_ENABLE -#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE +#define __SPI6_CLK_SLEEP_DISABLE __HAL_RCC_SPI6_CLK_SLEEP_DISABLE #define __LTDC_CLK_ENABLE __HAL_RCC_LTDC_CLK_ENABLE #define __LTDC_CLK_DISABLE __HAL_RCC_LTDC_CLK_DISABLE #define __LTDC_FORCE_RESET __HAL_RCC_LTDC_FORCE_RESET #define __LTDC_RELEASE_RESET __HAL_RCC_LTDC_RELEASE_RESET -#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE +#define __LTDC_CLK_SLEEP_ENABLE __HAL_RCC_LTDC_CLK_SLEEP_ENABLE #define __ETHMAC_CLK_SLEEP_ENABLE __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE -#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE +#define __ETHMAC_CLK_SLEEP_DISABLE __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE #define __ETHMACTX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE -#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE +#define __ETHMACTX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE #define __ETHMACRX_CLK_SLEEP_ENABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE -#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE +#define __ETHMACRX_CLK_SLEEP_DISABLE __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE #define __TIM12_CLK_SLEEP_ENABLE __HAL_RCC_TIM12_CLK_SLEEP_ENABLE -#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE +#define __TIM12_CLK_SLEEP_DISABLE __HAL_RCC_TIM12_CLK_SLEEP_DISABLE #define __TIM13_CLK_SLEEP_ENABLE __HAL_RCC_TIM13_CLK_SLEEP_ENABLE -#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE +#define __TIM13_CLK_SLEEP_DISABLE __HAL_RCC_TIM13_CLK_SLEEP_DISABLE #define __TIM14_CLK_SLEEP_ENABLE __HAL_RCC_TIM14_CLK_SLEEP_ENABLE -#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE +#define __TIM14_CLK_SLEEP_DISABLE __HAL_RCC_TIM14_CLK_SLEEP_DISABLE #define __BKPSRAM_CLK_ENABLE __HAL_RCC_BKPSRAM_CLK_ENABLE #define __BKPSRAM_CLK_DISABLE __HAL_RCC_BKPSRAM_CLK_DISABLE #define __BKPSRAM_CLK_SLEEP_ENABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE -#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE +#define __BKPSRAM_CLK_SLEEP_DISABLE __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE #define __CCMDATARAMEN_CLK_ENABLE __HAL_RCC_CCMDATARAMEN_CLK_ENABLE -#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE +#define __CCMDATARAMEN_CLK_DISABLE __HAL_RCC_CCMDATARAMEN_CLK_DISABLE #define __USART6_CLK_ENABLE __HAL_RCC_USART6_CLK_ENABLE #define __USART6_CLK_DISABLE __HAL_RCC_USART6_CLK_DISABLE #define __USART6_FORCE_RESET __HAL_RCC_USART6_FORCE_RESET #define __USART6_RELEASE_RESET __HAL_RCC_USART6_RELEASE_RESET #define __USART6_CLK_SLEEP_ENABLE __HAL_RCC_USART6_CLK_SLEEP_ENABLE -#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE +#define __USART6_CLK_SLEEP_DISABLE __HAL_RCC_USART6_CLK_SLEEP_DISABLE #define __SPI4_CLK_ENABLE __HAL_RCC_SPI4_CLK_ENABLE #define __SPI4_CLK_DISABLE __HAL_RCC_SPI4_CLK_DISABLE #define __SPI4_FORCE_RESET __HAL_RCC_SPI4_FORCE_RESET #define __SPI4_RELEASE_RESET __HAL_RCC_SPI4_RELEASE_RESET #define __SPI4_CLK_SLEEP_ENABLE __HAL_RCC_SPI4_CLK_SLEEP_ENABLE -#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE +#define __SPI4_CLK_SLEEP_DISABLE __HAL_RCC_SPI4_CLK_SLEEP_DISABLE #define __GPIOI_CLK_ENABLE __HAL_RCC_GPIOI_CLK_ENABLE #define __GPIOI_CLK_DISABLE __HAL_RCC_GPIOI_CLK_DISABLE #define __GPIOI_FORCE_RESET __HAL_RCC_GPIOI_FORCE_RESET #define __GPIOI_RELEASE_RESET __HAL_RCC_GPIOI_RELEASE_RESET #define __GPIOI_CLK_SLEEP_ENABLE __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE -#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE +#define __GPIOI_CLK_SLEEP_DISABLE __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE #define __GPIOJ_CLK_ENABLE __HAL_RCC_GPIOJ_CLK_ENABLE #define __GPIOJ_CLK_DISABLE __HAL_RCC_GPIOJ_CLK_DISABLE #define __GPIOJ_FORCE_RESET __HAL_RCC_GPIOJ_FORCE_RESET #define __GPIOJ_RELEASE_RESET __HAL_RCC_GPIOJ_RELEASE_RESET #define __GPIOJ_CLK_SLEEP_ENABLE __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE -#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE +#define __GPIOJ_CLK_SLEEP_DISABLE __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE #define __GPIOK_CLK_ENABLE __HAL_RCC_GPIOK_CLK_ENABLE #define __GPIOK_CLK_DISABLE __HAL_RCC_GPIOK_CLK_DISABLE #define __GPIOK_RELEASE_RESET __HAL_RCC_GPIOK_RELEASE_RESET #define __GPIOK_CLK_SLEEP_ENABLE __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE -#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE +#define __GPIOK_CLK_SLEEP_DISABLE __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE #define __ETH_CLK_ENABLE __HAL_RCC_ETH_CLK_ENABLE -#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE +#define __ETH_CLK_DISABLE __HAL_RCC_ETH_CLK_DISABLE #define __DCMI_CLK_ENABLE __HAL_RCC_DCMI_CLK_ENABLE #define __DCMI_CLK_DISABLE __HAL_RCC_DCMI_CLK_DISABLE #define __DCMI_FORCE_RESET __HAL_RCC_DCMI_FORCE_RESET #define __DCMI_RELEASE_RESET __HAL_RCC_DCMI_RELEASE_RESET #define __DCMI_CLK_SLEEP_ENABLE __HAL_RCC_DCMI_CLK_SLEEP_ENABLE -#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE +#define __DCMI_CLK_SLEEP_DISABLE __HAL_RCC_DCMI_CLK_SLEEP_DISABLE #define __UART7_CLK_ENABLE __HAL_RCC_UART7_CLK_ENABLE #define __UART7_CLK_DISABLE __HAL_RCC_UART7_CLK_DISABLE #define __UART7_RELEASE_RESET __HAL_RCC_UART7_RELEASE_RESET #define __UART7_FORCE_RESET __HAL_RCC_UART7_FORCE_RESET #define __UART7_CLK_SLEEP_ENABLE __HAL_RCC_UART7_CLK_SLEEP_ENABLE -#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE +#define __UART7_CLK_SLEEP_DISABLE __HAL_RCC_UART7_CLK_SLEEP_DISABLE #define __UART8_CLK_ENABLE __HAL_RCC_UART8_CLK_ENABLE #define __UART8_CLK_DISABLE __HAL_RCC_UART8_CLK_DISABLE #define __UART8_FORCE_RESET __HAL_RCC_UART8_FORCE_RESET #define __UART8_RELEASE_RESET __HAL_RCC_UART8_RELEASE_RESET #define __UART8_CLK_SLEEP_ENABLE __HAL_RCC_UART8_CLK_SLEEP_ENABLE -#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE +#define __UART8_CLK_SLEEP_DISABLE __HAL_RCC_UART8_CLK_SLEEP_DISABLE #define __OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE #define __OTGHS_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE #define __OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE #define __OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE @@ -2406,29 +2496,28 @@ #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED #define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED #define __HAL_RCC_OTGHS_FORCE_RESET __HAL_RCC_USB_OTG_HS_FORCE_RESET -#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET +#define __HAL_RCC_OTGHS_RELEASE_RESET __HAL_RCC_USB_OTG_HS_RELEASE_RESET #define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE -#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE +#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE #define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED -#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED -#define __CRYP_FORCE_RESET __HAL_RCC_CRYP_FORCE_RESET -#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE +#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED +#define __SRAM3_CLK_SLEEP_ENABLE __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE #define __CAN2_CLK_SLEEP_ENABLE __HAL_RCC_CAN2_CLK_SLEEP_ENABLE -#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE +#define __CAN2_CLK_SLEEP_DISABLE __HAL_RCC_CAN2_CLK_SLEEP_DISABLE #define __DAC_CLK_SLEEP_ENABLE __HAL_RCC_DAC_CLK_SLEEP_ENABLE -#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE +#define __DAC_CLK_SLEEP_DISABLE __HAL_RCC_DAC_CLK_SLEEP_DISABLE #define __ADC2_CLK_SLEEP_ENABLE __HAL_RCC_ADC2_CLK_SLEEP_ENABLE -#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE +#define __ADC2_CLK_SLEEP_DISABLE __HAL_RCC_ADC2_CLK_SLEEP_DISABLE #define __ADC3_CLK_SLEEP_ENABLE __HAL_RCC_ADC3_CLK_SLEEP_ENABLE -#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE +#define __ADC3_CLK_SLEEP_DISABLE __HAL_RCC_ADC3_CLK_SLEEP_DISABLE #define __FSMC_FORCE_RESET __HAL_RCC_FSMC_FORCE_RESET #define __FSMC_RELEASE_RESET __HAL_RCC_FSMC_RELEASE_RESET #define __FSMC_CLK_SLEEP_ENABLE __HAL_RCC_FSMC_CLK_SLEEP_ENABLE -#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE +#define __FSMC_CLK_SLEEP_DISABLE __HAL_RCC_FSMC_CLK_SLEEP_DISABLE #define __SDIO_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET #define __SDIO_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET #define __SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE -#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE +#define __SDIO_CLK_SLEEP_ENABLE __HAL_RCC_SDIO_CLK_SLEEP_ENABLE #define __DMA2D_CLK_ENABLE __HAL_RCC_DMA2D_CLK_ENABLE #define __DMA2D_CLK_DISABLE __HAL_RCC_DMA2D_CLK_DISABLE #define __DMA2D_FORCE_RESET __HAL_RCC_DMA2D_FORCE_RESET @@ -2444,8 +2533,6 @@ #define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE #define __ADC34_CLK_ENABLE __HAL_RCC_ADC34_CLK_ENABLE #define __ADC34_CLK_DISABLE __HAL_RCC_ADC34_CLK_DISABLE -#define __ADC12_CLK_ENABLE __HAL_RCC_ADC12_CLK_ENABLE -#define __ADC12_CLK_DISABLE __HAL_RCC_ADC12_CLK_DISABLE #define __DAC2_CLK_ENABLE __HAL_RCC_DAC2_CLK_ENABLE #define __DAC2_CLK_DISABLE __HAL_RCC_DAC2_CLK_DISABLE #define __TIM18_CLK_ENABLE __HAL_RCC_TIM18_CLK_ENABLE @@ -2467,8 +2554,6 @@ #define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET #define __ADC34_FORCE_RESET __HAL_RCC_ADC34_FORCE_RESET #define __ADC34_RELEASE_RESET __HAL_RCC_ADC34_RELEASE_RESET -#define __ADC12_FORCE_RESET __HAL_RCC_ADC12_FORCE_RESET -#define __ADC12_RELEASE_RESET __HAL_RCC_ADC12_RELEASE_RESET #define __DAC2_FORCE_RESET __HAL_RCC_DAC2_FORCE_RESET #define __DAC2_RELEASE_RESET __HAL_RCC_DAC2_RELEASE_RESET #define __TIM18_FORCE_RESET __HAL_RCC_TIM18_FORCE_RESET @@ -2632,7 +2717,7 @@ #define SdioClockSelection Sdmmc1ClockSelection #define RCC_PERIPHCLK_SDIO RCC_PERIPHCLK_SDMMC1 #define __HAL_RCC_SDIO_CONFIG __HAL_RCC_SDMMC1_CONFIG -#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE +#define __HAL_RCC_GET_SDIO_SOURCE __HAL_RCC_GET_SDMMC1_SOURCE #endif #if defined(STM32F7) @@ -2640,6 +2725,30 @@ #define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK #endif +#if defined(STM32H7) +#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_HS_FORCE_RESET() __HAL_RCC_USB1_OTG_HS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET() __HAL_RCC_USB1_OTG_HS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE() + +#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE() +#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() __HAL_RCC_USB2_OTG_FS_FORCE_RESET() +#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() __HAL_RCC_USB2_OTG_FS_RELEASE_RESET() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE() +#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE() +#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE() +#endif + #define __HAL_RCC_I2SCLK __HAL_RCC_I2S_CONFIG #define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG @@ -2693,7 +2802,12 @@ #define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK #define RCC_MCOSOURCE_PLLCLK_DIV2 RCC_MCO1SOURCE_PLLCLK_DIV2 +#if defined(STM32L4) +#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE +#elif defined(STM32WB) || defined(STM32G0) +#else #define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK +#endif #define RCC_USBCLK_PLLSAI1 RCC_USBCLKSOURCE_PLLSAI1 #define RCC_USBCLK_PLL RCC_USBCLKSOURCE_PLL @@ -2793,6 +2907,15 @@ #define RCC_SWPMI1CLKSOURCE_PCLK RCC_SWPMI1CLKSOURCE_PCLK1 #define RCC_LPTIM1CLKSOURCE_PCLK RCC_LPTIM1CLKSOURCE_PCLK1 #define RCC_LPTIM2CLKSOURCE_PCLK RCC_LPTIM2CLKSOURCE_PCLK1 + +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1 +#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2 +#define RCC_DFSDM1CLKSOURCE_APB2 RCC_DFSDM1CLKSOURCE_PCLK2 +#define RCC_DFSDM2CLKSOURCE_APB2 RCC_DFSDM2CLKSOURCE_PCLK2 +#define RCC_FMPI2C1CLKSOURCE_APB RCC_FMPI2C1CLKSOURCE_PCLK1 + /** * @} */ @@ -2800,17 +2923,19 @@ /** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose * @{ */ -#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) +#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit) /** * @} */ - + /** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose * @{ */ - +#if defined (STM32G0) +#else #define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG +#endif #define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT #define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT @@ -2846,7 +2971,7 @@ #define IS_ALARM_MASK IS_RTC_ALARM_MASK #define IS_TAMPER IS_RTC_TAMPER #define IS_TAMPER_ERASE_MODE IS_RTC_TAMPER_ERASE_MODE -#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER +#define IS_TAMPER_FILTER IS_RTC_TAMPER_FILTER #define IS_TAMPER_INTERRUPT IS_RTC_TAMPER_INTERRUPT #define IS_TAMPER_MASKFLAG_STATE IS_RTC_TAMPER_MASKFLAG_STATE #define IS_TAMPER_PRECHARGE_DURATION IS_RTC_TAMPER_PRECHARGE_DURATION @@ -2871,26 +2996,26 @@ #define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE #define SD_CMD_SD_APP_STAUS SD_CMD_SD_APP_STATUS -#if defined(STM32F4) +#if defined(STM32F4) || defined(STM32F2) #define SD_SDMMC_DISABLED SD_SDIO_DISABLED -#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY -#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED -#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION -#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND -#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT -#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED -#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE -#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE -#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE -#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL -#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT -#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT -#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG -#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG -#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT -#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT -#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS -#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT +#define SD_SDMMC_FUNCTION_BUSY SD_SDIO_FUNCTION_BUSY +#define SD_SDMMC_FUNCTION_FAILED SD_SDIO_FUNCTION_FAILED +#define SD_SDMMC_UNKNOWN_FUNCTION SD_SDIO_UNKNOWN_FUNCTION +#define SD_CMD_SDMMC_SEN_OP_COND SD_CMD_SDIO_SEN_OP_COND +#define SD_CMD_SDMMC_RW_DIRECT SD_CMD_SDIO_RW_DIRECT +#define SD_CMD_SDMMC_RW_EXTENDED SD_CMD_SDIO_RW_EXTENDED +#define __HAL_SD_SDMMC_ENABLE __HAL_SD_SDIO_ENABLE +#define __HAL_SD_SDMMC_DISABLE __HAL_SD_SDIO_DISABLE +#define __HAL_SD_SDMMC_DMA_ENABLE __HAL_SD_SDIO_DMA_ENABLE +#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL +#define __HAL_SD_SDMMC_ENABLE_IT __HAL_SD_SDIO_ENABLE_IT +#define __HAL_SD_SDMMC_DISABLE_IT __HAL_SD_SDIO_DISABLE_IT +#define __HAL_SD_SDMMC_GET_FLAG __HAL_SD_SDIO_GET_FLAG +#define __HAL_SD_SDMMC_CLEAR_FLAG __HAL_SD_SDIO_CLEAR_FLAG +#define __HAL_SD_SDMMC_GET_IT __HAL_SD_SDIO_GET_IT +#define __HAL_SD_SDMMC_CLEAR_IT __HAL_SD_SDIO_CLEAR_IT +#define SDMMC_STATIC_FLAGS SDIO_STATIC_FLAGS +#define SDMMC_CMD0TIMEOUT SDIO_CMD0TIMEOUT #define SD_SDMMC_SEND_IF_COND SD_SDIO_SEND_IF_COND /* alias CMSIS */ #define SDMMC1_IRQn SDIO_IRQn @@ -2899,8 +3024,8 @@ #if defined(STM32F7) || defined(STM32L4) #define SD_SDIO_DISABLED SD_SDMMC_DISABLED -#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY -#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED +#define SD_SDIO_FUNCTION_BUSY SD_SDMMC_FUNCTION_BUSY +#define SD_SDIO_FUNCTION_FAILED SD_SDMMC_FUNCTION_FAILED #define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION #define SD_CMD_SDIO_SEN_OP_COND SD_CMD_SDMMC_SEN_OP_COND #define SD_CMD_SDIO_RW_DIRECT SD_CMD_SDMMC_RW_DIRECT @@ -2922,6 +3047,24 @@ #define SDIO_IRQn SDMMC1_IRQn #define SDIO_IRQHandler SDMMC1_IRQHandler #endif + +#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) +#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef +#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef +#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef +#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef +#endif + +#if defined(STM32H7) +#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback +#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback HAL_SDEx_Read_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback HAL_SDEx_Read_DMADoubleBuf1CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback HAL_SDEx_Write_DMADoubleBuf0CpltCallback +#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback HAL_SDEx_Write_DMADoubleBuf1CpltCallback +#endif /** * @} */ @@ -2940,7 +3083,7 @@ #define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE #define __SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE -#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE +#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE /** * @} @@ -2972,7 +3115,7 @@ /** * @} */ - + /** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose * @{ */ @@ -2984,8 +3127,8 @@ #define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD -#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE -#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLE IS_UART_ONE_BIT_SAMPLE +#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE /** * @} @@ -3090,7 +3233,7 @@ /** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose * @{ */ - + #define __HAL_ETH_EXTI_ENABLE_IT __HAL_ETH_WAKEUP_EXTI_ENABLE_IT #define __HAL_ETH_EXTI_DISABLE_IT __HAL_ETH_WAKEUP_EXTI_DISABLE_IT #define __HAL_ETH_EXTI_GET_FLAG __HAL_ETH_WAKEUP_EXTI_GET_FLAG @@ -3099,7 +3242,7 @@ #define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER #define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER -#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE +#define ETH_PROMISCIOUSMODE_ENABLE ETH_PROMISCUOUS_MODE_ENABLE #define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE #define IS_ETH_PROMISCIOUS_MODE IS_ETH_PROMISCUOUS_MODE /** @@ -3110,6 +3253,7 @@ * @{ */ #define __HAL_LTDC_LAYER LTDC_LAYER +#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG /** * @} */ @@ -3135,11 +3279,22 @@ * @} */ +/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose + * @{ + */ +#if defined(STM32H7) +#define HAL_SPDIFRX_ReceiveControlFlow HAL_SPDIFRX_ReceiveCtrlFlow +#define HAL_SPDIFRX_ReceiveControlFlow_IT HAL_SPDIFRX_ReceiveCtrlFlow_IT +#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA +#endif +/** + * @} + */ /** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose * @{ */ - + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.c index 285da086c5..5e6dae988a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief HAL module driver. * This is the common part of the HAL initialization * @@ -67,11 +65,11 @@ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** - * @brief STM32L4xx HAL Driver version number V1.7.1 + * @brief STM32L4xx HAL Driver version number */ #define __STM32L4xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ -#define __STM32L4xx_HAL_VERSION_SUB1 (0x07) /*!< [23:16] sub1 version */ -#define __STM32L4xx_HAL_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */ +#define __STM32L4xx_HAL_VERSION_SUB1 (0x08) /*!< [23:16] sub1 version */ +#define __STM32L4xx_HAL_VERSION_SUB2 (0x02) /*!< [15:8] sub2 version */ #define __STM32L4xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __STM32L4xx_HAL_VERSION ((__STM32L4xx_HAL_VERSION_MAIN << 24)\ |(__STM32L4xx_HAL_VERSION_SUB1 << 16)\ @@ -253,7 +251,7 @@ __weak void HAL_MspDeInit(void) * than the peripheral interrupt. Otherwise the caller ISR process will be blocked. * The function is declared as __weak to be overwritten in case of other * implementation in user file. - * @param TickPriority: Tick interrupt priority. + * @param TickPriority Tick interrupt priority. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) @@ -325,7 +323,7 @@ __weak uint32_t HAL_GetTick(void) * is incremented. * @note This function is declared as __weak to be overwritten in case of other * implementations in user file. - * @param Delay: specifies the delay time length, in milliseconds. + * @param Delay specifies the delay time length, in milliseconds. * @retval None */ __weak void HAL_Delay(uint32_t Delay) @@ -575,11 +573,11 @@ void HAL_SYSCFG_DisableMemorySwappingBank(void) #if defined(VREFBUF) /** * @brief Configure the internal voltage reference buffer voltage scale. - * @param VoltageScaling: specifies the output voltage to achieve + * @param VoltageScaling specifies the output voltage to achieve * This parameter can be one of the following values: * @arg SYSCFG_VREFBUF_VOLTAGE_SCALE0: VREF_OUT1 around 2.048 V. * This requires VDDA equal to or higher than 2.4 V. - * @arg SYSCFG_VREFBUF_VOLTAGE_SCALE1: VREF_OUT1 around 2.5 V. + * @arg SYSCFG_VREFBUF_VOLTAGE_SCALE1: VREF_OUT2 around 2.5 V. * This requires VDDA equal to or higher than 2.8 V. * @retval None */ @@ -593,7 +591,7 @@ void HAL_SYSCFG_VREFBUF_VoltageScalingConfig(uint32_t VoltageScaling) /** * @brief Configure the internal voltage reference buffer high impedance mode. - * @param Mode: specifies the high impedance mode + * @param Mode specifies the high impedance mode * This parameter can be one of the following values: * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE: VREF+ pin is internally connect to VREFINT output. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE: VREF+ pin is high impedance. diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.h index 7e98496f8f..aafa7c351c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file contains all the functions prototypes for the HAL * module driver. ****************************************************************************** @@ -68,14 +66,21 @@ #define SYSCFG_BOOT_SYSTEMFLASH SYSCFG_MEMRMP_MEM_MODE_0 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define SYSCFG_BOOT_FMC SYSCFG_MEMRMP_MEM_MODE_1 #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define SYSCFG_BOOT_SRAM (SYSCFG_MEMRMP_MEM_MODE_1 | SYSCFG_MEMRMP_MEM_MODE_0) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define SYSCFG_BOOT_OCTOPSPI1 (SYSCFG_MEMRMP_MEM_MODE_2) +#define SYSCFG_BOOT_OCTOPSPI2 (SYSCFG_MEMRMP_MEM_MODE_2 | SYSCFG_MEMRMP_MEM_MODE_0) +#else #define SYSCFG_BOOT_QUADSPI (SYSCFG_MEMRMP_MEM_MODE_2 | SYSCFG_MEMRMP_MEM_MODE_1) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} @@ -374,19 +379,32 @@ #define __HAL_SYSCFG_REMAPMEMORY_SRAM() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_1|SYSCFG_MEMRMP_MEM_MODE_0)) #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @brief FMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000. */ #define __HAL_SYSCFG_REMAPMEMORY_FMC() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, SYSCFG_MEMRMP_MEM_MODE_1) #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + +/** @brief OCTOSPI mapped at 0x00000000. + */ +#define __HAL_SYSCFG_REMAPMEMORY_OCTOSPI1() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_2)) +#define __HAL_SYSCFG_REMAPMEMORY_OCTOSPI2() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_2|SYSCFG_MEMRMP_MEM_MODE_0)) + +#else /** @brief QUADSPI mapped at 0x00000000. */ #define __HAL_SYSCFG_REMAPMEMORY_QUADSPI() MODIFY_REG(SYSCFG->MEMRMP, SYSCFG_MEMRMP_MEM_MODE, (SYSCFG_MEMRMP_MEM_MODE_2|SYSCFG_MEMRMP_MEM_MODE_1)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** * @brief Return the boot mode as configured by user. * @retval The boot mode as configured by user. The returned value can be one @@ -406,8 +424,8 @@ * @note Write protection can only be disabled by a system reset */ #define __HAL_SYSCFG_SRAM2_WRP_1_31_ENABLE(__SRAM2WRP__) do {assert_param(IS_SYSCFG_SRAM2WRP_PAGE((__SRAM2WRP__)));\ - SET_BIT(SYSCFG->SWPR, (__SRAM2WRP__));\ - }while(0) + SET_BIT(SYSCFG->SWPR, (__SRAM2WRP__));\ + }while(0) #if defined(SYSCFG_SWPR2_PAGE63) /** @brief SRAM2 page 32 to 63 write protection enable macro @@ -432,7 +450,7 @@ #define __HAL_SYSCFG_SRAM2_ERASE() SET_BIT(SYSCFG->SCSR, SYSCFG_SCSR_SRAM2ER) /** @brief Floating Point Unit interrupt enable/disable macros - * @param __INTERRUPT__: This parameter can be a value of @ref SYSCFG_FPU_Interrupts + * @param __INTERRUPT__ This parameter can be a value of @ref SYSCFG_FPU_Interrupts */ #define __HAL_SYSCFG_FPU_INTERRUPT_ENABLE(__INTERRUPT__) do {assert_param(IS_SYSCFG_FPU_INTERRUPT((__INTERRUPT__)));\ SET_BIT(SYSCFG->CFGR1, (__INTERRUPT__));\ @@ -467,7 +485,7 @@ #define __HAL_SYSCFG_BREAK_SRAM2PARITY_LOCK() SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SPL) /** @brief Check SYSCFG flag is set or not. - * @param __FLAG__: specifies the flag to check. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: * @arg @ref SYSCFG_FLAG_SRAM2_PE SRAM2 Parity Error Flag * @arg @ref SYSCFG_FLAG_SRAM2_BUSY SRAM2 Erase Ongoing @@ -480,7 +498,7 @@ #define __HAL_SYSCFG_CLEAR_FLAG() SET_BIT(SYSCFG->CFGR2, SYSCFG_CFGR2_SPF) /** @brief Fast-mode Plus driving capability enable/disable macros - * @param __FASTMODEPLUS__: This parameter can be a value of : + * @param __FASTMODEPLUS__ This parameter can be a value of : * @arg @ref SYSCFG_FASTMODEPLUS_PB6 Fast-mode Plus driving capability activation on PB6 * @arg @ref SYSCFG_FASTMODEPLUS_PB7 Fast-mode Plus driving capability activation on PB7 * @arg @ref SYSCFG_FASTMODEPLUS_PB8 Fast-mode Plus driving capability activation on PB8 diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.c index 5617796431..c9c033cbc6 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_adc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file provides firmware functions to manage the following * functionalities of the Analog to Digital Convertor (ADC) * peripheral: @@ -47,8 +45,7 @@ (+) ADC channels selectable single/differential input. - (+) ADC offset on regular groups. - + (+) ADC offset shared on 4 offset instances. (+) ADC calibration (+) ADC conversion of regular group. @@ -83,10 +80,10 @@ other device clock parameters configuration: (+++) __HAL_RCC_ADC_CLK_ENABLE(); (mandatory) - RCC_ADCCLKSOURCE_PLLSAI2 enable: (optional: if asynchronous clock selected) + RCC_ADCCLKSOURCE_PLL enable: (optional: if asynchronous clock selected) (+++) RCC_PeriphClkInitTypeDef RCC_PeriphClkInit; (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; - (+++) PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI2; + (+++) PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLL; (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); (++) ADC clock source and clock prescaler are configured at ADC level with @@ -113,7 +110,7 @@ (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler() into the function of corresponding DMA interruption vector DMAx_Channelx_IRQHandler(). - + *** Configuration of ADC, group regular, channels parameters *** ================================================================ [..] @@ -271,20 +268,6 @@ ADC_CFGR_DISCEN | ADC_CFGR_DISCNUM |\ ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL)) /*!< ADC_CFGR fields of parameters that can be updated when no regular conversion is on-going */ - -#define ADC_CFGR2_FIELDS ((uint32_t)(ADC_CFGR2_ROVSE | ADC_CFGR2_OVSR |\ - ADC_CFGR2_OVSS | ADC_CFGR2_TROVS |\ - ADC_CFGR2_ROVSM)) /*!< ADC_CFGR2 fields of parameters that can be updated when no conversion - (neither regular nor injected) is on-going */ - -#define ADC_CFGR_WD_FIELDS ((uint32_t)(ADC_CFGR_AWD1SGL | ADC_CFGR_JAWD1EN | \ - ADC_CFGR_AWD1EN | ADC_CFGR_AWD1CH)) /*!< ADC_CFGR fields of Analog Watchdog parameters that can be updated when no - conversion (neither regular nor injected) is on-going */ - -#define ADC_OFR_FIELDS ((uint32_t)(ADC_OFR1_OFFSET1 | ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1_EN)) /*!< ADC_OFR fields of parameters that can be updated when no conversion - (neither regular nor injected) is on-going */ - - /* Delay to wait before setting ADEN once ADCAL has been reset must be at least 4 ADC clock cycles. @@ -297,23 +280,18 @@ #define ADC_ENABLE_TIMEOUT ((uint32_t) 2) /*!< ADC enable time-out value */ #define ADC_DISABLE_TIMEOUT ((uint32_t) 2) /*!< ADC disable time-out value */ - - -/* Delay for ADC voltage regulator startup time */ -/* Maximum delay is 10 microseconds */ -/* (refer device RM, parameter Tadcvreg_stup). */ -#define ADC_STAB_DELAY_US ((uint32_t) 10) /*!< ADC voltage regulator startup time */ - /* Timeout to wait for current conversion on going to be completed. */ -/* Timeout fixed to worst case, for 1 channel. */ +/* Timeout fixed to longest ADC conversion possible, for 1 channel: */ /* - maximum sampling time (640.5 adc_clk) */ /* - ADC resolution (Tsar 12 bits= 12.5 adc_clk) */ /* - ADC clock with prescaler 256 */ -/* 653 * 256 = 167168 clock cycles max */ +/* (from asynchronous clock, assuming clock frequency same as CPU for */ +/* this calculation) */ +/* - ADC oversampling ratio 256 */ +/* Calculation: 653 * 256 * 256 = 42795008 CPU clock cycles max */ /* Unit: cycles of CPU clock. */ -#define ADC_CONVERSION_TIME_MAX_CPU_CYCLES ((uint32_t) 167168) /*!< ADC conversion completion time-out value */ - +#define ADC_CONVERSION_TIME_MAX_CPU_CYCLES ((uint32_t) 42795008) /*!< ADC conversion completion time-out value */ @@ -348,8 +326,8 @@ * @brief Initialize the ADC peripheral and regular group according to * parameters specified in structure "ADC_InitTypeDef". * @note As prerequisite, ADC clock must be configured at RCC top level - * depending on possible clock sources: System/PLLSAI1/PLLSAI2 clocks - * or AHB clock. + * (refer to description of RCC configuration for ADC + * in header of this file). * @note Possibility to update parameters on the fly: * This function initializes the ADC MSP (HAL_ADC_MspInit()) only when * coming from ADC state reset. Following calls to this function can @@ -369,15 +347,13 @@ * bypassed without error reporting: it can be the intended behaviour in * case of update of a parameter of ADC_InitTypeDef on the fly, * without disabling the other ADCs. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) { HAL_StatusTypeDef tmp_hal_status = HAL_OK; - - ADC_Common_TypeDef *tmpADC_Common; - uint32_t tmpCFGR = 0; + uint32_t tmpCFGR = 0U; __IO uint32_t wait_loop_index = 0; /* Check ADC handle */ @@ -391,11 +367,11 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler)); assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution)); assert_param(IS_ADC_DFSDMCFG_MODE(hadc)); - assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign)); + assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign)); assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode)); assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode)); assert_param(IS_ADC_EXTTRIG_EDGE(hadc->Init.ExternalTrigConvEdge)); - assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv)); + assert_param(IS_ADC_EXTTRIG(hadc, hadc->Init.ExternalTrigConv)); assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests)); assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection)); assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun)); @@ -407,20 +383,18 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion)); assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode)); - if (hadc->Init.DiscontinuousConvMode == ENABLE) + if(hadc->Init.DiscontinuousConvMode == ENABLE) { assert_param(IS_ADC_REGULAR_DISCONT_NUMBER(hadc->Init.NbrOfDiscConversion)); } } - /* DISCEN and CONT bits cannot be set at the same time */ assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE))); - /* Actions performed only if ADC is coming from state reset: */ /* - Initialization of ADC MSP */ - if (hadc->State == HAL_ADC_STATE_RESET) + if(hadc->State == HAL_ADC_STATE_RESET) { /* Init the low level hardware */ HAL_ADC_MspInit(hadc); @@ -432,29 +406,27 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) hadc->Lock = HAL_UNLOCKED; } - /* - Exit from deep-power-down mode and ADC voltage regulator enable */ - /* Exit deep power down mode if still in that state */ - if (HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_DEEPPWD)) + if(LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0U) { - /* Exit deep power down mode */ - CLEAR_BIT(hadc->Instance->CR, ADC_CR_DEEPPWD); + /* Disable ADC deep power down mode */ + LL_ADC_DisableDeepPowerDown(hadc->Instance); /* System was in deep power down mode, calibration must be relaunched or a previously saved calibration factor re-applied once the ADC voltage regulator is enabled */ } - if (HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADVREGEN)) - { + if(LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0U) + { /* Enable ADC internal voltage regulator */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADVREGEN); + LL_ADC_EnableInternalRegulator(hadc->Instance); /* Delay for ADC stabilization time */ /* Wait loop initialization and execution */ /* Note: Variable divided by 2 to compensate partially */ /* CPU processing cycles. */ - wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / (1000000 * 2))); + wait_loop_index = (LL_ADC_DELAY_INTERNAL_REGUL_STAB_US * (SystemCoreClock / (1000000 * 2))); while(wait_loop_index != 0) { wait_loop_index--; @@ -464,7 +436,7 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /* Verification that ADC voltage regulator is correctly enabled, whether */ /* or not ADC is coming from state reset (if any potential problem of */ /* clocking, voltage regulator would not be enabled). */ - if (HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADVREGEN)) + if(LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0U) { /* Update ADC state machine to error */ SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); @@ -479,19 +451,17 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /* correctly completed and if there is no conversion on going on regular */ /* group (ADC may already be enabled at this point if HAL_ADC_Init() is */ /* called to update a parameter on the fly). */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && - (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) ) + if( (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) + && (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) + ) { - - /* Initialize the ADC state */ - SET_BIT(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY, + HAL_ADC_STATE_BUSY_INTERNAL); /* Configuration of common ADC parameters */ - /* Pointer to the common control register */ - tmpADC_Common = ADC_COMMON_REGISTER(hadc); - - /* Parameters update conditioned to ADC state: */ /* Parameters that can be updated only when ADC is disabled: */ /* - clock configuration */ @@ -515,8 +485,7 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /* - internal measurement paths: Vbat, temperature sensor, Vref */ /* (set into HAL_ADC_ConfigChannel() or */ /* HAL_ADCEx_InjectedConfigChannel() ) */ - - MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_PRESC|ADC_CCR_CKMODE, hadc->Init.ClockPrescaler); + LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler); } /* Configuration of ADC: */ @@ -541,19 +510,19 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /* Enable external trigger if trigger selection is different of software */ /* start. */ - /* - external trigger to start conversion Init.ExternalTrigConv */ - /* - external trigger polarity Init.ExternalTrigConvEdge */ - /* Note: parameter ExternalTrigConvEdge set to "trigger edge none" is */ - /* equivalent to software start. */ - if ((hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START) - && (hadc->Init.ExternalTrigConvEdge != ADC_EXTERNALTRIGCONVEDGE_NONE)) + /* Note: This configuration keeps the hardware feature of parameter */ + /* ExternalTrigConvEdge "trigger edge none" equivalent to */ + /* software start. */ + if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START) { - tmpCFGR |= ( hadc->Init.ExternalTrigConv | hadc->Init.ExternalTrigConvEdge); + tmpCFGR |= ( (hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL) + | hadc->Init.ExternalTrigConvEdge + ); } - /* Update Configuration Register CFGR */ - MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR); - + /* Update Configuration Register CFGR */ + MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR); + /* Parameters update conditioned to ADC state: */ /* Parameters that can be updated when ADC is disabled or enabled without */ /* conversion on going on regular and injected groups: */ @@ -565,10 +534,9 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) tmpCFGR = ( ADC_CFGR_DFSDM(hadc) | ADC_CFGR_AUTOWAIT(hadc->Init.LowPowerAutoWait) | ADC_CFGR_DMACONTREQ(hadc->Init.DMAContinuousRequests) ); - + MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR); - - + if (hadc->Init.OversamplingMode == ENABLE) { assert_param(IS_ADC_OVERSAMPLING_RATIO(hadc->Init.Oversampling.Ratio)); @@ -576,36 +544,31 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode)); assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset)); - if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START) - || (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE)) - { - /* Multi trigger is not applicable to software-triggered conversions */ - assert_param((hadc->Init.Oversampling.TriggeredMode == ADC_TRIGGEREDMODE_SINGLE_TRIGGER)); - } - - - /* Configuration of Oversampler: */ - /* - Oversampling Ratio */ - /* - Right bit shift */ - /* - Triggered mode */ - /* - Oversampling mode (continued/resumed) */ - MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS, - ADC_CFGR2_ROVSE | - hadc->Init.Oversampling.Ratio | - hadc->Init.Oversampling.RightBitShift | - hadc->Init.Oversampling.TriggeredMode | - hadc->Init.Oversampling.OversamplingStopReset); + /* Configuration of Oversampler: */ + /* - Oversampling Ratio */ + /* - Right bit shift */ + /* - Triggered mode */ + /* - Oversampling mode (continued/resumed) */ + MODIFY_REG(hadc->Instance->CFGR2, + ADC_CFGR2_OVSR | + ADC_CFGR2_OVSS | + ADC_CFGR2_TROVS | + ADC_CFGR2_ROVSM, + ADC_CFGR2_ROVSE | + hadc->Init.Oversampling.Ratio | + hadc->Init.Oversampling.RightBitShift | + hadc->Init.Oversampling.TriggeredMode | + hadc->Init.Oversampling.OversamplingStopReset + ); } else { - /* Disable Regular OverSampling */ - CLEAR_BIT( hadc->Instance->CFGR2, ADC_CFGR2_ROVSE); + /* Disable ADC oversampling scope on ADC group regular */ + CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE); } } /* if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) */ - - /* Configuration of regular group sequencer: */ /* - if scan mode is disabled, regular channels sequence length is set to */ /* 0x00: 1 channel converted (channel on regular rank 1) */ @@ -613,12 +576,12 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /* Note: Scan mode is not present by hardware on this device, but */ /* emulated by software for alignment over all STM32 devices. */ /* - if scan mode is enabled, regular channels sequence length is set to */ - /* parameter "NbrOfConversion" */ + /* parameter "NbrOfConversion". */ if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE) { - /* Set number of ranks in regular group sequencer */ - MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1)); + /* Set number of ranks in regular group sequencer */ + MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1)); } else { @@ -635,7 +598,7 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); tmp_hal_status = HAL_ERROR; - } /* if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) ) */ + } /* Return function status */ return tmp_hal_status; @@ -643,13 +606,20 @@ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) /** * @brief Deinitialize the ADC peripheral registers to their default reset - * values, with deinitialization of the ADC MSP. - * @note Keep in mind that all ADCs use the same clock: disabling - * the clock will reset all ADCs. - * @note By default, HAL_ADC_DeInit() sets DEEPPWD: this saves more power by - * reducing the leakage currents and is particularly interesting before - * entering STOP 1 or STOP 2 modes. - * @param hadc: ADC handle + * values, with deinitialization of the ADC MSP. + * @note For devices with several ADCs: reset of ADC common registers is done + * only if all ADCs sharing the same common group are disabled. + * (function "HAL_ADC_MspDeInit()" is also called under the same conditions: + * all ADC instances use the same core clock at RCC level, disabling + * the core clock reset all ADC instances). + * If this is not the case, reset of these common parameters reset is + * bypassed without error reporting: it can be the intended behavior in + * case of reset of a single ADC while the other ADCs sharing the same + * common group is still running. + * @note By default, HAL_ADC_DeInit() set ADC in mode deep power-down: + * this saves more power by reducing leakage currents + * and is particularly interesting before entering MCU low-power modes. + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef* hadc) @@ -828,7 +798,7 @@ HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef* hadc) /** * @brief Initialize the ADC MSP. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) @@ -843,8 +813,9 @@ __weak void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) /** * @brief DeInitialize the ADC MSP. - * @param hadc: ADC handle - * @note All ADCs use the same clock: disabling the clock will reset all ADCs. + * @param hadc ADC handle + * @note All ADC instances use the same core clock at RCC level, disabling + * the core clock reset all ADC instances). * @retval None */ __weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) @@ -889,13 +860,14 @@ __weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) * @note Case of multimode enabled (when multimode feature is available): * if ADC is Slave, ADC is enabled but conversion is not started, * if ADC is master, ADC is enabled and multimode conversion is started. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) { HAL_StatusTypeDef tmp_hal_status = HAL_OK; ADC_TypeDef *tmpADC_Master; + /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); @@ -907,24 +879,17 @@ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) /* Enable the ADC peripheral */ tmp_hal_status = ADC_Enable(hadc); - + /* Start conversion if ADC is effectively enabled */ if (tmp_hal_status == HAL_OK) { - /* State machine update: Check if an injected conversion is ongoing */ - if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - { - /* Reset ADC error code fields related to regular conversions only */ - CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR|HAL_ADC_ERROR_DMA)); - } - else - { - /* Set ADC error code to none */ - ADC_CLEAR_ERRORCODE(hadc); - } - /* Clear HAL_ADC_STATE_READY and regular conversion results bits, set HAL_ADC_STATE_REG_BUSY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_READY|HAL_ADC_STATE_REG_EOC|HAL_ADC_STATE_REG_OVR|HAL_ADC_STATE_REG_EOSMP), HAL_ADC_STATE_REG_BUSY); - + /* Set ADC state */ + /* - Clear state bitfield related to regular group conversion results */ + /* - Set state bitfield related to regular operation */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, + HAL_ADC_STATE_REG_BUSY); + /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit - by default if ADC is Master or Independent or if multimode feature is not available - if multimode setting is set to independent mode (no dual regular or injected conversions are configured) */ @@ -932,11 +897,29 @@ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) { CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); } - - /* Clear regular group conversion flag and overrun flag */ + + /* Set ADC error code */ + /* Check if a conversion is on going on ADC group injected */ + if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + { + /* Reset ADC error code fields related to regular conversions only */ + CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); + } + else + { + /* Reset all ADC error code fields */ + ADC_CLEAR_ERRORCODE(hadc); + } + + /* Clear ADC group regular conversion flag and overrun flag */ /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR)); + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + /* Enable conversion of regular group. */ /* If software start has been selected, conversion starts immediately. */ /* If external trigger has been selected, conversion will start at next */ @@ -954,10 +937,9 @@ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) { ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); } - /* Process unlocked */ - __HAL_UNLOCK(hadc); - /* Start ADC */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADSTART); + + /* Start ADC group regular conversion */ + LL_ADC_REG_StartConversion(hadc->Instance); } else { @@ -968,11 +950,9 @@ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) if (READ_BIT(tmpADC_Master->CFGR, ADC_CFGR_JAUTO) != RESET) { ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); - - } /* if (READ_BIT(tmpADC_Master->CFGR, ADC_CFGR_JAUTO) != RESET) */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); - } /* if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) */ + } + + } } else { @@ -995,7 +975,7 @@ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) * @note: ADC peripheral disable is forcing stop of potential * conversion on injected group. If injected group is under use, it * should be preliminarily stopped using HAL_ADCEx_InjectedStop function. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc) @@ -1021,8 +1001,9 @@ HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc) if (tmp_hal_status == HAL_OK) { /* Set ADC state */ - /* Clear HAL_ADC_STATE_REG_BUSY and HAL_ADC_STATE_INJ_BUSY bits, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_REG_BUSY|HAL_ADC_STATE_INJ_BUSY), HAL_ADC_STATE_READY); + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } @@ -1035,25 +1016,27 @@ HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc) /** * @brief Wait for regular group conversion to be completed. - * @param hadc: ADC handle - * @param Timeout: Timeout value in millisecond. - * @note Depending on hadc->Init.EOCSelection, EOS or EOC is - * checked and cleared depending on AUTDLY bit status. - * @note HAL_ADC_PollForConversion() returns HAL_ERROR if EOC is polled in a - * DMA-managed conversions configuration: indeed, EOC is immediately - * reset by the DMA reading the DR register when the converted data is - * available. Therefore, EOC is set for a too short period to be - * reliably polled. + * @note ADC conversion flags EOS (end of sequence) and EOC (end of + * conversion) are cleared by this function, with an exception: + * if low power feature "LowPowerAutoWait" is enabled, flags are + * not cleared to not interfere with this feature until data register + * is read using function HAL_ADC_GetValue(). + * @note This function cannot be used in a particular setup: ADC configured + * in DMA mode and polling for end of each conversion (ADC init + * parameter "EOCSelection" set to ADC_EOC_SINGLE_CONV). + * In this case, DMA resets the flag EOC and polling cannot be + * performed on each conversion. Nevertheless, polling can still + * be performed on the complete sequence (ADC init + * parameter "EOCSelection" set to ADC_EOC_SEQ_CONV). + * @param hadc ADC handle + * @param Timeout Timeout value in millisecond. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) { - uint32_t tickstart = 0; - uint32_t tmp_Flag_EOC = 0x00; - uint32_t tmp_cfgr = 0x00; - uint32_t tmp_eos_raised = 0x01; /* by default, assume that EOS is set, - tmp_eos_raised will be corrected - accordingly during API execution */ + uint32_t tickstart = 0U; + uint32_t tmp_Flag_End = 0U; + uint32_t tmp_cfgr = 0U; ADC_TypeDef *tmpADC_Master; /* Check the parameters */ @@ -1062,43 +1045,50 @@ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Ti /* If end of conversion selected to end of sequence conversions */ if (hadc->Init.EOCSelection == ADC_EOC_SEQ_CONV) { - tmp_Flag_EOC = ADC_FLAG_EOS; + tmp_Flag_End = ADC_FLAG_EOS; } /* If end of conversion selected to end of unitary conversion */ else /* ADC_EOC_SINGLE_CONV */ { - /* Check that the ADC is not in a DMA-based configuration. Otherwise, - returns an error. */ - - /* Check whether dual regular conversions are disabled or unavailable. */ - if (ADC_IS_DUAL_REGULAR_CONVERSION_ENABLE(hadc) == RESET) + /* Verification that ADC configuration is compliant with polling for */ + /* each conversion: */ + /* Particular case is ADC configured in DMA mode and ADC sequencer with */ + /* several ranks and polling for end of each conversion. */ + /* For code simplicity sake, this particular case is generalized to */ + /* ADC configured in DMA mode and and polling for end of each conversion. */ + if(ADC_IS_DUAL_REGULAR_CONVERSION_ENABLE(hadc) == RESET) { - /* Check DMAEN bit in handle ADC CFGR register */ - if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMAEN) != RESET) - { - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); - return HAL_ERROR; - } - } - else - { - /* Else need to check Common register CCR MDMA bit field. */ - if (ADC_MULTIMODE_DMA_ENABLED()) + /* Check ADC DMA mode in independant mode */ + if(READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMAEN) != RESET) { SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); return HAL_ERROR; } + else + { + tmp_Flag_End = (ADC_FLAG_EOC); + } + } + else + { + /* Check ADC DMA mode in multimode */ + if(ADC_MULTIMODE_DMA_ENABLED(hadc)) + { + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); + return HAL_ERROR; + } + else + { + tmp_Flag_End = (ADC_FLAG_EOC); + } } - - /* no DMA transfer detected, polling ADC_FLAG_EOC is possible */ - tmp_Flag_EOC = ADC_FLAG_EOC; } /* Get tick count */ tickstart = HAL_GetTick(); /* Wait until End of unitary conversion or sequence conversions flag is raised */ - while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC)) + while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_End)) { /* Check if timeout is disabled (set to infinite wait) */ if(Timeout != HAL_MAX_DELAY) @@ -1116,16 +1106,31 @@ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Ti } } - /* Next, to clear the polled flag as well as to update the handle State, - EOS is checked and the relevant configuration register is retrieved. */ - /* 1. Check whether or not EOS is set */ - if (HAL_IS_BIT_CLR(hadc->Instance->ISR, ADC_FLAG_EOS)) + /* Update ADC state machine */ + SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); + + /* Determine whether any further conversion upcoming on group regular */ + /* by external trigger, continuous mode or scan sequence on going. */ + if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && + (hadc->Init.ContinuousConvMode == DISABLE) ) { - tmp_eos_raised = 0; + /* Check whether end of sequence is reached */ + if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS) ) + { + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); + + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + { + SET_BIT(hadc->State, HAL_ADC_STATE_READY); + } + } } - /* 2. Check whether or not hadc is the handle of a Slave ADC with dual - regular conversions enabled. */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) + + /* Get relevant register CFGR in ADC instance of ADC master or slave */ + /* in function of multimode state (for devices with multimode */ + /* available). */ + if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) { /* Retrieve handle ADC CFGR register */ tmp_cfgr = READ_REG(hadc->Instance->CFGR); @@ -1136,57 +1141,31 @@ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Ti tmpADC_Master = ADC_MASTER_REGISTER(hadc); tmp_cfgr = READ_REG(tmpADC_Master->CFGR); } - + /* Clear polled flag */ - if (tmp_Flag_EOC == ADC_FLAG_EOS) + if (tmp_Flag_End == ADC_FLAG_EOS) { __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOS); } else { - /* Clear end of conversion EOC flag of regular group if low power feature */ /* "LowPowerAutoWait " is disabled, to not interfere with this feature */ /* until data register is read using function HAL_ADC_GetValue(). */ - /* For regular groups, no new conversion will start before EOC is cleared.*/ - /* Note that 1. reading DR clears EOC. */ - /* 2. in multimode with dual regular conversions enabled (when */ - /* multimode feature is available), Master AUTDLY bit is */ - /* checked. */ - if (READ_BIT (tmp_cfgr, ADC_CFGR_AUTDLY) == RESET) + if (READ_BIT(tmp_cfgr, ADC_CFGR_AUTDLY) == RESET) { - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC); + __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS)); } } - /* Update ADC state machine */ - SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); - /* If 1. EOS is set - 2. conversions are software-triggered - 3. CONT bit is reset (that of handle ADC or Master ADC if applicable) - Then regular conversions are over and HAL_ADC_STATE_REG_BUSY can be reset. - 4. additionally, if no injected conversions are on-going, HAL_ADC_STATE_READY - can be set */ - if ((tmp_eos_raised) - && (ADC_IS_SOFTWARE_START_REGULAR(hadc)) - && (READ_BIT (tmp_cfgr, ADC_CFGR_CONT) == RESET)) - { - CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); - /* If no injected conversion on-going, set HAL_ADC_STATE_READY bit */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - { - SET_BIT(hadc->State, HAL_ADC_STATE_READY); - } - } - /* Return function status */ return HAL_OK; } /** * @brief Poll for ADC event. - * @param hadc: ADC handle - * @param EventType: the ADC event type. + * @param hadc ADC handle + * @param EventType the ADC event type. * This parameter can be one of the following values: * @arg @ref ADC_EOSMP_EVENT ADC End of Sampling event * @arg @ref ADC_AWD1_EVENT ADC Analog watchdog 1 event (main analog watchdog, present on all STM32 devices) @@ -1194,7 +1173,7 @@ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Ti * @arg @ref ADC_AWD3_EVENT ADC Analog watchdog 3 event (additional analog watchdog, not present on all STM32 families) * @arg @ref ADC_OVR_EVENT ADC Overrun event * @arg @ref ADC_JQOVF_EVENT ADC Injected context queue overflow event - * @param Timeout: Timeout value in millisecond. + * @param Timeout Timeout value in millisecond. * @note The relevant flag is cleared if found to be set, except for ADC_FLAG_OVR. * Indeed, the latter is reset only if hadc->Init.Overrun field is set * to ADC_OVR_DATA_OVERWRITTEN. Otherwise, data register may be potentially overwritten @@ -1212,7 +1191,7 @@ HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventTy assert_param(IS_ADC_EVENT_TYPE(EventType)); /* Get tick count */ - tickstart = HAL_GetTick(); + tickstart = HAL_GetTick(); /* Check selected event flag */ while(__HAL_ADC_GET_FLAG(hadc, EventType) == RESET) @@ -1220,7 +1199,7 @@ HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventTy /* Check if timeout is disabled (set to infinite wait) */ if(Timeout != HAL_MAX_DELAY) { - if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) { /* Update ADC state machine to timeout */ SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); @@ -1245,13 +1224,15 @@ HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventTy break; - /* Analog watchdog (level out of window) event */ + /* Analog watchdog (level out of window) event */ /* Note: In case of several analog watchdog enabled, if needed to know */ - /* which one triggered and on which ADCx, test ADC state of Analog Watchdog */ - /* flags HAL_ADC_STATE_AWD/2/3 function. */ - /* For example: "if (HAL_ADC_GetState(hadc1) == HAL_ADC_STATE_AWD) " */ - /* "if (HAL_ADC_GetState(hadc1) == HAL_ADC_STATE_AWD2)" */ - /* "if (HAL_ADC_GetState(hadc1) == HAL_ADC_STATE_AWD3)" */ + /* which one triggered and on which ADCx, test ADC state of analog watchdog */ + /* flags HAL_ADC_STATE_AWD1/2/3 using function "HAL_ADC_GetState()". */ + /* For example: */ + /* " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_AWD1)) " */ + /* " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_AWD2)) " */ + /* " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_AWD3)) " */ + /* Check analog watchdog 1 flag */ case ADC_AWD_EVENT: /* Set ADC state */ SET_BIT(hadc->State, HAL_ADC_STATE_AWD1); @@ -1336,13 +1317,13 @@ HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventTy * @note To guarantee a proper reset of all interruptions once all the needed * conversions are obtained, HAL_ADC_Stop_IT() must be called to ensure * a correct stop of the IT-based conversions. - * @note By default, HAL_ADC_Start_IT() doesn't enable the End Of Sampling + * @note By default, HAL_ADC_Start_IT() does not enable the End Of Sampling * interruption. If required (e.g. in case of oversampling with trigger * mode), the user must: * 1. first clear the EOSMP flag if set with macro __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOSMP) * 2. then enable the EOSMP interrupt with macro __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOSMP) * before calling HAL_ADC_Start_IT(). - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) @@ -1361,11 +1342,27 @@ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) /* Enable the ADC peripheral */ tmp_hal_status = ADC_Enable(hadc); - + /* Start conversion if ADC is effectively enabled */ if (tmp_hal_status == HAL_OK) { - /* State machine update: Check if an injected conversion is ongoing */ + /* Set ADC state */ + /* - Clear state bitfield related to regular group conversion results */ + /* - Set state bitfield related to regular operation */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, + HAL_ADC_STATE_REG_BUSY); + + /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit + - by default if ADC is Master or Independent or if multimode feature is not available + - if multimode setting is set to independent mode (no dual regular or injected conversions are configured) */ + if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) + { + CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); + } + + /* Set ADC error code */ + /* Check if a conversion is on going on ADC group injected */ if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) { /* Reset ADC error code fields related to regular conversions only */ @@ -1373,56 +1370,52 @@ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) } else { - /* Set ADC error code to none */ + /* Reset all ADC error code fields */ ADC_CLEAR_ERRORCODE(hadc); - } - /* Clear HAL_ADC_STATE_READY and regular conversion results bits, set HAL_ADC_STATE_REG_BUSY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_READY|HAL_ADC_STATE_REG_EOC|HAL_ADC_STATE_REG_OVR|HAL_ADC_STATE_REG_EOSMP), HAL_ADC_STATE_REG_BUSY); - - /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit - - by default if ADC is Master or Independent or if multimode feature is not available - - if MultiMode setting is set to independent mode (no dual regular or injected conversions are configured) */ - if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) - { - CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); } - /* Clear regular group conversion flag and overrun flag */ + /* Clear ADC group regular conversion flag and overrun flag */ /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR)); - - /* By default, disable all interruptions before enabling the desired ones */ + + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + + /* Disable all interruptions before enabling the desired ones */ __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR)); - /* Enable required interruptions */ + /* Enable ADC end of conversion interrupt */ switch(hadc->Init.EOCSelection) { - case ADC_EOC_SEQ_CONV: + case ADC_EOC_SEQ_CONV: __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOS); - break; + break; /* case ADC_EOC_SINGLE_CONV */ default: - __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC); - break; + __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC); + break; } - + + /* Enable ADC overrun interrupt */ /* If hadc->Init.Overrun is set to ADC_OVR_DATA_PRESERVED, only then is ADC_IT_OVR enabled; otherwise data overwrite is considered as normal behavior and no CPU time is lost for a non-processed interruption */ if (hadc->Init.Overrun == ADC_OVR_DATA_PRESERVED) { __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); - } + } /* Enable conversion of regular group. */ /* If software start has been selected, conversion starts immediately. */ - /* If external trigger has been selected, conversion starts at next */ + /* If external trigger has been selected, conversion will start at next */ /* trigger event. */ /* Case of multimode enabled (when multimode feature is available): */ /* - if ADC is slave and dual regular conversions are enabled, ADC is */ /* enabled only (conversion is not started), */ /* - if ADC is master, ADC is enabled and conversion is started. */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc) ) + if(ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) { /* Multimode feature is not available or ADC Instance is Independent or Master, or is not Slave ADC with dual regular conversions enabled. @@ -1446,12 +1439,11 @@ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS); __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC); break; - } - } /* if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO) != RESET) */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); - /* Start ADC */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADSTART); + } + } + + /* Start ADC group regular conversion */ + LL_ADC_REG_StartConversion(hadc->Instance); } else { @@ -1469,21 +1461,19 @@ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) /* Next, set Slave injected interruptions */ switch(hadc->Init.EOCSelection) { - case ADC_EOC_SEQ_CONV: + case ADC_EOC_SEQ_CONV: __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC); __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOS); break; /* case ADC_EOC_SINGLE_CONV */ default: - __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS); + __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS); __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC); break; - } - } /* if (READ_BIT(tmpADC_Master->CFGR, ADC_CFGR_JAUTO) != RESET) */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); - } /* if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc) ) */ - } /* if (tmp_hal_status == HAL_OK) */ + } + } + } + } else { /* Process unlocked */ @@ -1504,7 +1494,7 @@ HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) * @brief Stop ADC conversion of regular group (and injected group in * case of auto_injection mode), disable interrution of * end-of-conversion, disable ADC peripheral. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc) @@ -1535,7 +1525,7 @@ HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc) { /* Set ADC state */ ADC_STATE_CLR_SET(hadc->State, - (HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY), + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY); } } @@ -1555,9 +1545,9 @@ HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc) * @note Case of multimode enabled (when multimode feature is available): HAL_ADC_Start_DMA() * is designed for single-ADC mode only. For multimode, the dedicated * HAL_ADCEx_MultiModeStart_DMA() function must be used. - * @param hadc: ADC handle - * @param pData: Destination Buffer address. - * @param Length: Length of data to be transferred from ADC peripheral to memory (in bytes) + * @param hadc ADC handle + * @param pData Destination Buffer address. + * @param Length Number of data to be transferred from ADC peripheral to memory * @retval HAL status. */ HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length) @@ -1583,30 +1573,33 @@ HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, ui /* Start conversion if ADC is effectively enabled */ if (tmp_hal_status == HAL_OK) { - /* State machine update: Check if an injected conversion is ongoing */ - if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - { - /* Reset ADC error code fields related to regular conversions only */ - CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); - } - else - { - /* Set ADC error code to none */ - ADC_CLEAR_ERRORCODE(hadc); - } - /* Clear HAL_ADC_STATE_READY and regular conversion results bits, set HAL_ADC_STATE_REG_BUSY bit */ + /* Set ADC state */ + /* - Clear state bitfield related to regular group conversion results */ + /* - Set state bitfield related to regular operation */ ADC_STATE_CLR_SET(hadc->State, - (HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP), + HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY); - - /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit - - by default if ADC is Master or Independent or if multimode feature is not available - - if multimode setting is set to independent mode (no dual regular or injected conversions are configured) */ + + /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit + - by default if ADC is Master or Independent or if multimode feature is not available + - if multimode setting is set to independent mode (no dual regular or injected conversions are configured) */ if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) { CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); } - + + /* Check if a conversion is on going on ADC group injected */ + if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + { + /* Reset ADC error code fields related to regular conversions only */ + CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); + } + else + { + /* Reset all ADC error code fields */ + ADC_CLEAR_ERRORCODE(hadc); + } + /* Set the DMA transfer complete callback */ hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt; @@ -1625,46 +1618,47 @@ HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, ui /* operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR)); + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + /* With DMA, overrun event is always considered as an error even if hadc->Init.Overrun is set to ADC_OVR_DATA_OVERWRITTEN. Therefore, - ADC_IT_OVR is enabled. */ - __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); - + ADC_IT_OVR is enabled. */ + __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); /* Enable ADC DMA mode */ SET_BIT(hadc->Instance->CFGR, ADC_CFGR_DMAEN); - + /* Start the DMA channel */ HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length); /* Enable conversion of regular group. */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); /* If software start has been selected, conversion starts immediately. */ /* If external trigger has been selected, conversion will start at next */ /* trigger event. */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADSTART); - + /* Start ADC group regular conversion */ + LL_ADC_REG_StartConversion(hadc->Instance); } else { /* Process unlocked */ - __HAL_UNLOCK(hadc); - } /* if (tmp_hal_status == HAL_OK) */ + __HAL_UNLOCK(hadc); + } } else { tmp_hal_status = HAL_ERROR; /* Process unlocked */ - __HAL_UNLOCK(hadc); - } /* if (ADC_IS_DUAL_REGULAR_CONVERSION_ENABLE(hadc) == RESET) */ - + __HAL_UNLOCK(hadc); + } } else { tmp_hal_status = HAL_BUSY; } - + /* Return function status */ return tmp_hal_status; } @@ -1673,13 +1667,13 @@ HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, ui * @brief Stop ADC conversion of regular group (and injected group in * case of auto_injection mode), disable ADC DMA transfer, disable * ADC peripheral. - * @note: ADC peripheral disable is forcing stop of potential - * conversion on injected group. If injected group is under use, it + * @note: ADC peripheral disable is forcing stop of potential + * conversion on ADC group injected. If ADC group injected is under use, it * should be preliminarily stopped using HAL_ADCEx_InjectedStop function. * @note Case of multimode enabled (when multimode feature is available): * HAL_ADC_Stop_DMA() function is dedicated to single-ADC mode only. * For multimode, the dedicated HAL_ADCEx_MultiModeStop_DMA() API must be used. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) @@ -1698,7 +1692,7 @@ HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) /* Disable ADC peripheral if conversions are effectively stopped */ if (tmp_hal_status == HAL_OK) { - /* Disable ADC DMA (ADC DMA configuration ADC_CFGR_DMACFG is kept) */ + /* Disable ADC DMA (ADC DMA configuration of continous requests is kept) */ CLEAR_BIT(hadc->Instance->CFGR, ADC_CFGR_DMAEN); /* Disable the DMA channel (in case of DMA in circular mode or stop */ @@ -1709,7 +1703,7 @@ HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) if (tmp_hal_status != HAL_OK) { /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA); } /* Disable ADC overrun interrupt */ @@ -1732,7 +1726,7 @@ HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) { /* Set ADC state */ ADC_STATE_CLR_SET(hadc->State, - (HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY), + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY); } @@ -1757,11 +1751,11 @@ HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc) * - If sequencer is composed of several ranks, during the scan * sequence flag EOC only is raised, at the end of the scan sequence * both flags EOC and EOS are raised. - * To clear this flag, either use function: + * To clear this flag, either use function: * in programming model IT: @ref HAL_ADC_IRQHandler(), in programming - * model polling: @ref HAL_ADC_PollForConversion() + * model polling: @ref HAL_ADC_PollForConversion() * or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS). - * @param hadc: ADC handle + * @param hadc ADC handle * @retval ADC group regular conversion data */ uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) @@ -1778,24 +1772,23 @@ uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) /** * @brief Handle ADC interrupt request. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) { uint32_t overrun_error = 0; /* flag set if overrun occurrence has to be considered as an error */ - ADC_TypeDef *tmpADC_Master; - uint32_t tmp_isr = hadc->Instance->ISR; - uint32_t tmp_ier = hadc->Instance->IER; - uint32_t tmp_cfgr = 0x0; - uint32_t tmp_cfgr_jqm = 0x0; + uint32_t tmp_isr = hadc->Instance->ISR; + uint32_t tmp_ier = hadc->Instance->IER; + uint32_t tmp_cfgr = 0x0; + ADC_TypeDef *tmpADC_Master; /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection)); - /* ====== Check End of Sampling flag for regular group ===== */ - if (((tmp_isr & ADC_FLAG_EOSMP) == ADC_FLAG_EOSMP) && ((tmp_ier & ADC_IT_EOSMP) == ADC_IT_EOSMP)) + /* ========== Check End of Sampling flag for ADC group regular ========== */ + if(((tmp_isr & ADC_FLAG_EOSMP) == ADC_FLAG_EOSMP) && ((tmp_ier & ADC_IT_EOSMP) == ADC_IT_EOSMP)) { /* Update state machine on end of sampling status if not in error state */ if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) @@ -1803,30 +1796,33 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) /* Set ADC state */ SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOSMP); } - + /* End Of Sampling callback */ HAL_ADCEx_EndOfSamplingCallback(hadc); /* Clear regular group conversion flag */ __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOSMP ); - } + } - /* ====== Check End of Conversion or Sequence flags for regular group ===== */ - if( (((tmp_isr & ADC_FLAG_EOC) == ADC_FLAG_EOC) && ((tmp_ier & ADC_IT_EOC) == ADC_IT_EOC)) || - (((tmp_isr & ADC_FLAG_EOS) == ADC_FLAG_EOS) && ((tmp_ier & ADC_IT_EOS) == ADC_IT_EOS)) ) + /* ====== Check ADC group regular end of unitary conversion sequence conversions ===== */ + if((((tmp_isr & ADC_FLAG_EOC) == ADC_FLAG_EOC) && ((tmp_ier & ADC_IT_EOC) == ADC_IT_EOC)) || + (((tmp_isr & ADC_FLAG_EOS) == ADC_FLAG_EOS) && ((tmp_ier & ADC_IT_EOS) == ADC_IT_EOS)) ) { /* Update state machine on conversion status if not in error state */ if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) { - /* Set ADC state */ - SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); + /* Set ADC state */ + SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); } - /* Disable interruption if no further conversion upcoming by regular */ - /* external trigger or by continuous mode, */ - /* and if scan sequence if completed. */ + /* Determine whether any further conversion upcoming on group regular */ + /* by external trigger, continuous mode or scan sequence on going */ + /* to disable interruption. */ if(ADC_IS_SOFTWARE_START_REGULAR(hadc)) { + /* Get relevant register CFGR in ADC instance of ADC master or slave */ + /* in function of multimode state (for devices with multimode */ + /* available). */ if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) { /* check CONT bit directly in handle ADC CFGR register */ @@ -1845,22 +1841,23 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) /* If End of Sequence is reached, disable interrupts */ if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS) ) { - /* Allowed to modify bits ADC_IT_EOC/ADC_IT_EOS only if bit */ - /* ADSTART==0 (no conversion on going) */ + /* Allowed to modify bits ADC_IT_EOC/ADC_IT_EOS only if bit */ + /* ADSTART==0 (no conversion on going) */ if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) { /* Disable ADC end of sequence conversion interrupt */ - /* Note: if Overrun interrupt was enabled with EOC or EOS interrupt */ - /* in HAL_Start_IT(), it isn't disabled here because it can be used */ - /* by overrun IRQ process below. */ + /* Note: Overrun interrupt was enabled with EOC interrupt in */ + /* HAL_Start_IT(), but is not disabled here because can be used */ + /* by overrun IRQ process below. */ __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC | ADC_IT_EOS); - /* Clear HAL_ADC_STATE_REG_BUSY bit */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); - /* If no injected conversion on-going, set HAL_ADC_STATE_READY bit */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - { - SET_BIT(hadc->State, HAL_ADC_STATE_READY); - } + + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); + + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + { + SET_BIT(hadc->State, HAL_ADC_STATE_READY); + } } else { @@ -1871,24 +1868,25 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); } } - } /* if (READ_BIT (tmp_cfgr, ADC_CFGR_CONT) != ADC_CFGR_CONT) */ - } /* if(ADC_IS_SOFTWARE_START_REGULAR(hadc) */ + } + } /* Conversion complete callback */ - /* Note: HAL_ADC_ConvCpltCallback can resort to - if( __HAL_ADC_GET_FLAG(&hadc, ADC_FLAG_EOS)) or - if( __HAL_ADC_GET_FLAG(&hadc, ADC_FLAG_EOC)) to determine whether - interruption has been triggered by end of conversion or end of - sequence. */ - HAL_ADC_ConvCpltCallback(hadc); - + /* Note: Into callback function "HAL_ADC_ConvCpltCallback()", */ + /* to determine if conversion has been triggered from EOC or EOS, */ + /* possibility to use: */ + /* " if( __HAL_ADC_GET_FLAG(&hadc, ADC_FLAG_EOS)) " */ + HAL_ADC_ConvCpltCallback(hadc); /* Clear regular group conversion flag */ + /* Note: in case of overrun set to ADC_OVR_DATA_PRESERVED, end of */ + /* conversion flags clear induces the release of the preserved data.*/ + /* Therefore, if the preserved data value is needed, it must be */ + /* read preliminarily into HAL_ADC_ConvCpltCallback(). */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS) ); } - - /* ========== Check End of Conversion flag for injected group ========== */ + /* ====== Check ADC group injected end of unitary conversion sequence conversions ===== */ if( (((tmp_isr & ADC_FLAG_JEOC) == ADC_FLAG_JEOC) && ((tmp_ier & ADC_IT_JEOC) == ADC_IT_JEOC)) || (((tmp_isr & ADC_FLAG_JEOS) == ADC_FLAG_JEOS) && ((tmp_ier & ADC_IT_JEOS) == ADC_IT_JEOS)) ) { @@ -1899,75 +1897,66 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC); } - - /* Check whether interruptions can be disabled only if - - injected conversions are software-triggered when injected queue management is disabled - OR - - auto-injection is enabled, continuous mode is disabled (CONT = 0) - and regular conversions are software-triggered */ - /* If End of Sequence is reached, disable interrupts */ - if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS)) + /* Get relevant register CFGR in ADC instance of ADC master or slave */ + /* in function of multimode state (for devices with multimode */ + /* available). */ + if (ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(hadc)) { - - /* First, retrieve proper registers to check */ - /* 1a. Are injected conversions that of a dual Slave ? */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(hadc)) + tmp_cfgr = READ_REG(hadc->Instance->CFGR); + } + else + { + tmpADC_Master = ADC_MASTER_REGISTER(hadc); + tmp_cfgr = READ_REG(tmpADC_Master->CFGR); + } + + /* Disable interruption if no further conversion upcoming by injected */ + /* external trigger or by automatic injected conversion with regular */ + /* group having no further conversion upcoming (same conditions as */ + /* regular group interruption disabling above), */ + /* and if injected scan sequence is completed. */ + if(ADC_IS_SOFTWARE_START_INJECTED(hadc) || + ((READ_BIT (tmp_cfgr, ADC_CFGR_JAUTO) == RESET) && + (ADC_IS_SOFTWARE_START_REGULAR(hadc) && + (READ_BIT (tmp_cfgr, ADC_CFGR_CONT) == RESET) ) ) ) + { + /* If End of Sequence is reached, disable interrupts */ + if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS)) { - /* hadc is not the handle of a Slave ADC with dual injected conversions enabled: - check JQM bit directly in ADC CFGR register */ - tmp_cfgr_jqm = READ_REG(hadc->Instance->CFGR); - } - else - { - /* hadc is the handle of a Slave ADC with dual injected conversions enabled: - need to check JQM bit of Master ADC CFGR register */ - tmpADC_Master = ADC_MASTER_REGISTER(hadc); - tmp_cfgr_jqm = READ_REG(tmpADC_Master->CFGR); - } - /* 1b. Is hadc the handle of a Slave ADC with regular conversions enabled? */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) - { - /* hadc is not the handle of a Slave ADC with dual regular conversions enabled: - check JAUTO and CONT bits directly in ADC CFGR register */ - tmp_cfgr = READ_REG(hadc->Instance->CFGR); - } - else - { - /* hadc is not the handle of a Slave ADC with dual regular conversions enabled: - check JAUTO and CONT bits of Master ADC CFGR register */ - tmpADC_Master = ADC_MASTER_REGISTER(hadc); - tmp_cfgr = READ_REG(tmpADC_Master->CFGR); - } - - /* Secondly, check whether JEOC and JEOS interruptions can be disabled */ - if ((ADC_IS_SOFTWARE_START_INJECTED(hadc) && (READ_BIT(tmp_cfgr_jqm, ADC_CFGR_JQM) != ADC_CFGR_JQM)) - && (!((READ_BIT(tmp_cfgr, (ADC_CFGR_JAUTO|ADC_CFGR_CONT)) == (ADC_CFGR_JAUTO|ADC_CFGR_CONT)) && - (ADC_IS_SOFTWARE_START_REGULAR(hadc)))) ) - { - /* Allowed to modify bits ADC_IT_JEOC/ADC_IT_JEOS only if bit */ - /* JADSTART==0 (no conversion on going) */ - if (ADC_IS_CONVERSION_ONGOING_INJECTED(hadc) == RESET) + /* Particular case if injected contexts queue is enabled: */ + /* when the last context has been fully processed, JSQR is reset */ + /* by the hardware. Even if no injected conversion is planned to come */ + /* (queue empty, triggers are ignored), it can start again */ + /* immediately after setting a new context (JADSTART is still set). */ + /* Therefore, state of HAL ADC injected group is kept to busy. */ + if(READ_BIT(tmp_cfgr, ADC_CFGR_JQM) == RESET) { - /* Disable ADC end of sequence conversion interrupt */ - __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC | ADC_IT_JEOS); - /* Clear HAL_ADC_STATE_INJ_BUSY bit */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); - /* If no regular conversion on-going, set HAL_ADC_STATE_READY bit */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) - { - SET_BIT(hadc->State, HAL_ADC_STATE_READY); - } - } - else - { - /* Change ADC state to error state */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); + /* Allowed to modify bits ADC_IT_JEOC/ADC_IT_JEOS only if bit */ + /* JADSTART==0 (no conversion on going) */ + if (ADC_IS_CONVERSION_ONGOING_INJECTED(hadc) == RESET) + { + /* Disable ADC end of sequence conversion interrupt */ + __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC | ADC_IT_JEOS); + + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); + + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) + { + SET_BIT(hadc->State, HAL_ADC_STATE_READY); + } + } + else + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); - /* Set ADC error code to ADC IP internal error */ - SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + /* Set ADC error code to ADC IP internal error */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + } } } - } /* if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS)) */ + } /* Injected Conversion complete callback */ /* Note: HAL_ADCEx_InjectedConvCpltCallback can resort to @@ -1980,8 +1969,6 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) /* Clear injected group conversion flag */ __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC | ADC_FLAG_JEOS); } - - /* ========== Check Analog watchdog flags =================================================== */ /* ========== Check Analog watchdog 1 flag ========== */ if (((tmp_isr & ADC_FLAG_AWD1) == ADC_FLAG_AWD1) && ((tmp_ier & ADC_IT_AWD1) == ADC_IT_AWD1)) @@ -2005,7 +1992,7 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) HAL_ADCEx_LevelOutOfWindow2Callback(hadc); /* Clear ADC analog watchdog flag */ __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD2); - } + } /* ========== Check analog watchdog 3 flag ========== */ if (((tmp_isr & ADC_FLAG_AWD3) == ADC_FLAG_AWD3) && ((tmp_ier & ADC_IT_AWD3) == ADC_IT_AWD3)) @@ -2035,23 +2022,22 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) } else { - /* check DMA configuration, depending on multimode set or not, - or whether or not multimode feature is available */ + /* Check DMA configuration */ if (ADC_IS_DUAL_CONVERSION_ENABLE(hadc) == RESET) { /* Multimode not set or feature not available or ADC independent */ if (HAL_IS_BIT_SET(hadc->Instance->CFGR, ADC_CFGR_DMAEN)) { - overrun_error = 1; - } + overrun_error = 1; + } } else { /* Multimode (when feature is available) is enabled, Common Control Register MDMA bits must be checked. */ - if (ADC_MULTIMODE_DMA_ENABLED()) + if (ADC_MULTIMODE_DMA_ENABLED(hadc)) { - overrun_error = 1; + overrun_error = 1; } } } @@ -2064,17 +2050,18 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) /* Set ADC error code to overrun */ SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_OVR); - /* Error callback */ + /* Error callback */ + /* Note: In case of overrun, ADC conversion data is preserved until */ + /* flag OVR is reset. */ + /* Therefore, old ADC conversion data can be retrieved in */ + /* function "HAL_ADC_ErrorCallback()". */ HAL_ADC_ErrorCallback(hadc); } - - /* Clear the Overrun flag, to be done AFTER HAL_ADC_ErrorCallback() since - old data is preserved until OVR is reset */ - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR); - + + /* Clear ADC overrun flag */ + __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR); } - /* ========== Check Injected context queue overflow flag ========== */ if (((tmp_isr & ADC_FLAG_JQOVF) == ADC_FLAG_JQOVF) && ((tmp_ier & ADC_IT_JQOVF) == ADC_IT_JQOVF)) { @@ -2095,7 +2082,7 @@ void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc) /** * @brief Conversion complete callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) @@ -2110,7 +2097,7 @@ __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) /** * @brief Conversion DMA half-transfer callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) @@ -2125,7 +2112,7 @@ __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc) /** * @brief Analog watchdog 1 callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc) @@ -2147,7 +2134,7 @@ __weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc) * - If needed, restart a new ADC conversion using function * "HAL_ADC_Start_DMA()" * (this function is also clearing overrun flag) - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc) @@ -2192,14 +2179,13 @@ __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc) * without resetting the ADC. * The setting of these parameters is conditioned to ADC state: * Refer to comments of structure "ADC_ChannelConfTypeDef". - * @param hadc: ADC handle - * @param sConfig: Structure of ADC channel assigned to ADC group regular. + * @param hadc ADC handle + * @param sConfig Structure of ADC channel assigned to ADC group regular. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig) { HAL_StatusTypeDef tmp_hal_status = HAL_OK; - ADC_Common_TypeDef *tmpADC_Common; uint32_t tmpOffsetShifted; __IO uint32_t wait_loop_index = 0; @@ -2235,121 +2221,93 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf /* - Channel rank */ if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) { + #if !defined (USE_FULL_ASSERT) + /* Correspondance for compatibility with legacy definition of */ + /* sequencer ranks in direct number format. This correspondance can */ + /* be done only on ranks 1 to 5 due to literal values. */ + /* Note: Sequencer ranks in direct number format are no more used */ + /* and are detected by activating USE_FULL_ASSERT feature. */ + if (sConfig->Rank <= 5U) + { + switch (sConfig->Rank) + { + case 2U: sConfig->Rank = ADC_REGULAR_RANK_2; break; + case 3U: sConfig->Rank = ADC_REGULAR_RANK_3; break; + case 4U: sConfig->Rank = ADC_REGULAR_RANK_4; break; + case 5U: sConfig->Rank = ADC_REGULAR_RANK_5; break; + /* case 1U */ + default: sConfig->Rank = ADC_REGULAR_RANK_1; + } + } + #endif - /* Regular sequence configuration */ - /* Clear the old SQx bits then set the new ones for the selected rank */ - /* For Rank 1 to 4 */ - if (sConfig->Rank < 5) - { - MODIFY_REG(hadc->Instance->SQR1, - ADC_SQR1_RK(ADC_SQR2_SQ5, sConfig->Rank), - ADC_SQR1_RK(sConfig->Channel, sConfig->Rank)); - } - /* For Rank 5 to 9 */ - else if (sConfig->Rank < 10) + /* Set ADC group regular sequence: channel on the selected scan sequence rank */ + LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel); + + /* Parameters update conditioned to ADC state: */ + /* Parameters that can be updated when ADC is disabled or enabled without */ + /* conversion on going on regular group: */ + /* - Channel sampling time */ + /* - Channel offset */ + if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) + { +#if defined(ADC_SMPR1_SMPPLUS) + /* Manage specific case of sampling time 3.5 cycles replacing 2.5 cyles */ + if(sConfig->SamplingTime == ADC_SAMPLETIME_3CYCLES_5) { - MODIFY_REG(hadc->Instance->SQR2, - ADC_SQR2_RK(ADC_SQR2_SQ5, sConfig->Rank), - ADC_SQR2_RK(sConfig->Channel, sConfig->Rank)); + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, LL_ADC_SAMPLINGTIME_2CYCLES_5); + + /* Set ADC sampling time common configuration */ + LL_ADC_SetSamplingTimeCommonConfig(hadc->Instance, LL_ADC_SAMPLINGTIME_COMMON_3C5_REPL_2C5); } - /* For Rank 10 to 14 */ - else if (sConfig->Rank < 15) - { - MODIFY_REG(hadc->Instance->SQR3, - ADC_SQR3_RK(ADC_SQR3_SQ10, sConfig->Rank), - ADC_SQR3_RK(sConfig->Channel, sConfig->Rank)); - } - /* For Rank 15 to 16 */ else - { - MODIFY_REG(hadc->Instance->SQR4, - ADC_SQR4_RK(ADC_SQR4_SQ15, sConfig->Rank), - ADC_SQR4_RK(sConfig->Channel, sConfig->Rank)); - } - - - /* Parameters update conditioned to ADC state: */ - /* Parameters that can be updated when ADC is disabled or enabled without */ - /* conversion on going on regular group: */ - /* - Channel sampling time */ - /* - Channel offset */ - if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) { - - /* Channel sampling time configuration */ - /* Clear the old sample time then set the new one for the selected channel */ - /* For channels 10 to 18 */ - if (sConfig->Channel >= ADC_CHANNEL_10) + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime); + + /* Set ADC sampling time common configuration */ + LL_ADC_SetSamplingTimeCommonConfig(hadc->Instance, LL_ADC_SAMPLINGTIME_COMMON_DEFAULT); + } +#else + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime); +#endif + + /* Configure the offset: offset enable/disable, channel, offset value */ + + /* Shift the offset with respect to the selected ADC resolution. */ + /* Offset has to be left-aligned on bit 11, the LSB (right bits) are set to 0 */ + tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, sConfig->Offset); + + if(sConfig->OffsetNumber != ADC_OFFSET_NONE) + { + /* Set ADC selected offset number */ + LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted); + + } + else + { + /* Scan each offset register to check if the selected channel is targeted. */ + /* If this is the case, the corresponding offset number is disabled. */ + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_1)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel)) { - ADC_SMPR2_SETTING(hadc, sConfig->SamplingTime, sConfig->Channel); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_1, LL_ADC_OFFSET_DISABLE); } - else /* For channels 0 to 9 */ + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_2)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel)) { - ADC_SMPR1_SETTING(hadc, sConfig->SamplingTime, sConfig->Channel); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_2, LL_ADC_OFFSET_DISABLE); } - - - /* Configure the offset: offset enable/disable, channel, offset value */ - - /* Shift the offset with respect to the selected ADC resolution. */ - /* Offset has to be left-aligned on bit 11, the LSB (right bits) are set to 0 */ - tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, sConfig->Offset); - - switch (sConfig->OffsetNumber) - { - /* Configure offset register i when applicable: */ - /* - Enable offset */ - /* - Set channel number */ - /* - Set offset value */ - case ADC_OFFSET_1: - MODIFY_REG(hadc->Instance->OFR1, - ADC_OFR_FIELDS, - ADC_OFR1_OFFSET1_EN | ADC_OFR_CHANNEL(sConfig->Channel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_2: - MODIFY_REG(hadc->Instance->OFR2, - ADC_OFR_FIELDS, - ADC_OFR2_OFFSET2_EN | ADC_OFR_CHANNEL(sConfig->Channel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_3: - MODIFY_REG(hadc->Instance->OFR3, - ADC_OFR_FIELDS, - ADC_OFR3_OFFSET3_EN | ADC_OFR_CHANNEL(sConfig->Channel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_4: - MODIFY_REG(hadc->Instance->OFR4, - ADC_OFR_FIELDS, - ADC_OFR4_OFFSET4_EN | ADC_OFR_CHANNEL(sConfig->Channel) | tmpOffsetShifted); - break; - - /* Case ADC_OFFSET_NONE */ - default : - /* Scan OFR1, OFR2, OFR3, OFR4 to check if the selected channel is enabled. - If this is the case, offset OFRx is disabled since - sConfig->OffsetNumber = ADC_OFFSET_NONE. */ - if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel)) - { - CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_OFFSET1_EN); - } - if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel)) - { - CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_OFFSET2_EN); - } - if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel)) - { - CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_OFFSET3_EN); - } - if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel)) - { - CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_OFFSET4_EN); - } - break; - } /* switch (sConfig->OffsetNumber) */ - - } /* if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) */ + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_3)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel)) + { + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_3, LL_ADC_OFFSET_DISABLE); + } + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_4)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel)) + { + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_4, LL_ADC_OFFSET_DISABLE); + } + } + } /* Parameters update conditioned to ADC state: */ /* Parameters that can be updated only when ADC is disabled: */ @@ -2357,51 +2315,31 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf /* - Internal measurement channels: Vbat/VrefInt/TempSensor */ if (ADC_IS_ENABLE(hadc) == RESET) { + /* Set mode single-ended or differential input of the selected ADC channel */ + LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff); + /* Configuration of differential mode */ - if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED) + if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED) { - /* Disable differential mode (default mode: single-ended) */ - CLEAR_BIT(hadc->Instance->DIFSEL, ADC_DIFSEL_CHANNEL(sConfig->Channel)); + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, __LL_ADC_DECIMAL_NB_TO_CHANNEL(__LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel) + 1), sConfig->SamplingTime); } - else - { - /* Enable differential mode */ - SET_BIT(hadc->Instance->DIFSEL, ADC_DIFSEL_CHANNEL(sConfig->Channel)); - - /* Sampling time configuration of channel ADC_IN+1 (negative input) */ - /* Clear the old sample time then set the new one for the selected */ - /* channel. */ - /* Starting from channel 9, SMPR2 register must be configured */ - if (sConfig->Channel >= ADC_CHANNEL_9) - { - ADC_SMPR2_SETTING(hadc, sConfig->SamplingTime, sConfig->Channel+1); - } - else /* For channels 0 to 8, SMPR1 must be configured */ - { - ADC_SMPR1_SETTING(hadc, sConfig->SamplingTime, sConfig->Channel+1); - } - } - - /* Management of internal measurement channels: Vbat/VrefInt/TempSensor. */ /* If internal channel selected, enable dedicated internal buffers and */ - /* paths. */ + /* paths. */ /* Note: these internal measurement paths can be disabled using */ /* HAL_ADC_DeInit(). */ /* Configuration of common ADC parameters */ - tmpADC_Common = ADC_COMMON_REGISTER(hadc); - - /* If the requested internal measurement path has already been enabled, */ /* bypass the configuration processing. */ if (( (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_TSEN)) ) || + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0U)) || ( (sConfig->Channel == ADC_CHANNEL_VBAT) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_VBATEN)) ) || + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_VBAT) == 0U)) || ( (sConfig->Channel == ADC_CHANNEL_VREFINT) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_VREFEN))) + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_VREFINT) == 0U)) ) { /* Configuration of common ADC parameters (continuation) */ @@ -2415,13 +2353,13 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf { if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_TSEN); - + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); + /* Delay for temperature sensor stabilization time */ /* Wait loop initialization and execution */ /* Note: Variable divided by 2 to compensate partially */ /* CPU processing cycles. */ - wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / (1000000 * 2))); + wait_loop_index = (LL_ADC_DELAY_TEMPSENSOR_STAB_US * (SystemCoreClock / (1000000 * 2))); while(wait_loop_index != 0) { wait_loop_index--; @@ -2432,15 +2370,15 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf { if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_VBATEN); + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); } } else if (sConfig->Channel == ADC_CHANNEL_VREFINT) - { + { if (ADC_VREFINT_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_VREFEN); - } + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); + } } } /* If the requested internal measurement path has already been */ @@ -2454,10 +2392,8 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf tmp_hal_status = HAL_ERROR; } } - - } /* if (ADC_IS_ENABLE(hadc) == RESET) */ - - } /* if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) */ + } + } /* If a conversion is on going on regular group, no update on regular */ /* channel could be done on neither of the channel configuration structure */ @@ -2487,27 +2423,17 @@ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConf * The setting of these parameters is conditioned to ADC state. * For parameters constraints, see comments of structure * "ADC_AnalogWDGConfTypeDef". - * @note Analog watchdog thresholds can be modified while ADC conversion - * is on going. - * In this case, some constraints must be taken into account: - * the programmed threshold values are effective from the next - * ADC EOC (end of unitary conversion). - * Considering that registers write delay may happen due to - * bus activity, this might cause an uncertainty on the - * effective timing of the new programmed threshold values. - * @param hadc: ADC handle - * @param AnalogWDGConfig: Structure of ADC analog watchdog configuration + * @note On this STM32 serie, analog watchdog thresholds cannot be modified + * while ADC conversion is on going. + * @param hadc ADC handle + * @param AnalogWDGConfig Structure of ADC analog watchdog configuration * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig) { HAL_StatusTypeDef tmp_hal_status = HAL_OK; - - uint32_t tmpAWDHighThresholdShifted; - uint32_t tmpAWDLowThresholdShifted; - - uint32_t tmpADCFlagAWD2orAWD3; - uint32_t tmpADCITAWD2orAWD3; + uint32_t tmpAWDHighThresholdShifted = 0U; + uint32_t tmpAWDLowThresholdShifted = 0U; /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); @@ -2531,136 +2457,162 @@ HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDG /* Parameters update conditioned to ADC state: */ /* Parameters that can be updated when ADC is disabled or enabled without */ - /* conversion on going on regular and injected groups: */ + /* conversion on going on ADC groups regular and injected: */ /* - Analog watchdog channels */ /* - Analog watchdog thresholds */ if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) { - - /* Analog watchdogs configuration */ + /* Analog watchdog configuration */ if(AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_1) { /* Configuration of analog watchdog: */ - /* - Set the analog watchdog enable mode: regular and/or injected */ - /* groups, one or overall group of channels. */ - /* - Set the Analog watchdog channel (is not used if watchdog */ - /* mode "all channels": ADC_CFGR_AWD1SGL=0). */ - MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_WD_FIELDS, - AnalogWDGConfig->WatchdogMode | ADC_CFGR_SET_AWD1CH(AnalogWDGConfig->Channel) ); - - /* Shift the offset with respect to the selected ADC resolution: */ + /* - Set the analog watchdog enable mode: one or overall group of */ + /* channels, on groups regular and-or injected. */ + switch(AnalogWDGConfig->WatchdogMode) + { + case ADC_ANALOGWATCHDOG_SINGLE_REG: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel, LL_ADC_GROUP_REGULAR)); + break; + + case ADC_ANALOGWATCHDOG_SINGLE_INJEC: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel, LL_ADC_GROUP_INJECTED)); + break; + + case ADC_ANALOGWATCHDOG_SINGLE_REGINJEC: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel, LL_ADC_GROUP_REGULAR_INJECTED)); + break; + + case ADC_ANALOGWATCHDOG_ALL_REG: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_REG); + break; + + case ADC_ANALOGWATCHDOG_ALL_INJEC: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_INJ); + break; + + case ADC_ANALOGWATCHDOG_ALL_REGINJEC: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_REG_INJ); + break; + + default: /* ADC_ANALOGWATCHDOG_NONE */ + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_DISABLE); + break; + } + + /* Shift the offset in function of the selected ADC resolution: */ /* Thresholds have to be left-aligned on bit 11, the LSB (right bits) */ /* are set to 0 */ tmpAWDHighThresholdShifted = ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold); tmpAWDLowThresholdShifted = ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold); - /* Set the high and low thresholds */ - MODIFY_REG(hadc->Instance->TR1, - ADC_TR1_HT1 | ADC_TR1_LT1, - ADC_TRX_HIGHTHRESHOLD(tmpAWDHighThresholdShifted) | tmpAWDLowThresholdShifted ); - - /* Clear the ADC Analog watchdog flag (in case of left enabled by */ - /* previous ADC operations) to be ready to use for HAL_ADC_IRQHandler() */ - /* or HAL_ADC_PollForEvent(). */ - __HAL_ADC_CLEAR_FLAG(hadc, ADC_IT_AWD1); - - /* Configure ADC Analog watchdog interrupt */ - if(AnalogWDGConfig->ITMode == ENABLE) - { - /* Enable the ADC Analog watchdog interrupt */ - __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD1); - } - else - { - /* Disable the ADC Analog watchdog interrupt */ - __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD1); - } + /* Set ADC analog watchdog thresholds value of both thresholds high and low */ + LL_ADC_ConfigAnalogWDThresholds(hadc->Instance, AnalogWDGConfig->WatchdogNumber, tmpAWDHighThresholdShifted, tmpAWDLowThresholdShifted); /* Update state, clear previous result related to AWD1 */ CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD1); + + /* Clear flag ADC analog watchdog */ + /* Note: Flag cleared Clear the ADC Analog watchdog flag to be ready */ + /* to use for HAL_ADC_IRQHandler() or HAL_ADC_PollForEvent() */ + /* (in case left enabled by previous ADC operations). */ + LL_ADC_ClearFlag_AWD1(hadc->Instance); + + /* Configure ADC analog watchdog interrupt */ + if(AnalogWDGConfig->ITMode == ENABLE) + { + LL_ADC_EnableIT_AWD1(hadc->Instance); + } + else + { + LL_ADC_DisableIT_AWD1(hadc->Instance); + } } - /* Case of ADC_ANALOGWATCHDOG_2 and ADC_ANALOGWATCHDOG_3 */ + /* Case of ADC_ANALOGWATCHDOG_2 or ADC_ANALOGWATCHDOG_3 */ else { - /* Shift the threshold with respect to the selected ADC resolution */ - /* have to be left-aligned on bit 7, the LSB (right bits) are set to 0 */ + switch(AnalogWDGConfig->WatchdogMode) + { + case ADC_ANALOGWATCHDOG_SINGLE_REG: + case ADC_ANALOGWATCHDOG_SINGLE_INJEC: + case ADC_ANALOGWATCHDOG_SINGLE_REGINJEC: + /* Update AWD by bitfield to keep the possibility to monitor */ + /* several channels by successive calls of this function. */ + if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2) + { + SET_BIT(hadc->Instance->AWD2CR, (1U << __LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel))); + } + else + { + SET_BIT(hadc->Instance->AWD3CR, (1U << __LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel))); + } + break; + + case ADC_ANALOGWATCHDOG_ALL_REG: + case ADC_ANALOGWATCHDOG_ALL_INJEC: + case ADC_ANALOGWATCHDOG_ALL_REGINJEC: + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, AnalogWDGConfig->WatchdogNumber, LL_ADC_AWD_ALL_CHANNELS_REG_INJ); + break; + + default: /* ADC_ANALOGWATCHDOG_NONE */ + LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, AnalogWDGConfig->WatchdogNumber, LL_ADC_AWD_DISABLE); + break; + } + + /* Shift the thresholds in function of the selected ADC resolution */ + /* have to be left-aligned on bit 7, the LSB (right bits) are set to 0 */ tmpAWDHighThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold); tmpAWDLowThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold); - + + /* Set ADC analog watchdog thresholds value of both thresholds high and low */ + LL_ADC_ConfigAnalogWDThresholds(hadc->Instance, AnalogWDGConfig->WatchdogNumber, tmpAWDHighThresholdShifted, tmpAWDLowThresholdShifted); + if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2) { - /* Set the Analog watchdog channel or group of channels. This also */ - /* enables the watchdog. */ - /* Note: Conditional register reset, because several channels can be */ - /* set by successive calls of this function. */ - if (AnalogWDGConfig->WatchdogMode != ADC_ANALOGWATCHDOG_NONE) + /* Update state, clear previous result related to AWD2 */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD2); + + /* Clear flag ADC analog watchdog */ + /* Note: Flag cleared Clear the ADC Analog watchdog flag to be ready */ + /* to use for HAL_ADC_IRQHandler() or HAL_ADC_PollForEvent() */ + /* (in case left enabled by previous ADC operations). */ + LL_ADC_ClearFlag_AWD2(hadc->Instance); + + /* Configure ADC analog watchdog interrupt */ + if(AnalogWDGConfig->ITMode == ENABLE) { - SET_BIT(hadc->Instance->AWD2CR, ADC_CFGR_SET_AWD23CR(AnalogWDGConfig->Channel)); + LL_ADC_EnableIT_AWD2(hadc->Instance); } else { - CLEAR_BIT(hadc->Instance->AWD2CR, ADC_AWD2CR_AWD2CH); + LL_ADC_DisableIT_AWD2(hadc->Instance); } - - /* Set the high and low thresholds */ - MODIFY_REG(hadc->Instance->TR2, ADC_TR2_HT2 | ADC_TR2_LT2, - ADC_TRX_HIGHTHRESHOLD (tmpAWDHighThresholdShifted) | tmpAWDLowThresholdShifted ); - - /* Set temporary variable to flag and IT of AWD2 or AWD3 for further */ - /* settings. */ - tmpADCFlagAWD2orAWD3 = ADC_FLAG_AWD2; - tmpADCITAWD2orAWD3 = ADC_IT_AWD2; - - /* Update state, clear previous result related to AWD2 */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD2); } /* (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_3) */ else { - /* Set the Analog watchdog channel or group of channels. This also */ - /* enables the watchdog. */ - /* Note: Conditional register reset, because several channels can be */ - /* set by successive calls of this function. */ - if (AnalogWDGConfig->WatchdogMode != ADC_ANALOGWATCHDOG_NONE) + /* Update state, clear previous result related to AWD3 */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD3); + + /* Clear flag ADC analog watchdog */ + /* Note: Flag cleared Clear the ADC Analog watchdog flag to be ready */ + /* to use for HAL_ADC_IRQHandler() or HAL_ADC_PollForEvent() */ + /* (in case left enabled by previous ADC operations). */ + LL_ADC_ClearFlag_AWD3(hadc->Instance); + + /* Configure ADC analog watchdog interrupt */ + if(AnalogWDGConfig->ITMode == ENABLE) { - SET_BIT(hadc->Instance->AWD3CR, ADC_CFGR_SET_AWD23CR(AnalogWDGConfig->Channel)); + LL_ADC_EnableIT_AWD3(hadc->Instance); } else { - CLEAR_BIT(hadc->Instance->AWD3CR, ADC_AWD3CR_AWD3CH); + LL_ADC_DisableIT_AWD3(hadc->Instance); } - - /* Set the high and low thresholds */ - MODIFY_REG(hadc->Instance->TR3, ADC_TR3_HT3 | ADC_TR3_LT3, - ADC_TRX_HIGHTHRESHOLD (tmpAWDHighThresholdShifted) | tmpAWDLowThresholdShifted ); - - /* Set temporary variable to flag and IT of AWD2 or AWD3 for further */ - /* settings. */ - tmpADCFlagAWD2orAWD3 = ADC_FLAG_AWD3; - tmpADCITAWD2orAWD3 = ADC_IT_AWD3; - - /* Update state, clear previous result related to AWD3 */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD3); - } - - /* Clear the ADC Analog watchdog flag (in case left enabled by */ - /* previous ADC operations) to be ready to use for HAL_ADC_IRQHandler() */ - /* or HAL_ADC_PollForEvent(). */ - __HAL_ADC_CLEAR_FLAG(hadc, tmpADCFlagAWD2orAWD3); - - /* Configure ADC Analog watchdog interrupt */ - if(AnalogWDGConfig->ITMode == ENABLE) - { - __HAL_ADC_ENABLE_IT(hadc, tmpADCITAWD2orAWD3); - } - else - { - __HAL_ADC_DISABLE_IT(hadc, tmpADCITAWD2orAWD3); } } } - /* If a conversion is on going on regular or injected groups, no update */ + /* If a conversion is on going on ADC group regular or injected, no update */ /* could be done on neither of the AWD configuration structure parameters. */ else { @@ -2669,7 +2621,6 @@ HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDG tmp_hal_status = HAL_ERROR; } - /* Process unlocked */ __HAL_UNLOCK(hadc); @@ -2706,7 +2657,7 @@ HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDG * For example: * " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_REG_BUSY)) " * " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_AWD1) ) " - * @param hadc: ADC handle + * @param hadc ADC handle * @retval ADC handle state (bitfield on 32 bits) */ uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc) @@ -2720,7 +2671,7 @@ uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc) /** * @brief Return the ADC error code. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval ADC error code (bitfield on 32 bits) */ uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc) @@ -2745,8 +2696,8 @@ uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc) /** * @brief Stop ADC conversion. - * @param hadc: ADC handle - * @param ConversionGroup: ADC group regular and/or injected. + * @param hadc ADC handle + * @param ConversionGroup ADC group regular and/or injected. * This parameter can be one of the following values: * @arg @ref ADC_REGULAR_GROUP ADC regular conversion type. * @arg @ref ADC_INJECTED_GROUP ADC injected conversion type. @@ -2808,7 +2759,7 @@ HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef* hadc, uint32_t Conversio HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADDIS) ) { /* Stop conversions on regular group */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADSTP); + LL_ADC_REG_StopConversion(hadc->Instance); } } @@ -2858,7 +2809,7 @@ HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef* hadc, uint32_t Conversio } } - } /* if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc)) */ + } /* Return HAL status */ return HAL_OK; @@ -2870,12 +2821,13 @@ HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef* hadc, uint32_t Conversio * @brief Enable the selected ADC. * @note Prerequisite condition to use this function: ADC must be disabled * and voltage regulator must be enabled (done into HAL_ADC_Init()). - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc) { uint32_t tickstart = 0; + __IO uint32_t wait_loop_index = 0; /* ADC enable and wait for ADC ready (in case of ADC is disabled or */ /* enabling phase not yet completed: flag ADC ready not yet set). */ @@ -2896,30 +2848,44 @@ HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc) } /* Enable the ADC peripheral */ - ADC_ENABLE(hadc); - + LL_ADC_Enable(hadc->Instance); + /* Delay for ADC stabilization time */ + /* Wait loop initialization and execution */ + /* Note: Variable divided by 2 to compensate partially */ + /* CPU processing cycles. */ + wait_loop_index = (LL_ADC_DELAY_INTERNAL_REGUL_STAB_US * (SystemCoreClock / (1000000 * 2))); + while(wait_loop_index != 0) + { + wait_loop_index--; + } + /* Wait for ADC effectively enabled */ - tickstart = HAL_GetTick(); + tickstart = HAL_GetTick(); while(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == RESET) { /* If ADEN bit is set less than 4 ADC clock cycles after the ADCAL bit has been cleared (after a calibration), ADEN bit is reset by the calibration logic. - The workaround is to continue setting ADEN until ADRDY is becomes 1. + The workaround is to continue setting ADEN until ADRDY is becomes 1. Additionally, ADC_ENABLE_TIMEOUT is defined to encompass this 4 ADC clock cycle duration */ - ADC_ENABLE(hadc); - - if((HAL_GetTick()-tickstart) > ADC_ENABLE_TIMEOUT) - { + /* Note: Test of ADC enabled required due to hardware constraint to */ + /* not enable ADC if already enabled. */ + if(LL_ADC_IsEnabled(hadc->Instance) == 0) + { + LL_ADC_Enable(hadc->Instance); + } + + if((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) + { /* Update ADC state machine to error */ SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); /* Set ADC error code to ADC IP internal error */ SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); - + return HAL_ERROR; } } @@ -2933,7 +2899,7 @@ HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc) * @brief Disable the selected ADC. * @note Prerequisite condition to use this function: ADC conversions must be * stopped. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef* hadc) @@ -2949,7 +2915,8 @@ HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef* hadc) if (ADC_DISABLING_CONDITIONS(hadc) != RESET) { /* Disable the ADC peripheral */ - ADC_DISABLE(hadc); + LL_ADC_Disable(hadc->Instance); + __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY)); } else { @@ -2987,7 +2954,7 @@ HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef* hadc) /** * @brief DMA transfer complete callback. - * @param hdma: pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) @@ -2996,22 +2963,26 @@ void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; /* Update state machine on conversion status if not in error state */ - if (HAL_IS_BIT_CLR(hadc->State, (HAL_ADC_STATE_ERROR_INTERNAL|HAL_ADC_STATE_ERROR_DMA))) + if(HAL_IS_BIT_CLR(hadc->State, (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA))) { - /* Update ADC state machine */ + /* Set ADC state */ SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); + + /* Determine whether any further conversion upcoming on group regular */ + /* by external trigger, continuous mode or scan sequence on going */ + /* to disable interruption. */ /* Is it the end of the regular sequence ? */ - if (HAL_IS_BIT_SET(hadc->Instance->ISR, ADC_FLAG_EOS)) + if(HAL_IS_BIT_SET(hadc->Instance->ISR, ADC_FLAG_EOS)) { /* Are conversions software-triggered ? */ if(ADC_IS_SOFTWARE_START_REGULAR(hadc)) { /* Is CONT bit set ? */ - if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == RESET) + if(READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == RESET) { /* CONT bit is not set, no more conversions expected */ CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + if(HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) { SET_BIT(hadc->State, HAL_ADC_STATE_READY); } @@ -3022,11 +2993,11 @@ void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) { /* DMA End of Transfer interrupt was triggered but conversions sequence is not over. If DMACFG is set to 0, conversions are stopped. */ - if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMACFG) == RESET) + if(READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMACFG) == RESET) { /* DMACFG bit is not set, conversions are stopped. */ CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + if(HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) { SET_BIT(hadc->State, HAL_ADC_STATE_READY); } @@ -3036,20 +3007,24 @@ void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) /* Conversion complete callback */ HAL_ADC_ConvCpltCallback(hadc); } - else /* DMA or internal error occurred (or both) */ + else /* DMA and-or internal error occurred */ { - /* In case of internal error, */ if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) { - /* call Error Callback function */ + /* Call HAL ADC Error Callback function */ HAL_ADC_ErrorCallback(hadc); } + else + { + /* Call ADC DMA error callback */ + hadc->DMA_Handle->XferErrorCallback(hdma); + } } } /** * @brief DMA half transfer complete callback. - * @param hdma: pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma) @@ -3063,7 +3038,7 @@ void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA error callback. - * @param hdma: pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void ADC_DMAError(DMA_HandleTypeDef *hdma) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.h index bd11ed33f1..522b91304b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_adc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of ADC HAL module. ****************************************************************************** * @attention @@ -46,6 +44,9 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" +/* Include low level driver */ +#include "stm32l4xx_ll_adc.h" + /** @addtogroup STM32L4xx_HAL_Driver * @{ */ @@ -65,13 +66,13 @@ typedef struct { uint32_t Ratio; /*!< Configures the oversampling ratio. - This parameter can be a value of @ref ADCEx_Oversampling_Ratio */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_RATIO */ uint32_t RightBitShift; /*!< Configures the division coefficient for the Oversampler. - This parameter can be a value of @ref ADCEx_Right_Bit_Shift */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_SHIFT */ uint32_t TriggeredMode; /*!< Selects the regular triggered oversampling mode. - This parameter can be a value of @ref ADCEx_Triggered_Oversampling_Mode */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_DISCONT_MODE */ uint32_t OversamplingStopReset; /*!< Selects the regular oversampling mode. The oversampling is either temporary stopped or reset upon an injected @@ -79,7 +80,8 @@ typedef struct If oversampling is enabled on both regular and injected groups, this parameter is discarded and forced to setting "ADC_REGOVERSAMPLING_RESUMED_MODE" (the oversampling buffer is zeroed during injection sequence). - This parameter can be a value of @ref ADCEx_Regular_Oversampling_Mode */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_SCOPE_REG */ + }ADC_OversamplingTypeDef; /** @@ -100,23 +102,23 @@ typedef struct */ typedef struct { - uint32_t ClockPrescaler; /*!< Select ADC clock source (synchronous clock derived from APB clock or asynchronous clock derived from System/PLLSAI1/PLLSAI2 clocks) and clock prescaler. - This parameter can be a value of @ref ADC_ClockPrescaler. - Note: The clock is common for all the ADCs. + uint32_t ClockPrescaler; /*!< Select ADC clock source (synchronous clock derived from APB clock or asynchronous clock derived from system clock or PLL (Refer to reference manual for list of clocks available)) and clock prescaler. + This parameter can be a value of @ref ADC_HAL_EC_COMMON_CLOCK_SOURCE. + Note: The ADC clock configuration is common to all ADC instances. Note: In case of usage of channels on injected group, ADC frequency should be lower than AHB clock frequency /4 for resolution 12 or 10 bits, AHB clock frequency /3 for resolution 8 bits, AHB clock frequency /2 for resolution 6 bits. Note: In case of synchronous clock mode based on HCLK/1, the configuration must be enabled only if the system clock has a 50% duty clock cycle (APB prescaler configured inside RCC must be bypassed and PCLK clock must have 50% duty cycle). Refer to reference manual for details. - Note: In case of usage of the ADC dedicated PLL clock, it must be preliminarily enabled at RCC top level. - Note: This parameter can be modified only if all ADCs are disabled. */ + Note: In case of usage of asynchronous clock, the selected clock must be preliminarily enabled at RCC top level. + Note: This parameter can be modified only if all ADC instances are disabled. */ uint32_t Resolution; /*!< Configure the ADC resolution. - This parameter can be a value of @ref ADC_Resolution */ + This parameter can be a value of @ref ADC_HAL_EC_RESOLUTION */ uint32_t DataAlign; /*!< Specify ADC data alignment in conversion data register (right or left). Refer to reference manual for alignments formats versus resolutions. - This parameter can be a value of @ref ADC_Data_align */ + This parameter can be a value of @ref ADC_HAL_EC_DATA_ALIGN */ uint32_t ScanConvMode; /*!< Configure the sequencer of ADC groups regular and injected. This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts. @@ -177,7 +179,7 @@ typedef struct uint32_t Overrun; /*!< Select the behavior in case of overrun: data overwritten or preserved (default). This parameter applies to ADC group regular only. - This parameter can be a value of @ref ADC_Overrun. + This parameter can be a value of @ref ADC_HAL_EC_REG_OVR_DATA_BEHAVIOR. Note: In case of overrun set to data preserved and usage with programming model with interruption (HAL_Start_IT()): ADC IRQ handler has to clear end of conversion flags, this induces the release of the preserved data. If needed, this data can be saved in function HAL_ADC_ConvCpltCallback(), placed in user program code (called before end of conversion flags clear). @@ -193,11 +195,12 @@ typedef struct ADC_OversamplingTypeDef Oversampling; /*!< Specify the Oversampling parameters. Caution: this setting overwrites the previous oversampling configuration if oversampling is already enabled. */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) uint32_t DFSDMConfig; /*!< Specify whether ADC conversion data is sent directly to DFSDM. - This parameter can be a value of @ref ADCEx_DFSDM_Mode_Configuration. - Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ + This parameter can be a value of @ref ADC_HAL_EC_REG_DFSDM_TRANSFER. + Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ + +#endif }ADC_InitTypeDef; /** @@ -208,17 +211,17 @@ typedef struct * - For all except parameters 'SamplingTime', 'Offset', 'OffsetNumber': ADC enabled without conversion on going on regular group. * - For parameters 'SamplingTime', 'Offset', 'OffsetNumber': ADC enabled without conversion on going on regular and injected groups. * If ADC is not in the appropriate state to modify some parameters, these parameters setting is bypassed - * without error reporting (as it can be the expected behavior in case of intended action to update another parameter - * (which fulfills the ADC state condition) on the fly). + * without error reporting (as it can be the expected behavior in case of intended action to update another parameter (which fulfills the ADC state condition) + * on the fly). */ typedef struct { uint32_t Channel; /*!< Specify the channel to configure into ADC regular group. - This parameter can be a value of @ref ADC_channels + This parameter can be a value of @ref ADC_HAL_EC_CHANNEL Note: Depending on devices and ADC instances, some channels may not be available on device package pins. Refer to device datasheet for channels availability. */ uint32_t Rank; /*!< Specify the rank in the regular group sequencer. - This parameter can be a value of @ref ADC_regular_rank + This parameter can be a value of @ref ADC_HAL_EC_REG_SEQ_RANKS Note: to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions adjusted) */ @@ -226,7 +229,7 @@ typedef struct Unit: ADC clock cycles Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits, 10.5 cycles at 10 bits, 8.5 cycles at 8 bits, 6.5 cycles at 6 bits). - This parameter can be a value of @ref ADC_sampling_times + This parameter can be a value of @ref ADC_HAL_EC_CHANNEL_SAMPLINGTIME Caution: This parameter applies to a channel that can be used into regular and/or injected group. It overwrites the last setting. Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor), @@ -236,7 +239,7 @@ typedef struct uint32_t SingleDiff; /*!< Select single-ended or differential input. In differential mode: Differential measurement is carried out between the selected channel 'i' (positive input) and channel 'i+1' (negative input). Only channel 'i' has to be configured, channel 'i+1' is configured automatically. - This parameter must be a value of @ref ADCEx_SingleDifferential + This parameter must be a value of @ref ADC_HAL_EC_CHANNEL_SINGLE_DIFF_ENDING Caution: This parameter applies to a channel that can be used in a regular and/or injected group. It overwrites the last setting. Note: Refer to Reference Manual to ensure the selected channel is available in differential mode. @@ -246,7 +249,7 @@ typedef struct of another parameter update on the fly) */ uint32_t OffsetNumber; /*!< Select the offset number - This parameter can be a value of @ref ADCEx_OffsetNumber + This parameter can be a value of @ref ADC_HAL_EC_OFFSET_NB Caution: Only one offset is allowed per channel. This parameter overwrites the last setting. */ uint32_t Offset; /*!< Define the offset to be subtracted from the raw converted data. @@ -255,31 +258,31 @@ typedef struct 0x3FF, 0xFF or 0x3F respectively. Note: This parameter must be modified when no conversion is on going on both regular and injected groups (ADC disabled, or ADC enabled without continuous mode or external trigger that could launch a conversion). */ + }ADC_ChannelConfTypeDef; /** * @brief Structure definition of ADC analog watchdog * @note The setting of these parameters by function HAL_ADC_AnalogWDGConfig() is conditioned to ADC state. * ADC state can be either: - * ADC disabled or ADC enabled without conversion on going on ADC groups regular and injected. + * - For all parameters: ADC disabled or ADC enabled without conversion on going on ADC groups regular and injected. */ typedef struct { uint32_t WatchdogNumber; /*!< Select which ADC analog watchdog is monitoring the selected channel. For Analog Watchdog 1: Only 1 channel can be monitored (or overall group of channels by setting parameter 'WatchdogMode') For Analog Watchdog 2 and 3: Several channels can be monitored (by successive calls of 'HAL_ADC_AnalogWDGConfig()' for each channel) - This parameter can be a value of @ref ADCEx_analog_watchdog_number. */ + This parameter can be a value of @ref ADC_HAL_EC_AWD_NUMBER. */ uint32_t WatchdogMode; /*!< Configure the ADC analog watchdog mode: single/all/none channels. - For Analog Watchdog 1: Configure the ADC analog watchdog mode: single channel/all channels, ADC groups regular and/or injected. - For Analog Watchdog 2 and 3: There is no configuration for all channels as AWD1. Set value 'ADC_ANALOGWATCHDOG_NONE' to reset - channels group programmed with parameter 'Channel', set any other value to program the channel(s) to be monitored. - This parameter can be a value of @ref ADCEx_analog_watchdog_mode. */ + For Analog Watchdog 1: Configure the ADC analog watchdog mode: single channel or all channels, ADC groups regular and-or injected. + For Analog Watchdog 2 and 3: Several channels can be monitored by applying successively the AWD init structure. Channels on ADC group regular and injected are not differentiated: Set value 'ADC_ANALOGWATCHDOG_SINGLE_xxx' to monitor 1 channel, value 'ADC_ANALOGWATCHDOG_ALL_xxx' to monitor all channels, 'ADC_ANALOGWATCHDOG_NONE' to monitor no channel. + This parameter can be a value of @ref ADC_analog_watchdog_mode. */ uint32_t Channel; /*!< Select which ADC channel to monitor by analog watchdog. For Analog Watchdog 1: this parameter has an effect only if parameter 'WatchdogMode' is configured on single channel (only 1 channel can be monitored). For Analog Watchdog 2 and 3: Several channels can be monitored. To use this feature, call successively the function HAL_ADC_AnalogWDGConfig() for each channel to be added (or removed with value 'ADC_ANALOGWATCHDOG_NONE'). - This parameter can be a value of @ref ADC_channels. */ + This parameter can be a value of @ref ADC_HAL_EC_CHANNEL. */ uint32_t ITMode; /*!< Specify whether the analog watchdog is configured in interrupt or polling mode. This parameter can be set to ENABLE or DISABLE */ @@ -297,11 +300,24 @@ typedef struct the 4 LSB are ignored, if ADC resolution is 10 bits the 2 LSB are ignored. */ }ADC_AnalogWDGConfTypeDef; +/** + * @brief ADC group injected contexts queue configuration + * @note Structure intended to be used only through structure "ADC_HandleTypeDef" + */ +typedef struct +{ + uint32_t ContextQueue; /*!< Injected channel configuration context: build-up over each + HAL_ADCEx_InjectedConfigChannel() call to finally initialize + JSQR register at HAL_ADCEx_InjectedConfigChannel() last call */ + + uint32_t ChannelCount; /*!< Number of channels in the injected sequence */ +}ADC_InjectionConfigTypeDef; + /** @defgroup ADC_States ADC States * @{ */ -/** +/** * @brief HAL ADC state machine: ADC states definition (bitfields) * @note ADC state machine is managed by bitfields, state must be compared * with bit by bit. @@ -310,41 +326,60 @@ typedef struct * " if (HAL_IS_BIT_SET(HAL_ADC_GetState(hadc1), HAL_ADC_STATE_AWD1) ) " */ /* States of ADC global scope */ -#define HAL_ADC_STATE_RESET ((uint32_t)0x00000000) /*!< ADC not yet initialized or disabled */ -#define HAL_ADC_STATE_READY ((uint32_t)0x00000001) /*!< ADC peripheral ready for use */ -#define HAL_ADC_STATE_BUSY_INTERNAL ((uint32_t)0x00000002) /*!< ADC is busy due to an internal process (initialization, calibration) */ -#define HAL_ADC_STATE_TIMEOUT ((uint32_t)0x00000004) /*!< TimeOut occurrence */ +#define HAL_ADC_STATE_RESET (0x00000000U) /*!< ADC not yet initialized or disabled */ +#define HAL_ADC_STATE_READY (0x00000001U) /*!< ADC peripheral ready for use */ +#define HAL_ADC_STATE_BUSY_INTERNAL (0x00000002U) /*!< ADC is busy due to an internal process (initialization, calibration) */ +#define HAL_ADC_STATE_TIMEOUT (0x00000004U) /*!< TimeOut occurrence */ /* States of ADC errors */ -#define HAL_ADC_STATE_ERROR_INTERNAL ((uint32_t)0x00000010) /*!< Internal error occurrence */ -#define HAL_ADC_STATE_ERROR_CONFIG ((uint32_t)0x00000020) /*!< Configuration error occurrence */ -#define HAL_ADC_STATE_ERROR_DMA ((uint32_t)0x00000040) /*!< DMA error occurrence */ +#define HAL_ADC_STATE_ERROR_INTERNAL (0x00000010U) /*!< Internal error occurrence */ +#define HAL_ADC_STATE_ERROR_CONFIG (0x00000020U) /*!< Configuration error occurrence */ +#define HAL_ADC_STATE_ERROR_DMA (0x00000040U) /*!< DMA error occurrence */ /* States of ADC group regular */ -#define HAL_ADC_STATE_REG_BUSY ((uint32_t)0x00000100) /*!< A conversion on ADC group regular is ongoing or can occur (either by continuous mode, - external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ -#define HAL_ADC_STATE_REG_EOC ((uint32_t)0x00000200) /*!< Conversion data available on group regular */ -#define HAL_ADC_STATE_REG_OVR ((uint32_t)0x00000400) /*!< Overrun occurrence */ -#define HAL_ADC_STATE_REG_EOSMP ((uint32_t)0x00000800) /*!< Not available on this STM32 serie: End Of Sampling flag raised */ +#define HAL_ADC_STATE_REG_BUSY (0x00000100U) /*!< A conversion on ADC group regular is ongoing or can occur (either by continuous mode, + external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ +#define HAL_ADC_STATE_REG_EOC (0x00000200U) /*!< Conversion data available on group regular */ +#define HAL_ADC_STATE_REG_OVR (0x00000400U) /*!< Overrun occurrence */ +#define HAL_ADC_STATE_REG_EOSMP (0x00000800U) /*!< Not available on this STM32 serie: End Of Sampling flag raised */ /* States of ADC group injected */ -#define HAL_ADC_STATE_INJ_BUSY ((uint32_t)0x00001000) /*!< A conversion on ADC group injected is ongoing or can occur (either by auto-injection mode, - external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ -#define HAL_ADC_STATE_INJ_EOC ((uint32_t)0x00002000) /*!< Conversion data available on group injected */ -#define HAL_ADC_STATE_INJ_JQOVF ((uint32_t)0x00004000) /*!< Injected queue overflow occurrence */ +#define HAL_ADC_STATE_INJ_BUSY (0x00001000U) /*!< A conversion on ADC group injected is ongoing or can occur (either by auto-injection mode, + external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ +#define HAL_ADC_STATE_INJ_EOC (0x00002000U) /*!< Conversion data available on group injected */ +#define HAL_ADC_STATE_INJ_JQOVF (0x00004000U) /*!< Injected queue overflow occurrence */ /* States of ADC analog watchdogs */ -#define HAL_ADC_STATE_AWD1 ((uint32_t)0x00010000) /*!< Out-of-window occurrence of ADC analog watchdog 1 */ -#define HAL_ADC_STATE_AWD2 ((uint32_t)0x00020000) /*!< Out-of-window occurrence of ADC analog watchdog 2 */ -#define HAL_ADC_STATE_AWD3 ((uint32_t)0x00040000) /*!< Out-of-window occurrence of ADC analog watchdog 3 */ +#define HAL_ADC_STATE_AWD1 (0x00010000U) /*!< Out-of-window occurrence of ADC analog watchdog 1 */ +#define HAL_ADC_STATE_AWD2 (0x00020000U) /*!< Out-of-window occurrence of ADC analog watchdog 2 */ +#define HAL_ADC_STATE_AWD3 (0x00040000U) /*!< Out-of-window occurrence of ADC analog watchdog 3 */ /* States of ADC multi-mode */ -#define HAL_ADC_STATE_MULTIMODE_SLAVE ((uint32_t)0x00100000) /*!< ADC in multimode slave state, controlled by another ADC master (when feature available) */ +#define HAL_ADC_STATE_MULTIMODE_SLAVE (0x00100000U) /*!< ADC in multimode slave state, controlled by another ADC master (when feature available) */ /** * @} */ +/** + * @brief ADC handle Structure definition + */ +typedef struct +{ + ADC_TypeDef *Instance; /*!< Register base address */ + + ADC_InitTypeDef Init; /*!< ADC initialization parameters and regular conversions setting */ + + DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */ + + HAL_LockTypeDef Lock; /*!< ADC locking object */ + + __IO uint32_t State; /*!< ADC communication state (bitmap of ADC states) */ + + __IO uint32_t ErrorCode; /*!< ADC Error code */ + + ADC_InjectionConfigTypeDef InjectionConfig ; /*!< ADC injected channel configuration build-up structure */ +}ADC_HandleTypeDef; /** * @} @@ -360,59 +395,59 @@ typedef struct /** @defgroup ADC_Error_Code ADC Error Code * @{ */ -#define HAL_ADC_ERROR_NONE ((uint32_t)0x00) /*!< No error */ -#define HAL_ADC_ERROR_INTERNAL ((uint32_t)0x01) /*!< ADC IP internal error (problem of clocking, - enable/disable, erroneous state, ...) */ -#define HAL_ADC_ERROR_OVR ((uint32_t)0x02) /*!< Overrun error */ -#define HAL_ADC_ERROR_DMA ((uint32_t)0x04) /*!< DMA transfer error */ -#define HAL_ADC_ERROR_JQOVF ((uint32_t)0x08) /*!< Injected context queue overflow error */ +#define HAL_ADC_ERROR_NONE (0x00U) /*!< No error */ +#define HAL_ADC_ERROR_INTERNAL (0x01U) /*!< ADC IP internal error (problem of clocking, + enable/disable, erroneous state, ...) */ +#define HAL_ADC_ERROR_OVR (0x02U) /*!< Overrun error */ +#define HAL_ADC_ERROR_DMA (0x04U) /*!< DMA transfer error */ +#define HAL_ADC_ERROR_JQOVF (0x08U) /*!< Injected context queue overflow error */ /** * @} */ -/** @defgroup ADC_ClockPrescaler ADC clock source and clock prescaler +/** @defgroup ADC_HAL_EC_COMMON_CLOCK_SOURCE ADC common - Clock source * @{ */ -#define ADC_CLOCK_SYNC_PCLK_DIV1 ((uint32_t)ADC_CCR_CKMODE_0) /*!< ADC synchronous clock derived from AHB clock not divided */ -#define ADC_CLOCK_SYNC_PCLK_DIV2 ((uint32_t)ADC_CCR_CKMODE_1) /*!< ADC synchronous clock derived from AHB clock divided by 2 */ -#define ADC_CLOCK_SYNC_PCLK_DIV4 ((uint32_t)ADC_CCR_CKMODE) /*!< ADC synchronous clock derived from AHB clock divided by 4 */ +#define ADC_CLOCK_SYNC_PCLK_DIV1 (LL_ADC_CLOCK_SYNC_PCLK_DIV1) /*!< ADC synchronous clock derived from AHB clock without prescaler */ +#define ADC_CLOCK_SYNC_PCLK_DIV2 (LL_ADC_CLOCK_SYNC_PCLK_DIV2) /*!< ADC synchronous clock derived from AHB clock with prescaler division by 2 */ +#define ADC_CLOCK_SYNC_PCLK_DIV4 (LL_ADC_CLOCK_SYNC_PCLK_DIV4) /*!< ADC synchronous clock derived from AHB clock with prescaler division by 4 */ -#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 /*!< Obsolete naming, kept for compatibility with some other devices */ -#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 /*!< Obsolete naming, kept for compatibility with some other devices */ -#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 /*!< Obsolete naming, kept for compatibility with some other devices */ +#define ADC_CLOCK_ASYNC_DIV1 (LL_ADC_CLOCK_ASYNC_DIV1) /*!< ADC asynchronous clock without prescaler */ +#define ADC_CLOCK_ASYNC_DIV2 (LL_ADC_CLOCK_ASYNC_DIV2) /*!< ADC asynchronous clock with prescaler division by 2 */ +#define ADC_CLOCK_ASYNC_DIV4 (LL_ADC_CLOCK_ASYNC_DIV4) /*!< ADC asynchronous clock with prescaler division by 4 */ +#define ADC_CLOCK_ASYNC_DIV6 (LL_ADC_CLOCK_ASYNC_DIV6) /*!< ADC asynchronous clock with prescaler division by 6 */ +#define ADC_CLOCK_ASYNC_DIV8 (LL_ADC_CLOCK_ASYNC_DIV8) /*!< ADC asynchronous clock with prescaler division by 8 */ +#define ADC_CLOCK_ASYNC_DIV10 (LL_ADC_CLOCK_ASYNC_DIV10) /*!< ADC asynchronous clock with prescaler division by 10 */ +#define ADC_CLOCK_ASYNC_DIV12 (LL_ADC_CLOCK_ASYNC_DIV12) /*!< ADC asynchronous clock with prescaler division by 12 */ +#define ADC_CLOCK_ASYNC_DIV16 (LL_ADC_CLOCK_ASYNC_DIV16) /*!< ADC asynchronous clock with prescaler division by 16 */ +#define ADC_CLOCK_ASYNC_DIV32 (LL_ADC_CLOCK_ASYNC_DIV32) /*!< ADC asynchronous clock with prescaler division by 32 */ +#define ADC_CLOCK_ASYNC_DIV64 (LL_ADC_CLOCK_ASYNC_DIV64) /*!< ADC asynchronous clock with prescaler division by 64 */ +#define ADC_CLOCK_ASYNC_DIV128 (LL_ADC_CLOCK_ASYNC_DIV128) /*!< ADC asynchronous clock with prescaler division by 128 */ +#define ADC_CLOCK_ASYNC_DIV256 (LL_ADC_CLOCK_ASYNC_DIV256) /*!< ADC asynchronous clock with prescaler division by 256 */ -#define ADC_CLOCK_ASYNC_DIV1 ((uint32_t)0x00000000) /*!< ADC asynchronous clock not divided */ -#define ADC_CLOCK_ASYNC_DIV2 ((uint32_t)ADC_CCR_PRESC_0) /*!< ADC asynchronous clock divided by 2 */ -#define ADC_CLOCK_ASYNC_DIV4 ((uint32_t)ADC_CCR_PRESC_1) /*!< ADC asynchronous clock divided by 4 */ -#define ADC_CLOCK_ASYNC_DIV6 ((uint32_t)(ADC_CCR_PRESC_1|ADC_CCR_PRESC_0)) /*!< ADC asynchronous clock divided by 6 */ -#define ADC_CLOCK_ASYNC_DIV8 ((uint32_t)(ADC_CCR_PRESC_2)) /*!< ADC asynchronous clock divided by 8 */ -#define ADC_CLOCK_ASYNC_DIV10 ((uint32_t)(ADC_CCR_PRESC_2|ADC_CCR_PRESC_0)) /*!< ADC asynchronous clock divided by 10 */ -#define ADC_CLOCK_ASYNC_DIV12 ((uint32_t)(ADC_CCR_PRESC_2|ADC_CCR_PRESC_1)) /*!< ADC asynchronous clock divided by 12 */ -#define ADC_CLOCK_ASYNC_DIV16 ((uint32_t)(ADC_CCR_PRESC_2|ADC_CCR_PRESC_1|ADC_CCR_PRESC_0)) /*!< ADC asynchronous clock divided by 16 */ -#define ADC_CLOCK_ASYNC_DIV32 ((uint32_t)(ADC_CCR_PRESC_3)) /*!< ADC asynchronous clock divided by 32 */ -#define ADC_CLOCK_ASYNC_DIV64 ((uint32_t)(ADC_CCR_PRESC_3|ADC_CCR_PRESC_0)) /*!< ADC asynchronous clock divided by 64 */ -#define ADC_CLOCK_ASYNC_DIV128 ((uint32_t)(ADC_CCR_PRESC_3|ADC_CCR_PRESC_1)) /*!< ADC asynchronous clock divided by 128 */ -#define ADC_CLOCK_ASYNC_DIV256 ((uint32_t)(ADC_CCR_PRESC_3|ADC_CCR_PRESC_1|ADC_CCR_PRESC_0)) /*!< ADC asynchronous clock divided by 256 */ +#define ADC_CLOCKPRESCALER_PCLK_DIV1 ADC_CLOCK_SYNC_PCLK_DIV1 /*!< Obsolete naming, kept for compatibility with some other devices */ +#define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 /*!< Obsolete naming, kept for compatibility with some other devices */ +#define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 /*!< Obsolete naming, kept for compatibility with some other devices */ /** * @} */ -/** @defgroup ADC_Resolution ADC Resolution +/** @defgroup ADC_HAL_EC_RESOLUTION ADC instance - Resolution * @{ */ -#define ADC_RESOLUTION_12B ((uint32_t)0x00000000) /*!< ADC 12-bit resolution */ -#define ADC_RESOLUTION_10B ((uint32_t)ADC_CFGR_RES_0) /*!< ADC 10-bit resolution */ -#define ADC_RESOLUTION_8B ((uint32_t)ADC_CFGR_RES_1) /*!< ADC 8-bit resolution */ -#define ADC_RESOLUTION_6B ((uint32_t)ADC_CFGR_RES) /*!< ADC 6-bit resolution */ +#define ADC_RESOLUTION_12B (LL_ADC_RESOLUTION_12B) /*!< ADC resolution 12 bits */ +#define ADC_RESOLUTION_10B (LL_ADC_RESOLUTION_10B) /*!< ADC resolution 10 bits */ +#define ADC_RESOLUTION_8B (LL_ADC_RESOLUTION_8B) /*!< ADC resolution 8 bits */ +#define ADC_RESOLUTION_6B (LL_ADC_RESOLUTION_6B) /*!< ADC resolution 6 bits */ /** * @} */ -/** @defgroup ADC_Data_align ADC conversion data alignment +/** @defgroup ADC_HAL_EC_DATA_ALIGN ADC conversion data alignment * @{ */ -#define ADC_DATAALIGN_RIGHT ((uint32_t)0x00000000) /*!< Data right alignment */ -#define ADC_DATAALIGN_LEFT ((uint32_t)ADC_CFGR_ALIGN) /*!< Data left alignment */ +#define ADC_DATAALIGN_RIGHT (LL_ADC_DATA_ALIGN_RIGHT)/*!< ADC conversion data alignment: right aligned (alignment on data register LSB bit 0)*/ +#define ADC_DATAALIGN_LEFT (LL_ADC_DATA_ALIGN_LEFT) /*!< ADC conversion data alignment: left aligned (aligment on data register MSB bit 15)*/ /** * @} */ @@ -420,8 +455,8 @@ typedef struct /** @defgroup ADC_Scan_mode ADC sequencer scan mode * @{ */ -#define ADC_SCAN_DISABLE ((uint32_t)0x00000000) /*!< Scan mode disabled */ -#define ADC_SCAN_ENABLE ((uint32_t)0x00000001) /*!< Scan mode enabled */ +#define ADC_SCAN_DISABLE (0x00000000U) /*!< Scan mode disabled */ +#define ADC_SCAN_ENABLE (0x00000001U) /*!< Scan mode enabled */ /** * @} */ @@ -430,23 +465,23 @@ typedef struct * @{ */ /* ADC group regular trigger sources for all ADC instances */ -#define ADC_EXTERNALTRIG_T1_CC1 ((uint32_t)0x00000000) /*!< Event 0 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T1_CC2 ((uint32_t)ADC_CFGR_EXTSEL_0) /*!< Event 1 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T1_CC3 ((uint32_t)ADC_CFGR_EXTSEL_1) /*!< Event 2 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T2_CC2 ((uint32_t)(ADC_CFGR_EXTSEL_1 | ADC_CFGR_EXTSEL_0)) /*!< Event 3 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T3_TRGO ((uint32_t)ADC_CFGR_EXTSEL_2) /*!< Event 4 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T4_CC4 ((uint32_t)(ADC_CFGR_EXTSEL_2 | ADC_CFGR_EXTSEL_0)) /*!< Event 5 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_EXT_IT11 ((uint32_t)(ADC_CFGR_EXTSEL_2 | ADC_CFGR_EXTSEL_1)) /*!< Event 6 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T8_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_2 | ADC_CFGR_EXTSEL_1 | ADC_CFGR_EXTSEL_0)) /*!< Event 7 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T8_TRGO2 ((uint32_t) ADC_CFGR_EXTSEL_3) /*!< Event 8 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T1_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_0)) /*!< Event 9 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T1_TRGO2 ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_1)) /*!< Event 10 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T2_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_1 | ADC_CFGR_EXTSEL_0)) /*!< Event 11 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T4_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_2)) /*!< Event 12 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T6_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_2 | ADC_CFGR_EXTSEL_0)) /*!< Event 13 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T15_TRGO ((uint32_t)(ADC_CFGR_EXTSEL_3 | ADC_CFGR_EXTSEL_2 | ADC_CFGR_EXTSEL_1)) /*!< Event 14 triggers regular group conversion start */ -#define ADC_EXTERNALTRIG_T3_CC4 ((uint32_t)ADC_CFGR_EXTSEL) /*!< Event 15 triggers regular group conversion start */ -#define ADC_SOFTWARE_START ((uint32_t)0x00000001) /*!< Software triggers regular group conversion start */ +#define ADC_SOFTWARE_START (LL_ADC_REG_TRIG_SOFTWARE) /*!< ADC group regular conversion trigger internal: SW start. */ +#define ADC_EXTERNALTRIG_T1_TRGO (LL_ADC_REG_TRIG_EXT_TIM1_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM1 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T1_TRGO2 (LL_ADC_REG_TRIG_EXT_TIM1_TRGO2) /*!< ADC group regular conversion trigger from external IP: TIM1 TRGO2. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T1_CC1 (LL_ADC_REG_TRIG_EXT_TIM1_CH1) /*!< ADC group regular conversion trigger from external IP: TIM1 channel 1 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T1_CC2 (LL_ADC_REG_TRIG_EXT_TIM1_CH2) /*!< ADC group regular conversion trigger from external IP: TIM1 channel 2 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T1_CC3 (LL_ADC_REG_TRIG_EXT_TIM1_CH3) /*!< ADC group regular conversion trigger from external IP: TIM1 channel 3 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T2_TRGO (LL_ADC_REG_TRIG_EXT_TIM2_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM2 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T2_CC2 (LL_ADC_REG_TRIG_EXT_TIM2_CH2) /*!< ADC group regular conversion trigger from external IP: TIM2 channel 2 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T3_TRGO (LL_ADC_REG_TRIG_EXT_TIM3_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM3 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T3_CC4 (LL_ADC_REG_TRIG_EXT_TIM3_CH4) /*!< ADC group regular conversion trigger from external IP: TIM3 channel 4 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T4_TRGO (LL_ADC_REG_TRIG_EXT_TIM4_CH4) /*!< ADC group regular conversion trigger from external IP: TIM4 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T4_CC4 (LL_ADC_REG_TRIG_EXT_TIM4_CH4) /*!< ADC group regular conversion trigger from external IP: TIM4 channel 4 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T6_TRGO (LL_ADC_REG_TRIG_EXT_TIM6_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM6 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T8_TRGO (LL_ADC_REG_TRIG_EXT_TIM8_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM8 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T8_TRGO2 (LL_ADC_REG_TRIG_EXT_TIM8_TRGO2) /*!< ADC group regular conversion trigger from external IP: TIM8 TRGO2. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_T15_TRGO (LL_ADC_REG_TRIG_EXT_TIM15_TRGO) /*!< ADC group regular conversion trigger from external IP: TIM15 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIG_EXT_IT11 (LL_ADC_REG_TRIG_EXT_EXTI_LINE11) /*!< ADC group regular conversion trigger from external IP: external interrupt line 11. Trigger edge set to rising edge (default setting). */ /** * @} */ @@ -454,10 +489,10 @@ typedef struct /** @defgroup ADC_regular_external_trigger_edge ADC group regular trigger edge (when external trigger is selected) * @{ */ -#define ADC_EXTERNALTRIGCONVEDGE_NONE ((uint32_t)0x00000000) /*!< Regular conversions hardware trigger detection disabled */ -#define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CFGR_EXTEN_0) /*!< Regular conversions hardware trigger detection on the rising edge */ -#define ADC_EXTERNALTRIGCONVEDGE_FALLING ((uint32_t)ADC_CFGR_EXTEN_1) /*!< Regular conversions hardware trigger detection on the falling edge */ -#define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING ((uint32_t)ADC_CFGR_EXTEN) /*!< Regular conversions hardware trigger detection on both the rising and falling edges */ +#define ADC_EXTERNALTRIGCONVEDGE_NONE (0x00000000) /*!< Regular conversions hardware trigger detection disabled */ +#define ADC_EXTERNALTRIGCONVEDGE_RISING (ADC_CFGR_EXTEN_0) /*!< Regular conversions hardware trigger detection on the rising edge */ +#define ADC_EXTERNALTRIGCONVEDGE_FALLING (ADC_CFGR_EXTEN_1) /*!< Regular conversions hardware trigger detection on the falling edge */ +#define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING (ADC_CFGR_EXTEN) /*!< Regular conversions hardware trigger detection on both the rising and falling edges */ /** * @} */ @@ -465,126 +500,282 @@ typedef struct /** @defgroup ADC_EOCSelection ADC sequencer end of unitary conversion or sequence conversions * @{ */ -#define ADC_EOC_SINGLE_CONV ((uint32_t) ADC_ISR_EOC) /*!< End of unitary conversion flag */ -#define ADC_EOC_SEQ_CONV ((uint32_t) ADC_ISR_EOS) /*!< End of sequence conversions flag */ -#define ADC_EOC_SINGLE_SEQ_CONV ((uint32_t)(ADC_ISR_EOC | ADC_ISR_EOS)) /*!< Reserved for future use */ +#define ADC_EOC_SINGLE_CONV (ADC_ISR_EOC) /*!< End of unitary conversion flag */ +#define ADC_EOC_SEQ_CONV (ADC_ISR_EOS) /*!< End of sequence conversions flag */ /** * @} */ -/** @defgroup ADC_Overrun ADC overrun +/** @defgroup ADC_HAL_EC_REG_OVR_DATA_BEHAVIOR ADC group regular - Overrun behavior on conversion data * @{ */ -#define ADC_OVR_DATA_PRESERVED ((uint32_t)0x00000000) /*!< Data preserved in case of overrun */ -#define ADC_OVR_DATA_OVERWRITTEN ((uint32_t)ADC_CFGR_OVRMOD) /*!< Data overwritten in case of overrun */ +#define ADC_OVR_DATA_PRESERVED (LL_ADC_REG_OVR_DATA_PRESERVED) /*!< ADC group regular behavior in case of overrun: data preserved */ +#define ADC_OVR_DATA_OVERWRITTEN (LL_ADC_REG_OVR_DATA_OVERWRITTEN) /*!< ADC group regular behavior in case of overrun: data overwritten */ /** * @} */ -/** @defgroup ADC_regular_rank ADC group regular sequencer rank +/** @defgroup ADC_HAL_EC_REG_SEQ_RANKS ADC group regular - Sequencer ranks * @{ */ -#define ADC_REGULAR_RANK_1 ((uint32_t)0x00000001) /*!< ADC regular conversion rank 1 */ -#define ADC_REGULAR_RANK_2 ((uint32_t)0x00000002) /*!< ADC regular conversion rank 2 */ -#define ADC_REGULAR_RANK_3 ((uint32_t)0x00000003) /*!< ADC regular conversion rank 3 */ -#define ADC_REGULAR_RANK_4 ((uint32_t)0x00000004) /*!< ADC regular conversion rank 4 */ -#define ADC_REGULAR_RANK_5 ((uint32_t)0x00000005) /*!< ADC regular conversion rank 5 */ -#define ADC_REGULAR_RANK_6 ((uint32_t)0x00000006) /*!< ADC regular conversion rank 6 */ -#define ADC_REGULAR_RANK_7 ((uint32_t)0x00000007) /*!< ADC regular conversion rank 7 */ -#define ADC_REGULAR_RANK_8 ((uint32_t)0x00000008) /*!< ADC regular conversion rank 8 */ -#define ADC_REGULAR_RANK_9 ((uint32_t)0x00000009) /*!< ADC regular conversion rank 9 */ -#define ADC_REGULAR_RANK_10 ((uint32_t)0x0000000A) /*!< ADC regular conversion rank 10 */ -#define ADC_REGULAR_RANK_11 ((uint32_t)0x0000000B) /*!< ADC regular conversion rank 11 */ -#define ADC_REGULAR_RANK_12 ((uint32_t)0x0000000C) /*!< ADC regular conversion rank 12 */ -#define ADC_REGULAR_RANK_13 ((uint32_t)0x0000000D) /*!< ADC regular conversion rank 13 */ -#define ADC_REGULAR_RANK_14 ((uint32_t)0x0000000E) /*!< ADC regular conversion rank 14 */ -#define ADC_REGULAR_RANK_15 ((uint32_t)0x0000000F) /*!< ADC regular conversion rank 15 */ -#define ADC_REGULAR_RANK_16 ((uint32_t)0x00000010) /*!< ADC regular conversion rank 16 */ +#define ADC_REGULAR_RANK_1 (LL_ADC_REG_RANK_1) /*!< ADC group regular sequencer rank 1 */ +#define ADC_REGULAR_RANK_2 (LL_ADC_REG_RANK_2) /*!< ADC group regular sequencer rank 2 */ +#define ADC_REGULAR_RANK_3 (LL_ADC_REG_RANK_3) /*!< ADC group regular sequencer rank 3 */ +#define ADC_REGULAR_RANK_4 (LL_ADC_REG_RANK_4) /*!< ADC group regular sequencer rank 4 */ +#define ADC_REGULAR_RANK_5 (LL_ADC_REG_RANK_5) /*!< ADC group regular sequencer rank 5 */ +#define ADC_REGULAR_RANK_6 (LL_ADC_REG_RANK_6) /*!< ADC group regular sequencer rank 6 */ +#define ADC_REGULAR_RANK_7 (LL_ADC_REG_RANK_7) /*!< ADC group regular sequencer rank 7 */ +#define ADC_REGULAR_RANK_8 (LL_ADC_REG_RANK_8) /*!< ADC group regular sequencer rank 8 */ +#define ADC_REGULAR_RANK_9 (LL_ADC_REG_RANK_9) /*!< ADC group regular sequencer rank 9 */ +#define ADC_REGULAR_RANK_10 (LL_ADC_REG_RANK_10) /*!< ADC group regular sequencer rank 10 */ +#define ADC_REGULAR_RANK_11 (LL_ADC_REG_RANK_11) /*!< ADC group regular sequencer rank 11 */ +#define ADC_REGULAR_RANK_12 (LL_ADC_REG_RANK_12) /*!< ADC group regular sequencer rank 12 */ +#define ADC_REGULAR_RANK_13 (LL_ADC_REG_RANK_13) /*!< ADC group regular sequencer rank 13 */ +#define ADC_REGULAR_RANK_14 (LL_ADC_REG_RANK_14) /*!< ADC group regular sequencer rank 14 */ +#define ADC_REGULAR_RANK_15 (LL_ADC_REG_RANK_15) /*!< ADC group regular sequencer rank 15 */ +#define ADC_REGULAR_RANK_16 (LL_ADC_REG_RANK_16) /*!< ADC group regular sequencer rank 16 */ /** * @} */ -/** @defgroup ADC_channels ADC channels +/** @defgroup ADC_HAL_EC_CHANNEL_SAMPLINGTIME Channel - Sampling time * @{ */ -#define ADC_CHANNEL_0 ((uint32_t)(0x00000000)) /*!< ADC channel 0 */ -#define ADC_CHANNEL_1 ((uint32_t)(ADC_SQR3_SQ10_0)) /*!< ADC channel 1 */ -#define ADC_CHANNEL_2 ((uint32_t)(ADC_SQR3_SQ10_1)) /*!< ADC channel 2 */ -#define ADC_CHANNEL_3 ((uint32_t)(ADC_SQR3_SQ10_1 | ADC_SQR3_SQ10_0)) /*!< ADC channel 3 */ -#define ADC_CHANNEL_4 ((uint32_t)(ADC_SQR3_SQ10_2)) /*!< ADC channel 4 */ -#define ADC_CHANNEL_5 ((uint32_t)(ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_0)) /*!< ADC channel 5 */ -#define ADC_CHANNEL_6 ((uint32_t)(ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_1)) /*!< ADC channel 6 */ -#define ADC_CHANNEL_7 ((uint32_t)(ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_1 | ADC_SQR3_SQ10_0)) /*!< ADC channel 7 */ -#define ADC_CHANNEL_8 ((uint32_t)(ADC_SQR3_SQ10_3)) /*!< ADC channel 8 */ -#define ADC_CHANNEL_9 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_0)) /*!< ADC channel 9 */ -#define ADC_CHANNEL_10 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_1)) /*!< ADC channel 10 */ -#define ADC_CHANNEL_11 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_1 | ADC_SQR3_SQ10_0)) /*!< ADC channel 11 */ -#define ADC_CHANNEL_12 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_2)) /*!< ADC channel 12 */ -#define ADC_CHANNEL_13 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_0)) /*!< ADC channel 13 */ -#define ADC_CHANNEL_14 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_1)) /*!< ADC channel 14 */ -#define ADC_CHANNEL_15 ((uint32_t)(ADC_SQR3_SQ10_3 | ADC_SQR3_SQ10_2 | ADC_SQR3_SQ10_1 | ADC_SQR3_SQ10_0)) /*!< ADC channel 15 */ -#define ADC_CHANNEL_16 ((uint32_t)(ADC_SQR3_SQ10_4)) /*!< ADC channel 16 */ -#define ADC_CHANNEL_17 ((uint32_t)(ADC_SQR3_SQ10_4 | ADC_SQR3_SQ10_0)) /*!< ADC channel 17 */ -#define ADC_CHANNEL_18 ((uint32_t)(ADC_SQR3_SQ10_4 | ADC_SQR3_SQ10_1)) /*!< ADC channel 18 */ - -/* Note: VrefInt, TempSensor and Vbat internal channels are not available on all ADC's - (information present in Reference Manual) */ -#define ADC_CHANNEL_TEMPSENSOR ADC_CHANNEL_17 /*!< ADC temperature sensor channel */ -#define ADC_CHANNEL_VBAT ADC_CHANNEL_18 /*!< ADC Vbat channel */ -#define ADC_CHANNEL_VREFINT ADC_CHANNEL_0 /*!< ADC Vrefint channel */ +#define ADC_SAMPLETIME_2CYCLES_5 (LL_ADC_SAMPLINGTIME_2CYCLES_5) /*!< Sampling time 2.5 ADC clock cycles */ +#define ADC_SAMPLETIME_6CYCLES_5 (LL_ADC_SAMPLINGTIME_6CYCLES_5) /*!< Sampling time 6.5 ADC clock cycles */ +#define ADC_SAMPLETIME_12CYCLES_5 (LL_ADC_SAMPLINGTIME_12CYCLES_5) /*!< Sampling time 12.5 ADC clock cycles */ +#define ADC_SAMPLETIME_24CYCLES_5 (LL_ADC_SAMPLINGTIME_24CYCLES_5) /*!< Sampling time 24.5 ADC clock cycles */ +#define ADC_SAMPLETIME_47CYCLES_5 (LL_ADC_SAMPLINGTIME_47CYCLES_5) /*!< Sampling time 47.5 ADC clock cycles */ +#define ADC_SAMPLETIME_92CYCLES_5 (LL_ADC_SAMPLINGTIME_92CYCLES_5) /*!< Sampling time 92.5 ADC clock cycles */ +#define ADC_SAMPLETIME_247CYCLES_5 (LL_ADC_SAMPLINGTIME_247CYCLES_5) /*!< Sampling time 247.5 ADC clock cycles */ +#define ADC_SAMPLETIME_640CYCLES_5 (LL_ADC_SAMPLINGTIME_640CYCLES_5) /*!< Sampling time 640.5 ADC clock cycles */ +#if defined(ADC_SMPR1_SMPPLUS) +#define ADC_SAMPLETIME_3CYCLES_5 (ADC_SMPR1_SMPPLUS | LL_ADC_SAMPLINGTIME_2CYCLES_5) /*!< Sampling time 3.5 ADC clock cycles. If selected, this sampling time replaces all sampling time 2.5 ADC clock cycles. These 2 sampling times cannot be used simultaneously. */ +#endif +/** + * @} + */ +/** @defgroup ADC_HAL_EC_CHANNEL ADC instance - Channel number + * @{ + */ +/* Note: VrefInt, TempSensor and Vbat internal channels are not available on */ +/* all ADC instances (refer to Reference Manual). */ +#define ADC_CHANNEL_0 (LL_ADC_CHANNEL_0) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN0 */ +#define ADC_CHANNEL_1 (LL_ADC_CHANNEL_1) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN1 */ +#define ADC_CHANNEL_2 (LL_ADC_CHANNEL_2) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN2 */ +#define ADC_CHANNEL_3 (LL_ADC_CHANNEL_3) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN3 */ +#define ADC_CHANNEL_4 (LL_ADC_CHANNEL_4) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN4 */ +#define ADC_CHANNEL_5 (LL_ADC_CHANNEL_5) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN5 */ +#define ADC_CHANNEL_6 (LL_ADC_CHANNEL_6) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN6 */ +#define ADC_CHANNEL_7 (LL_ADC_CHANNEL_7) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN7 */ +#define ADC_CHANNEL_8 (LL_ADC_CHANNEL_8) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN8 */ +#define ADC_CHANNEL_9 (LL_ADC_CHANNEL_9) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN9 */ +#define ADC_CHANNEL_10 (LL_ADC_CHANNEL_10) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN10 */ +#define ADC_CHANNEL_11 (LL_ADC_CHANNEL_11) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN11 */ +#define ADC_CHANNEL_12 (LL_ADC_CHANNEL_12) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN12 */ +#define ADC_CHANNEL_13 (LL_ADC_CHANNEL_13) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN13 */ +#define ADC_CHANNEL_14 (LL_ADC_CHANNEL_14) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN14 */ +#define ADC_CHANNEL_15 (LL_ADC_CHANNEL_15) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN15 */ +#define ADC_CHANNEL_16 (LL_ADC_CHANNEL_16) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN16 */ +#define ADC_CHANNEL_17 (LL_ADC_CHANNEL_17) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN17 */ +#define ADC_CHANNEL_18 (LL_ADC_CHANNEL_18) /*!< ADC external channel (channel connected to GPIO pin) ADCx_IN18 */ +#define ADC_CHANNEL_VREFINT (LL_ADC_CHANNEL_VREFINT) /*!< ADC internal channel connected to VrefInt: Internal voltage reference. */ +#define ADC_CHANNEL_TEMPSENSOR (LL_ADC_CHANNEL_TEMPSENSOR) /*!< ADC internal channel connected to Temperature sensor. */ +#define ADC_CHANNEL_VBAT (LL_ADC_CHANNEL_VBAT) /*!< ADC internal channel connected to Vbat/3: Vbat voltage through a divider ladder of factor 1/3 to have Vbat always below Vdda. */ #if defined(ADC1) && !defined(ADC2) -#define ADC_CHANNEL_DAC1CH1 (ADC_CHANNEL_17) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC1. This channel is shared with ADC internal channel connected to temperature sensor, they cannot be used both simultenaeously. */ -#define ADC_CHANNEL_DAC1CH2 (ADC_CHANNEL_18) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC1. This channel is shared with ADC internal channel connected to Vbat, they cannot be used both simultenaeously. */ +#define ADC_CHANNEL_DAC1CH1 (LL_ADC_CHANNEL_DAC1CH1) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC1. This channel is shared with ADC internal channel connected to temperature sensor, selection is done using function @ref LL_ADC_SetCommonPathInternalCh(). */ +#define ADC_CHANNEL_DAC1CH2 (LL_ADC_CHANNEL_DAC1CH2) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC1. This channel is shared with ADC internal channel connected to Vbat, selection is done using function @ref LL_ADC_SetCommonPathInternalCh(). */ #elif defined(ADC2) -#define ADC_CHANNEL_DAC1CH1_ADC2 (ADC_CHANNEL_17) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC2 */ -#define ADC_CHANNEL_DAC1CH2_ADC2 (ADC_CHANNEL_18) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC2 */ +#define ADC_CHANNEL_DAC1CH1_ADC2 (LL_ADC_CHANNEL_DAC1CH1_ADC2) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC2 */ +#define ADC_CHANNEL_DAC1CH2_ADC2 (LL_ADC_CHANNEL_DAC1CH2_ADC2) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC2 */ #if defined(ADC3) -#define ADC_CHANNEL_DAC1CH1_ADC3 (ADC_CHANNEL_14) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC3 */ -#define ADC_CHANNEL_DAC1CH2_ADC3 (ADC_CHANNEL_15) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC3 */ +#define ADC_CHANNEL_DAC1CH1_ADC3 (LL_ADC_CHANNEL_DAC1CH1_ADC3) /*!< ADC internal channel connected to DAC1 channel 1, channel specific to ADC3 */ +#define ADC_CHANNEL_DAC1CH2_ADC3 (LL_ADC_CHANNEL_DAC1CH2_ADC3) /*!< ADC internal channel connected to DAC1 channel 2, channel specific to ADC3 */ #endif #endif /** * @} */ - -/** - * @} - */ - -/* Private macros ------------------------------------------------------------*/ - -/** @defgroup ADC_Private_Macro ADC Private Macros +/** @defgroup ADC_HAL_EC_AWD_NUMBER Analog watchdog - Analog watchdog number * @{ */ +#define ADC_ANALOGWATCHDOG_1 (LL_ADC_AWD1) /*!< ADC analog watchdog number 1 */ +#define ADC_ANALOGWATCHDOG_2 (LL_ADC_AWD2) /*!< ADC analog watchdog number 2 */ +#define ADC_ANALOGWATCHDOG_3 (LL_ADC_AWD3) /*!< ADC analog watchdog number 3 */ +/** + * @} + */ + +/** @defgroup ADC_analog_watchdog_mode ADC Analog Watchdog Mode + * @{ + */ +#define ADC_ANALOGWATCHDOG_NONE (0x00000000U) /*!< No analog watchdog selected */ +#define ADC_ANALOGWATCHDOG_SINGLE_REG (ADC_CFGR_AWD1SGL | ADC_CFGR_AWD1EN) /*!< Analog watchdog applied to a regular group single channel */ +#define ADC_ANALOGWATCHDOG_SINGLE_INJEC (ADC_CFGR_AWD1SGL | ADC_CFGR_JAWD1EN) /*!< Analog watchdog applied to an injected group single channel */ +#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC (ADC_CFGR_AWD1SGL | ADC_CFGR_AWD1EN | ADC_CFGR_JAWD1EN) /*!< Analog watchdog applied to a regular and injected groups single channel */ +#define ADC_ANALOGWATCHDOG_ALL_REG (ADC_CFGR_AWD1EN) /*!< Analog watchdog applied to regular group all channels */ +#define ADC_ANALOGWATCHDOG_ALL_INJEC (ADC_CFGR_JAWD1EN) /*!< Analog watchdog applied to injected group all channels */ +#define ADC_ANALOGWATCHDOG_ALL_REGINJEC (ADC_CFGR_AWD1EN | ADC_CFGR_JAWD1EN) /*!< Analog watchdog applied to regular and injected groups all channels */ +/** + * @} + */ + +/** @defgroup ADC_HAL_EC_OVS_RATIO Oversampling - Ratio + * @{ + */ +#define ADC_OVERSAMPLING_RATIO_2 (LL_ADC_OVS_RATIO_2) /*!< ADC oversampling ratio of 2 (2 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_4 (LL_ADC_OVS_RATIO_4) /*!< ADC oversampling ratio of 4 (4 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_8 (LL_ADC_OVS_RATIO_8) /*!< ADC oversampling ratio of 8 (8 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_16 (LL_ADC_OVS_RATIO_16) /*!< ADC oversampling ratio of 16 (16 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_32 (LL_ADC_OVS_RATIO_32) /*!< ADC oversampling ratio of 32 (32 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_64 (LL_ADC_OVS_RATIO_64) /*!< ADC oversampling ratio of 64 (64 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_128 (LL_ADC_OVS_RATIO_128) /*!< ADC oversampling ratio of 128 (128 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define ADC_OVERSAMPLING_RATIO_256 (LL_ADC_OVS_RATIO_256) /*!< ADC oversampling ratio of 256 (256 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +/** + * @} + */ + +/** @defgroup ADC_HAL_EC_OVS_SHIFT Oversampling - Data shift + * @{ + */ +#define ADC_RIGHTBITSHIFT_NONE (LL_ADC_OVS_SHIFT_NONE) /*!< ADC oversampling no shift (sum of the ADC conversions data is not divided to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_1 (LL_ADC_OVS_SHIFT_RIGHT_1) /*!< ADC oversampling shift of 1 (sum of the ADC conversions data is divided by 2 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_2 (LL_ADC_OVS_SHIFT_RIGHT_2) /*!< ADC oversampling shift of 2 (sum of the ADC conversions data is divided by 4 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_3 (LL_ADC_OVS_SHIFT_RIGHT_3) /*!< ADC oversampling shift of 3 (sum of the ADC conversions data is divided by 8 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_4 (LL_ADC_OVS_SHIFT_RIGHT_4) /*!< ADC oversampling shift of 4 (sum of the ADC conversions data is divided by 16 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_5 (LL_ADC_OVS_SHIFT_RIGHT_5) /*!< ADC oversampling shift of 5 (sum of the ADC conversions data is divided by 32 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_6 (LL_ADC_OVS_SHIFT_RIGHT_6) /*!< ADC oversampling shift of 6 (sum of the ADC conversions data is divided by 64 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_7 (LL_ADC_OVS_SHIFT_RIGHT_7) /*!< ADC oversampling shift of 7 (sum of the ADC conversions data is divided by 128 to result as the ADC oversampling conversion data) */ +#define ADC_RIGHTBITSHIFT_8 (LL_ADC_OVS_SHIFT_RIGHT_8) /*!< ADC oversampling shift of 8 (sum of the ADC conversions data is divided by 256 to result as the ADC oversampling conversion data) */ +/** + * @} + */ + +/** @defgroup ADC_HAL_EC_OVS_DISCONT_MODE Oversampling - Discontinuous mode + * @{ + */ +#define ADC_TRIGGEREDMODE_SINGLE_TRIGGER (LL_ADC_OVS_REG_CONT) /*!< ADC oversampling discontinuous mode: continuous mode (all conversions of oversampling ratio are done from 1 trigger) */ +#define ADC_TRIGGEREDMODE_MULTI_TRIGGER (LL_ADC_OVS_REG_DISCONT) /*!< ADC oversampling discontinuous mode: discontinuous mode (each conversion of oversampling ratio needs a trigger) */ +/** + * @} + */ + +/** @defgroup ADC_HAL_EC_OVS_SCOPE_REG Oversampling - Oversampling scope for ADC group regular + * @{ + */ +#define ADC_REGOVERSAMPLING_CONTINUED_MODE (LL_ADC_OVS_GRP_REGULAR_CONTINUED) /*!< Oversampling buffer maintained during injection sequence */ +#define ADC_REGOVERSAMPLING_RESUMED_MODE (LL_ADC_OVS_GRP_REGULAR_RESUMED) /*!< Oversampling buffer zeroed during injection sequence */ +/** + * @} + */ + + +/** @defgroup ADC_Event_type ADC Event type + * @{ + */ +#define ADC_EOSMP_EVENT (ADC_FLAG_EOSMP) /*!< ADC End of Sampling event */ +#define ADC_AWD1_EVENT (ADC_FLAG_AWD1) /*!< ADC Analog watchdog 1 event (main analog watchdog, present on all STM32 series) */ +#define ADC_AWD2_EVENT (ADC_FLAG_AWD2) /*!< ADC Analog watchdog 2 event (additional analog watchdog, not present on all STM32 series) */ +#define ADC_AWD3_EVENT (ADC_FLAG_AWD3) /*!< ADC Analog watchdog 3 event (additional analog watchdog, not present on all STM32 series) */ +#define ADC_OVR_EVENT (ADC_FLAG_OVR) /*!< ADC overrun event */ +#define ADC_JQOVF_EVENT (ADC_FLAG_JQOVF) /*!< ADC Injected Context Queue Overflow event */ +/** + * @} + */ +#define ADC_AWD_EVENT ADC_AWD1_EVENT /*!< ADC Analog watchdog 1 event: Naming for compatibility with other STM32 devices having only one analog watchdog */ + +/** @defgroup ADC_interrupts_definition ADC interrupts definition + * @{ + */ +#define ADC_IT_RDY ADC_IER_ADRDY /*!< ADC Ready interrupt source */ +#define ADC_IT_EOSMP ADC_IER_EOSMP /*!< ADC End of sampling interrupt source */ +#define ADC_IT_EOC ADC_IER_EOC /*!< ADC End of regular conversion interrupt source */ +#define ADC_IT_EOS ADC_IER_EOS /*!< ADC End of regular sequence of conversions interrupt source */ +#define ADC_IT_OVR ADC_IER_OVR /*!< ADC overrun interrupt source */ +#define ADC_IT_JEOC ADC_IER_JEOC /*!< ADC End of injected conversion interrupt source */ +#define ADC_IT_JEOS ADC_IER_JEOS /*!< ADC End of injected sequence of conversions interrupt source */ +#define ADC_IT_AWD1 ADC_IER_AWD1 /*!< ADC Analog watchdog 1 interrupt source (main analog watchdog) */ +#define ADC_IT_AWD2 ADC_IER_AWD2 /*!< ADC Analog watchdog 2 interrupt source (additional analog watchdog) */ +#define ADC_IT_AWD3 ADC_IER_AWD3 /*!< ADC Analog watchdog 3 interrupt source (additional analog watchdog) */ +#define ADC_IT_JQOVF ADC_IER_JQOVF /*!< ADC Injected Context Queue Overflow interrupt source */ + +#define ADC_IT_AWD ADC_IT_AWD1 /*!< ADC Analog watchdog 1 interrupt source: naming for compatibility with other STM32 devices having only one analog watchdog */ + +/** + * @} + */ + +/** @defgroup ADC_flags_definition ADC flags definition + * @{ + */ +#define ADC_FLAG_RDY ADC_ISR_ADRDY /*!< ADC Ready flag */ +#define ADC_FLAG_EOSMP ADC_ISR_EOSMP /*!< ADC End of Sampling flag */ +#define ADC_FLAG_EOC ADC_ISR_EOC /*!< ADC End of Regular Conversion flag */ +#define ADC_FLAG_EOS ADC_ISR_EOS /*!< ADC End of Regular sequence of Conversions flag */ +#define ADC_FLAG_OVR ADC_ISR_OVR /*!< ADC overrun flag */ +#define ADC_FLAG_JEOC ADC_ISR_JEOC /*!< ADC End of Injected Conversion flag */ +#define ADC_FLAG_JEOS ADC_ISR_JEOS /*!< ADC End of Injected sequence of Conversions flag */ +#define ADC_FLAG_AWD1 ADC_ISR_AWD1 /*!< ADC Analog watchdog 1 flag (main analog watchdog) */ +#define ADC_FLAG_AWD2 ADC_ISR_AWD2 /*!< ADC Analog watchdog 2 flag (additional analog watchdog) */ +#define ADC_FLAG_AWD3 ADC_ISR_AWD3 /*!< ADC Analog watchdog 3 flag (additional analog watchdog) */ +#define ADC_FLAG_JQOVF ADC_ISR_JQOVF /*!< ADC Injected Context Queue Overflow flag */ + +#define ADC_FLAG_AWD ADC_FLAG_AWD1 /*!< ADC Analog watchdog 1 flag: Naming for compatibility with other STM32 devices having only one analog watchdog */ + +#define ADC_FLAG_ALL (ADC_FLAG_RDY | ADC_FLAG_EOSMP | ADC_FLAG_EOC | ADC_FLAG_EOS | \ + ADC_FLAG_JEOC | ADC_FLAG_JEOS | ADC_FLAG_OVR | ADC_FLAG_AWD1 | \ + ADC_FLAG_AWD2 | ADC_FLAG_AWD3 | ADC_FLAG_JQOVF) /*!< ADC all flags */ + +/* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx, JQOVF */ +#define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_JEOC | ADC_FLAG_JEOS | \ + ADC_FLAG_OVR | ADC_FLAG_AWD1 | ADC_FLAG_AWD2 | ADC_FLAG_AWD3 | \ + ADC_FLAG_JQOVF) /*!< ADC post-conversion all flags */ + +/** + * @} + */ + +/** + * @} + */ + +/* Private macro -------------------------------------------------------------*/ + +/** @defgroup ADC_Private_Macros ADC Private Macros + * @{ + */ +/* Macro reserved for internal HAL driver usage, not intended to be used in */ +/* code of final user. */ /** * @brief Test if conversion trigger of regular group is software start * or external trigger. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle * @retval SET (software start) or RESET (external trigger) */ -#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) \ - (((__HANDLE__)->Instance->CFGR & ADC_CFGR_EXTEN) == RESET) +#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) \ + (((__HANDLE__)->Instance->CFGR & ADC_CFGR_EXTEN) == RESET) /** * @brief Return resolution bits in CFGR register RES[1:0] field. - * @param __HANDLE__: ADC handle. - * @retval 2-bit field RES of CFGR register. + * @param __HANDLE__ ADC handle + * @retval Value of bitfield RES in CFGR register. */ -#define ADC_GET_RESOLUTION(__HANDLE__) (((__HANDLE__)->Instance->CFGR) & ADC_CFGR_RES) +#define ADC_GET_RESOLUTION(__HANDLE__) \ + (LL_ADC_GetResolution((__HANDLE__)->Instance)) /** * @brief Clear ADC error code (set it to no error code "HAL_ADC_ERROR_NONE"). - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle * @retval None */ #define ADC_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE) /** * @brief Verification of ADC state: enabled or disabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle * @retval SET (ADC enabled) or RESET (ADC disabled) */ #define ADC_IS_ENABLE(__HANDLE__) \ @@ -594,53 +785,52 @@ typedef struct /** * @brief Check if conversion is on going on regular group. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle * @retval SET (conversion is on going) or RESET (no conversion is on going) */ -#define ADC_IS_CONVERSION_ONGOING_REGULAR(__HANDLE__) \ - (( (((__HANDLE__)->Instance->CR) & ADC_CR_ADSTART) == RESET \ - ) ? RESET : SET) +#define ADC_IS_CONVERSION_ONGOING_REGULAR(__HANDLE__) \ + (LL_ADC_REG_IsConversionOngoing((__HANDLE__)->Instance)) /** * @brief Simultaneously clear and set specific bits of the handle State. * @note ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(), * the first parameter is the ADC handle State, the second parameter is the - * bit field to clear, the third and last parameter is the bit field to set. + * bit field to clear, the third and last parameter is the bit field to set. * @retval None */ #define ADC_STATE_CLR_SET MODIFY_REG /** * @brief Verify that a given value is aligned with the ADC resolution range. - * @param __RESOLUTION__: ADC resolution (12, 10, 8 or 6 bits). - * @param __ADC_VALUE__: value checked against the resolution. + * @param __RESOLUTION__ ADC resolution (12, 10, 8 or 6 bits). + * @param __ADC_VALUE__ value checked against the resolution. * @retval SET (__ADC_VALUE__ in line with __RESOLUTION__) or RESET (__ADC_VALUE__ not in line with __RESOLUTION__) */ #define IS_ADC_RANGE(__RESOLUTION__, __ADC_VALUE__) \ - ((((__RESOLUTION__) == ADC_RESOLUTION_12B) && ((__ADC_VALUE__) <= ((uint32_t)0x0FFF))) || \ - (((__RESOLUTION__) == ADC_RESOLUTION_10B) && ((__ADC_VALUE__) <= ((uint32_t)0x03FF))) || \ - (((__RESOLUTION__) == ADC_RESOLUTION_8B) && ((__ADC_VALUE__) <= ((uint32_t)0x00FF))) || \ - (((__RESOLUTION__) == ADC_RESOLUTION_6B) && ((__ADC_VALUE__) <= ((uint32_t)0x003F))) ) + ((((__RESOLUTION__) == ADC_RESOLUTION_12B) && ((__ADC_VALUE__) <= (0x0FFF))) || \ + (((__RESOLUTION__) == ADC_RESOLUTION_10B) && ((__ADC_VALUE__) <= (0x03FF))) || \ + (((__RESOLUTION__) == ADC_RESOLUTION_8B) && ((__ADC_VALUE__) <= (0x00FF))) || \ + (((__RESOLUTION__) == ADC_RESOLUTION_6B) && ((__ADC_VALUE__) <= (0x003F))) ) /** * @brief Verify the length of the scheduled regular conversions group. - * @param __LENGTH__: number of programmed conversions. + * @param __LENGTH__ number of programmed conversions. * @retval SET (__LENGTH__ is within the maximum number of possible programmable regular conversions) or RESET (__LENGTH__ is null or too large) */ -#define IS_ADC_REGULAR_NB_CONV(__LENGTH__) (((__LENGTH__) >= ((uint32_t)1)) && ((__LENGTH__) <= ((uint32_t)16))) +#define IS_ADC_REGULAR_NB_CONV(__LENGTH__) (((__LENGTH__) >= (1U)) && ((__LENGTH__) <= (16U))) /** * @brief Verify the number of scheduled regular conversions in discontinuous mode. - * @param NUMBER: number of scheduled regular conversions in discontinuous mode. + * @param NUMBER number of scheduled regular conversions in discontinuous mode. * @retval SET (NUMBER is within the maximum number of regular conversions in discontinous mode) or RESET (NUMBER is null or too large) */ -#define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= ((uint32_t)1)) && ((NUMBER) <= ((uint32_t)8))) +#define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= (1U)) && ((NUMBER) <= (8U))) /** * @brief Verify the ADC clock setting. - * @param __ADC_CLOCK__: programmed ADC clock. + * @param __ADC_CLOCK__ programmed ADC clock. * @retval SET (__ADC_CLOCK__ is a valid value) or RESET (__ADC_CLOCK__ is invalid) */ #define IS_ADC_CLOCKPRESCALER(__ADC_CLOCK__) (((__ADC_CLOCK__) == ADC_CLOCK_SYNC_PCLK_DIV1) || \ @@ -658,11 +848,10 @@ typedef struct ((__ADC_CLOCK__) == ADC_CLOCK_ASYNC_DIV64) || \ ((__ADC_CLOCK__) == ADC_CLOCK_ASYNC_DIV128) || \ ((__ADC_CLOCK__) == ADC_CLOCK_ASYNC_DIV256) ) - /** * @brief Verify the ADC resolution setting. - * @param __RESOLUTION__: programmed ADC resolution. + * @param __RESOLUTION__ programmed ADC resolution. * @retval SET (__RESOLUTION__ is a valid value) or RESET (__RESOLUTION__ is invalid) */ #define IS_ADC_RESOLUTION(__RESOLUTION__) (((__RESOLUTION__) == ADC_RESOLUTION_12B) || \ @@ -672,7 +861,7 @@ typedef struct /** * @brief Verify the ADC resolution setting when limited to 6 or 8 bits. - * @param __RESOLUTION__: programmed ADC resolution when limited to 6 or 8 bits. + * @param __RESOLUTION__ programmed ADC resolution when limited to 6 or 8 bits. * @retval SET (__RESOLUTION__ is a valid value) or RESET (__RESOLUTION__ is invalid) */ #define IS_ADC_RESOLUTION_8_6_BITS(__RESOLUTION__) (((__RESOLUTION__) == ADC_RESOLUTION_8B) || \ @@ -680,26 +869,25 @@ typedef struct /** * @brief Verify the ADC converted data alignment. - * @param __ALIGN__: programmed ADC converted data alignment. + * @param __ALIGN__ programmed ADC converted data alignment. * @retval SET (__ALIGN__ is a valid value) or RESET (__ALIGN__ is invalid) - */ + */ #define IS_ADC_DATA_ALIGN(__ALIGN__) (((__ALIGN__) == ADC_DATAALIGN_RIGHT) || \ ((__ALIGN__) == ADC_DATAALIGN_LEFT) ) - /** * @brief Verify the ADC scan mode. - * @param __SCAN_MODE__: programmed ADC scan mode. + * @param __SCAN_MODE__ programmed ADC scan mode. * @retval SET (__SCAN_MODE__ is valid) or RESET (__SCAN_MODE__ is invalid) - */ + */ #define IS_ADC_SCAN_MODE(__SCAN_MODE__) (((__SCAN_MODE__) == ADC_SCAN_DISABLE) || \ - ((__SCAN_MODE__) == ADC_SCAN_ENABLE) ) - + ((__SCAN_MODE__) == ADC_SCAN_ENABLE) ) + /** * @brief Verify the ADC edge trigger setting for regular group. - * @param __EDGE__: programmed ADC edge trigger setting. + * @param __EDGE__ programmed ADC edge trigger setting. * @retval SET (__EDGE__ is a valid value) or RESET (__EDGE__ is invalid) - */ + */ #define IS_ADC_EXTTRIG_EDGE(__EDGE__) (((__EDGE__) == ADC_EXTERNALTRIGCONVEDGE_NONE) || \ ((__EDGE__) == ADC_EXTERNALTRIGCONVEDGE_RISING) || \ ((__EDGE__) == ADC_EXTERNALTRIGCONVEDGE_FALLING) || \ @@ -707,51 +895,50 @@ typedef struct /** * @brief Verify the ADC regular conversions external trigger. - * @param __REGTRIG__: programmed ADC regular conversions external trigger. + * @param __HANDLE__ ADC handle + * @param __REGTRIG__ programmed ADC regular conversions external trigger. * @retval SET (__REGTRIG__ is a valid value) or RESET (__REGTRIG__ is invalid) - */ -#define IS_ADC_EXTTRIG(__REGTRIG__) (((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC1) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC2) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC3) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T2_CC2) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T3_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T4_CC4) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_EXT_IT11) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T8_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T8_TRGO2) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_TRGO2) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T2_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T4_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T6_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T15_TRGO) || \ - ((__REGTRIG__) == ADC_EXTERNALTRIG_T3_CC4) || \ - \ - ((__REGTRIG__) == ADC_SOFTWARE_START) ) + */ +#define IS_ADC_EXTTRIG(__HANDLE__, __REGTRIG__) (((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC1) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC2) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_CC3) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T2_CC2) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T3_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T4_CC4) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_EXT_IT11) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T8_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T8_TRGO2) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T1_TRGO2) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T2_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T4_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T6_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T15_TRGO) || \ + ((__REGTRIG__) == ADC_EXTERNALTRIG_T3_CC4) || \ + ((__REGTRIG__) == ADC_SOFTWARE_START) ) /** * @brief Verify the ADC regular conversions check for converted data availability. - * @param __EOC_SELECTION__: converted data availability check. + * @param __EOC_SELECTION__ converted data availability check. * @retval SET (__EOC_SELECTION__ is a valid value) or RESET (__EOC_SELECTION__ is invalid) - */ + */ #define IS_ADC_EOC_SELECTION(__EOC_SELECTION__) (((__EOC_SELECTION__) == ADC_EOC_SINGLE_CONV) || \ - ((__EOC_SELECTION__) == ADC_EOC_SEQ_CONV) || \ - ((__EOC_SELECTION__) == ADC_EOC_SINGLE_SEQ_CONV) ) - + ((__EOC_SELECTION__) == ADC_EOC_SEQ_CONV) ) + /** * @brief Verify the ADC regular conversions overrun handling. - * @param __OVR__: ADC regular conversions overrun handling. + * @param __OVR__ ADC regular conversions overrun handling. * @retval SET (__OVR__ is a valid value) or RESET (__OVR__ is invalid) - */ + */ #define IS_ADC_OVERRUN(__OVR__) (((__OVR__) == ADC_OVR_DATA_PRESERVED) || \ - ((__OVR__) == ADC_OVR_DATA_OVERWRITTEN) ) - + ((__OVR__) == ADC_OVR_DATA_OVERWRITTEN) ) + /** * @brief Verify the ADC conversions sampling time. - * @param __TIME__: ADC conversions sampling time. + * @param __TIME__ ADC conversions sampling time. * @retval SET (__TIME__ is a valid value) or RESET (__TIME__ is invalid) */ -#if defined (ADC_SMPR1_SMPPLUS) +#if defined(ADC_SMPR1_SMPPLUS) #define IS_ADC_SAMPLE_TIME(__TIME__) (((__TIME__) == ADC_SAMPLETIME_2CYCLES_5) || \ ((__TIME__) == ADC_SAMPLETIME_3CYCLES_5) || \ ((__TIME__) == ADC_SAMPLETIME_6CYCLES_5) || \ @@ -774,7 +961,7 @@ typedef struct /** * @brief Verify the ADC regular channel setting. - * @param __CHANNEL__: programmed ADC regular channel. + * @param __CHANNEL__ programmed ADC regular channel. * @retval SET (__CHANNEL__ is valid) or RESET (__CHANNEL__ is invalid) */ #define IS_ADC_REGULAR_RANK(__CHANNEL__) (((__CHANNEL__) == ADC_REGULAR_RANK_1 ) || \ @@ -797,7 +984,7 @@ typedef struct /** * @} */ - + /* Private constants ---------------------------------------------------------*/ @@ -812,132 +999,683 @@ typedef struct /* Minimum ADC Clock frequency is 0.14 MHz */ /* Maximum conversion time is */ /* 653 / 0.14 MHz = 4.66 ms */ -#define ADC_STOP_CONVERSION_TIMEOUT ((uint32_t) 5) /*!< ADC stop time-out value */ +#define ADC_STOP_CONVERSION_TIMEOUT ( 5U) /*!< ADC stop time-out value */ /* Delay for temperature sensor stabilization time. */ /* Maximum delay is 120us (refer device datasheet, parameter tSTART). */ /* Unit: us */ -#define ADC_TEMPSENSOR_DELAY_US ((uint32_t) 120) +#define ADC_TEMPSENSOR_DELAY_US (LL_ADC_DELAY_TEMPSENSOR_STAB_US) /** * @} */ -/* Exported macros -----------------------------------------------------------*/ - -/** @defgroup ADC_Exported_Macro ADC Exported Macros +/* Exported macro ------------------------------------------------------------*/ + +/** @defgroup ADC_Exported_Macros ADC Exported Macros + * @{ + */ +/* Macro for internal HAL driver usage, and possibly can be used into code of */ +/* final user. */ + +/** @defgroup ADC_HAL_EM_HANDLE_IT_FLAG HAL ADC macro to manage HAL ADC handle, IT and flags. * @{ */ /** @brief Reset ADC handle state. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle * @retval None */ -#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET) - - -/** @brief Check whether the specified ADC interrupt source is enabled or not. - * @param __HANDLE__: ADC handle. - * @param __INTERRUPT__: ADC interrupt source to check +#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) \ + ((__HANDLE__)->State = HAL_ADC_STATE_RESET) + +/** + * @brief Enable ADC interrupt. + * @param __HANDLE__ ADC handle + * @param __INTERRUPT__ ADC Interrupt + * This parameter can be one of the following values: + * @arg @ref ADC_IT_RDY ADC Ready interrupt source + * @arg @ref ADC_IT_EOSMP ADC End of Sampling interrupt source + * @arg @ref ADC_IT_EOC ADC End of Regular Conversion interrupt source + * @arg @ref ADC_IT_EOS ADC End of Regular sequence of Conversions interrupt source + * @arg @ref ADC_IT_OVR ADC overrun interrupt source + * @arg @ref ADC_IT_JEOC ADC End of Injected Conversion interrupt source + * @arg @ref ADC_IT_JEOS ADC End of Injected sequence of Conversions interrupt source + * @arg @ref ADC_IT_AWD1 ADC Analog watchdog 1 interrupt source (main analog watchdog) + * @arg @ref ADC_IT_AWD2 ADC Analog watchdog 2 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_AWD3 ADC Analog watchdog 3 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_JQOVF ADC Injected Context Queue Overflow interrupt source. + * @retval None + */ +#define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) \ + (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) + +/** + * @brief Disable ADC interrupt. + * @param __HANDLE__ ADC handle + * @param __INTERRUPT__ ADC Interrupt + * This parameter can be one of the following values: + * @arg @ref ADC_IT_RDY ADC Ready interrupt source + * @arg @ref ADC_IT_EOSMP ADC End of Sampling interrupt source + * @arg @ref ADC_IT_EOC ADC End of Regular Conversion interrupt source + * @arg @ref ADC_IT_EOS ADC End of Regular sequence of Conversions interrupt source + * @arg @ref ADC_IT_OVR ADC overrun interrupt source + * @arg @ref ADC_IT_JEOC ADC End of Injected Conversion interrupt source + * @arg @ref ADC_IT_JEOS ADC End of Injected sequence of Conversions interrupt source + * @arg @ref ADC_IT_AWD1 ADC Analog watchdog 1 interrupt source (main analog watchdog) + * @arg @ref ADC_IT_AWD2 ADC Analog watchdog 2 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_AWD3 ADC Analog watchdog 3 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_JQOVF ADC Injected Context Queue Overflow interrupt source. + * @retval None + */ +#define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) \ + (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) + +/** @brief Checks if the specified ADC interrupt source is enabled or disabled. + * @param __HANDLE__ ADC handle + * @param __INTERRUPT__ ADC interrupt source to check * This parameter can be one of the following values: - * @arg @ref ADC_IT_RDY, ADC Ready (ADRDY) interrupt source - * @arg @ref ADC_IT_EOSMP, ADC End of Sampling interrupt source - * @arg @ref ADC_IT_EOC, ADC End of Regular Conversion interrupt source - * @arg @ref ADC_IT_EOS, ADC End of Regular sequence of Conversions interrupt source - * @arg @ref ADC_IT_OVR, ADC overrun interrupt source - * @arg @ref ADC_IT_JEOC, ADC End of Injected Conversion interrupt source - * @arg @ref ADC_IT_JEOS, ADC End of Injected sequence of Conversions interrupt source - * @arg @ref ADC_IT_AWD1, ADC Analog watchdog 1 interrupt source (main analog watchdog) - * @arg @ref ADC_IT_AWD2, ADC Analog watchdog 2 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_AWD3, ADC Analog watchdog 3 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_JQOVF, ADC Injected Context Queue Overflow interrupt source. + * @arg @ref ADC_IT_RDY ADC Ready interrupt source + * @arg @ref ADC_IT_EOSMP ADC End of Sampling interrupt source + * @arg @ref ADC_IT_EOC ADC End of Regular Conversion interrupt source + * @arg @ref ADC_IT_EOS ADC End of Regular sequence of Conversions interrupt source + * @arg @ref ADC_IT_OVR ADC overrun interrupt source + * @arg @ref ADC_IT_JEOC ADC End of Injected Conversion interrupt source + * @arg @ref ADC_IT_JEOS ADC End of Injected sequence of Conversions interrupt source + * @arg @ref ADC_IT_AWD1 ADC Analog watchdog 1 interrupt source (main analog watchdog) + * @arg @ref ADC_IT_AWD2 ADC Analog watchdog 2 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_AWD3 ADC Analog watchdog 3 interrupt source (additional analog watchdog) + * @arg @ref ADC_IT_JQOVF ADC Injected Context Queue Overflow interrupt source. * @retval State of interruption (SET or RESET) */ #define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \ - (( ((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__) \ - )? SET : RESET \ - ) - -/** - * @brief Enable an ADC interrupt. - * @param __HANDLE__: ADC handle. - * @param __INTERRUPT__: ADC Interrupt to enable - * This parameter can be one of the following values: - * @arg @ref ADC_IT_RDY, ADC Ready (ADRDY) interrupt source - * @arg @ref ADC_IT_EOSMP, ADC End of Sampling interrupt source - * @arg @ref ADC_IT_EOC, ADC End of Regular Conversion interrupt source - * @arg @ref ADC_IT_EOS, ADC End of Regular sequence of Conversions interrupt source - * @arg @ref ADC_IT_OVR, ADC overrun interrupt source - * @arg @ref ADC_IT_JEOC, ADC End of Injected Conversion interrupt source - * @arg @ref ADC_IT_JEOS, ADC End of Injected sequence of Conversions interrupt source - * @arg @ref ADC_IT_AWD1, ADC Analog watchdog 1 interrupt source (main analog watchdog) - * @arg @ref ADC_IT_AWD2, ADC Analog watchdog 2 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_AWD3, ADC Analog watchdog 3 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_JQOVF, ADC Injected Context Queue Overflow interrupt source. - * @retval None - */ -#define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) - -/** - * @brief Disable an ADC interrupt. - * @param __HANDLE__: ADC handle. - * @param __INTERRUPT__: ADC Interrupt to disable - * @arg @ref ADC_IT_RDY, ADC Ready (ADRDY) interrupt source - * @arg @ref ADC_IT_EOSMP, ADC End of Sampling interrupt source - * @arg @ref ADC_IT_EOC, ADC End of Regular Conversion interrupt source - * @arg @ref ADC_IT_EOS, ADC End of Regular sequence of Conversions interrupt source - * @arg @ref ADC_IT_OVR, ADC overrun interrupt source - * @arg @ref ADC_IT_JEOC, ADC End of Injected Conversion interrupt source - * @arg @ref ADC_IT_JEOS, ADC End of Injected sequence of Conversions interrupt source - * @arg @ref ADC_IT_AWD1, ADC Analog watchdog 1 interrupt source (main analog watchdog) - * @arg @ref ADC_IT_AWD2, ADC Analog watchdog 2 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_AWD3, ADC Analog watchdog 3 interrupt source (additional analog watchdog) - * @arg @ref ADC_IT_JQOVF, ADC Injected Context Queue Overflow interrupt source. - * @retval None - */ -#define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) - + (((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) + /** * @brief Check whether the specified ADC flag is set or not. - * @param __HANDLE__: ADC handle. - * @param __FLAG__: ADC flag to check + * @param __HANDLE__ ADC handle + * @param __FLAG__ ADC flag * This parameter can be one of the following values: - * @arg @ref ADC_FLAG_RDY, ADC Ready (ADRDY) flag - * @arg @ref ADC_FLAG_EOSMP, ADC End of Sampling flag - * @arg @ref ADC_FLAG_EOC, ADC End of Regular Conversion flag - * @arg @ref ADC_FLAG_EOS, ADC End of Regular sequence of Conversions flag - * @arg @ref ADC_FLAG_OVR, ADC overrun flag - * @arg @ref ADC_FLAG_JEOC, ADC End of Injected Conversion flag - * @arg @ref ADC_FLAG_JEOS, ADC End of Injected sequence of Conversions flag - * @arg @ref ADC_FLAG_AWD1, ADC Analog watchdog 1 flag (main analog watchdog) - * @arg @ref ADC_FLAG_AWD2, ADC Analog watchdog 2 flag (additional analog watchdog) - * @arg @ref ADC_FLAG_AWD3, ADC Analog watchdog 3 flag (additional analog watchdog) - * @arg @ref ADC_FLAG_JQOVF, ADC Injected Context Queue Overflow flag. - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg @ref ADC_FLAG_RDY ADC Ready flag + * @arg @ref ADC_FLAG_EOSMP ADC End of Sampling flag + * @arg @ref ADC_FLAG_EOC ADC End of Regular Conversion flag + * @arg @ref ADC_FLAG_EOS ADC End of Regular sequence of Conversions flag + * @arg @ref ADC_FLAG_OVR ADC overrun flag + * @arg @ref ADC_FLAG_JEOC ADC End of Injected Conversion flag + * @arg @ref ADC_FLAG_JEOS ADC End of Injected sequence of Conversions flag + * @arg @ref ADC_FLAG_AWD1 ADC Analog watchdog 1 flag (main analog watchdog) + * @arg @ref ADC_FLAG_AWD2 ADC Analog watchdog 2 flag (additional analog watchdog) + * @arg @ref ADC_FLAG_AWD3 ADC Analog watchdog 3 flag (additional analog watchdog) + * @arg @ref ADC_FLAG_JQOVF ADC Injected Context Queue Overflow flag. + * @retval State of flag (TRUE or FALSE). */ -#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->ISR) & (__FLAG__)) == (__FLAG__)) +#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) \ + ((((__HANDLE__)->Instance->ISR) & (__FLAG__)) == (__FLAG__)) /** - * @brief Clear a specified ADC flag. - * @param __HANDLE__: ADC handle. - * @param __FLAG__: ADC flag to clear + * @brief Clear the specified ADC flag. + * @param __HANDLE__ ADC handle + * @param __FLAG__ ADC flag * This parameter can be one of the following values: - * @arg @ref ADC_FLAG_RDY, ADC Ready (ADRDY) flag - * @arg @ref ADC_FLAG_EOSMP, ADC End of Sampling flag - * @arg @ref ADC_FLAG_EOC, ADC End of Regular Conversion flag - * @arg @ref ADC_FLAG_EOS, ADC End of Regular sequence of Conversions flag - * @arg @ref ADC_FLAG_OVR, ADC overrun flag - * @arg @ref ADC_FLAG_JEOC, ADC End of Injected Conversion flag - * @arg @ref ADC_FLAG_JEOS, ADC End of Injected sequence of Conversions flag - * @arg @ref ADC_FLAG_AWD1, ADC Analog watchdog 1 flag (main analog watchdog) - * @arg @ref ADC_FLAG_AWD2, ADC Analog watchdog 2 flag (additional analog watchdog) - * @arg @ref ADC_FLAG_AWD3, ADC Analog watchdog 3 flag (additional analog watchdog) - * @arg @ref ADC_FLAG_JQOVF, ADC Injected Context Queue Overflow flag. - * @note Bit cleared bit by writing 1 (writing 0 has no effect on any bit of register ISR). + * @arg @ref ADC_FLAG_RDY ADC Ready flag + * @arg @ref ADC_FLAG_EOSMP ADC End of Sampling flag + * @arg @ref ADC_FLAG_EOC ADC End of Regular Conversion flag + * @arg @ref ADC_FLAG_EOS ADC End of Regular sequence of Conversions flag + * @arg @ref ADC_FLAG_OVR ADC overrun flag + * @arg @ref ADC_FLAG_JEOC ADC End of Injected Conversion flag + * @arg @ref ADC_FLAG_JEOS ADC End of Injected sequence of Conversions flag + * @arg @ref ADC_FLAG_AWD1 ADC Analog watchdog 1 flag (main analog watchdog) + * @arg @ref ADC_FLAG_AWD2 ADC Analog watchdog 2 flag (additional analog watchdog) + * @arg @ref ADC_FLAG_AWD3 ADC Analog watchdog 3 flag (additional analog watchdog) + * @arg @ref ADC_FLAG_JQOVF ADC Injected Context Queue Overflow flag. * @retval None */ -#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR) = (__FLAG__)) - +/* Note: bit cleared bit by writing 1 (writing 0 has no effect on any bit of register ISR) */ +#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) \ + (((__HANDLE__)->Instance->ISR) = (__FLAG__)) + +/** + * @} + */ + +/** @defgroup ADC_HAL_EM_HELPER_MACRO HAL ADC helper macro + * @{ + */ + +/** + * @brief Helper macro to get ADC channel number in decimal format + * from literals ADC_CHANNEL_x. + * @note Example: + * __HAL_ADC_CHANNEL_TO_DECIMAL_NB(ADC_CHANNEL_4) + * will return decimal number "4". + * @note The input can be a value from functions where a channel + * number is returned, either defined with number + * or with bitfield (only one bit must be set). + * @param __CHANNEL__ This parameter can be one of the following values: + * @arg @ref ADC_CHANNEL_0 + * @arg @ref ADC_CHANNEL_1 (7) + * @arg @ref ADC_CHANNEL_2 (7) + * @arg @ref ADC_CHANNEL_3 (7) + * @arg @ref ADC_CHANNEL_4 (7) + * @arg @ref ADC_CHANNEL_5 (7) + * @arg @ref ADC_CHANNEL_6 + * @arg @ref ADC_CHANNEL_7 + * @arg @ref ADC_CHANNEL_8 + * @arg @ref ADC_CHANNEL_9 + * @arg @ref ADC_CHANNEL_10 + * @arg @ref ADC_CHANNEL_11 + * @arg @ref ADC_CHANNEL_12 + * @arg @ref ADC_CHANNEL_13 + * @arg @ref ADC_CHANNEL_14 + * @arg @ref ADC_CHANNEL_15 + * @arg @ref ADC_CHANNEL_16 + * @arg @ref ADC_CHANNEL_17 + * @arg @ref ADC_CHANNEL_18 + * @arg @ref ADC_CHANNEL_VREFINT (1) + * @arg @ref ADC_CHANNEL_TEMPSENSOR (4) + * @arg @ref ADC_CHANNEL_VBAT (4) + * @arg @ref ADC_CHANNEL_DAC1CH1 (5) + * @arg @ref ADC_CHANNEL_DAC1CH2 (5) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC3 (3)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC3 (3)(6) + * + * (1) On STM32L4, parameter available only on ADC instance: ADC1.\n + * (2) On STM32L4, parameter available only on ADC instance: ADC2.\n + * (3) On STM32L4, parameter available only on ADC instance: ADC3.\n + * (4) On STM32L4, parameter available only on ADC instances: ADC1, ADC3.\n + * (5) On STM32L4, parameter available on devices with only 1 ADC instance.\n + * (6) On STM32L4, parameter available on devices with several ADC instances.\n + * (7) On STM32L4, fast channel (0.188 us for 12-bit resolution (ADC conversion rate up to 5.33 Ms/s)). + * Other channels are slow channels (0.238 us for 12-bit resolution (ADC conversion rate up to 4.21 Ms/s)). + * @retval Value between Min_Data=0 and Max_Data=18 + */ +#define __HAL_ADC_CHANNEL_TO_DECIMAL_NB(__CHANNEL__) \ + __LL_ADC_CHANNEL_TO_DECIMAL_NB((__CHANNEL__)) + +/** + * @brief Helper macro to get ADC channel in literal format ADC_CHANNEL_x + * from number in decimal format. + * @note Example: + * __HAL_ADC_DECIMAL_NB_TO_CHANNEL(4) + * will return a data equivalent to "ADC_CHANNEL_4". + * @param __DECIMAL_NB__ Value between Min_Data=0 and Max_Data=18 + * @retval Returned value can be one of the following values: + * @arg @ref ADC_CHANNEL_0 + * @arg @ref ADC_CHANNEL_1 (7) + * @arg @ref ADC_CHANNEL_2 (7) + * @arg @ref ADC_CHANNEL_3 (7) + * @arg @ref ADC_CHANNEL_4 (7) + * @arg @ref ADC_CHANNEL_5 (7) + * @arg @ref ADC_CHANNEL_6 + * @arg @ref ADC_CHANNEL_7 + * @arg @ref ADC_CHANNEL_8 + * @arg @ref ADC_CHANNEL_9 + * @arg @ref ADC_CHANNEL_10 + * @arg @ref ADC_CHANNEL_11 + * @arg @ref ADC_CHANNEL_12 + * @arg @ref ADC_CHANNEL_13 + * @arg @ref ADC_CHANNEL_14 + * @arg @ref ADC_CHANNEL_15 + * @arg @ref ADC_CHANNEL_16 + * @arg @ref ADC_CHANNEL_17 + * @arg @ref ADC_CHANNEL_18 + * @arg @ref ADC_CHANNEL_VREFINT (1) + * @arg @ref ADC_CHANNEL_TEMPSENSOR (4) + * @arg @ref ADC_CHANNEL_VBAT (4) + * @arg @ref ADC_CHANNEL_DAC1CH1 (5) + * @arg @ref ADC_CHANNEL_DAC1CH2 (5) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC3 (3)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC3 (3)(6) + * + * (1) On STM32L4, parameter available only on ADC instance: ADC1.\n + * (2) On STM32L4, parameter available only on ADC instance: ADC2.\n + * (3) On STM32L4, parameter available only on ADC instance: ADC3.\n + * (4) On STM32L4, parameter available only on ADC instances: ADC1, ADC3.\n + * (5) On STM32L4, parameter available on devices with only 1 ADC instance.\n + * (6) On STM32L4, parameter available on devices with several ADC instances.\n + * (7) On STM32L4, fast channel (0.188 us for 12-bit resolution (ADC conversion rate up to 5.33 Ms/s)). + * Other channels are slow channels (0.238 us for 12-bit resolution (ADC conversion rate up to 4.21 Ms/s)).\n + * (1, 2, 3, 4) For ADC channel read back from ADC register, + * comparison with internal channel parameter to be done + * using helper macro @ref __LL_ADC_CHANNEL_INTERNAL_TO_EXTERNAL(). + */ +#define __HAL_ADC_DECIMAL_NB_TO_CHANNEL(__DECIMAL_NB__) \ + __LL_ADC_DECIMAL_NB_TO_CHANNEL((__DECIMAL_NB__)) + +/** + * @brief Helper macro to determine whether the selected channel + * corresponds to literal definitions of driver. + * @note The different literal definitions of ADC channels are: + * - ADC internal channel: + * ADC_CHANNEL_VREFINT, ADC_CHANNEL_TEMPSENSOR, ... + * - ADC external channel (channel connected to a GPIO pin): + * ADC_CHANNEL_1, ADC_CHANNEL_2, ... + * @note The channel parameter must be a value defined from literal + * definition of a ADC internal channel (ADC_CHANNEL_VREFINT, + * ADC_CHANNEL_TEMPSENSOR, ...), + * ADC external channel (ADC_CHANNEL_1, ADC_CHANNEL_2, ...), + * must not be a value from functions where a channel number is + * returned from ADC registers, + * because internal and external channels share the same channel + * number in ADC registers. The differentiation is made only with + * parameters definitions of driver. + * @param __CHANNEL__ This parameter can be one of the following values: + * @arg @ref ADC_CHANNEL_0 + * @arg @ref ADC_CHANNEL_1 (7) + * @arg @ref ADC_CHANNEL_2 (7) + * @arg @ref ADC_CHANNEL_3 (7) + * @arg @ref ADC_CHANNEL_4 (7) + * @arg @ref ADC_CHANNEL_5 (7) + * @arg @ref ADC_CHANNEL_6 + * @arg @ref ADC_CHANNEL_7 + * @arg @ref ADC_CHANNEL_8 + * @arg @ref ADC_CHANNEL_9 + * @arg @ref ADC_CHANNEL_10 + * @arg @ref ADC_CHANNEL_11 + * @arg @ref ADC_CHANNEL_12 + * @arg @ref ADC_CHANNEL_13 + * @arg @ref ADC_CHANNEL_14 + * @arg @ref ADC_CHANNEL_15 + * @arg @ref ADC_CHANNEL_16 + * @arg @ref ADC_CHANNEL_17 + * @arg @ref ADC_CHANNEL_18 + * @arg @ref ADC_CHANNEL_VREFINT (1) + * @arg @ref ADC_CHANNEL_TEMPSENSOR (4) + * @arg @ref ADC_CHANNEL_VBAT (4) + * @arg @ref ADC_CHANNEL_DAC1CH1 (5) + * @arg @ref ADC_CHANNEL_DAC1CH2 (5) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC3 (3)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC3 (3)(6) + * + * (1) On STM32L4, parameter available only on ADC instance: ADC1.\n + * (2) On STM32L4, parameter available only on ADC instance: ADC2.\n + * (3) On STM32L4, parameter available only on ADC instance: ADC3.\n + * (4) On STM32L4, parameter available only on ADC instances: ADC1, ADC3.\n + * (5) On STM32L4, parameter available on devices with only 1 ADC instance.\n + * (6) On STM32L4, parameter available on devices with several ADC instances.\n + * (7) On STM32L4, fast channel (0.188 us for 12-bit resolution (ADC conversion rate up to 5.33 Ms/s)). + * Other channels are slow channels (0.238 us for 12-bit resolution (ADC conversion rate up to 4.21 Ms/s)). + * @retval Value "0" if the channel corresponds to a parameter definition of a ADC external channel (channel connected to a GPIO pin). + * Value "1" if the channel corresponds to a parameter definition of a ADC internal channel. + */ +#define __HAL_ADC_IS_CHANNEL_INTERNAL(__CHANNEL__) \ + __LL_ADC_IS_CHANNEL_INTERNAL((__CHANNEL__)) + +/** + * @brief Helper macro to convert a channel defined from parameter + * definition of a ADC internal channel (ADC_CHANNEL_VREFINT, + * ADC_CHANNEL_TEMPSENSOR, ...), + * to its equivalent parameter definition of a ADC external channel + * (ADC_CHANNEL_1, ADC_CHANNEL_2, ...). + * @note The channel parameter can be, additionally to a value + * defined from parameter definition of a ADC internal channel + * (ADC_CHANNEL_VREFINT, ADC_CHANNEL_TEMPSENSOR, ...), + * a value defined from parameter definition of + * ADC external channel (ADC_CHANNEL_1, ADC_CHANNEL_2, ...) + * or a value from functions where a channel number is returned + * from ADC registers. + * @param __CHANNEL__ This parameter can be one of the following values: + * @arg @ref ADC_CHANNEL_0 + * @arg @ref ADC_CHANNEL_1 (7) + * @arg @ref ADC_CHANNEL_2 (7) + * @arg @ref ADC_CHANNEL_3 (7) + * @arg @ref ADC_CHANNEL_4 (7) + * @arg @ref ADC_CHANNEL_5 (7) + * @arg @ref ADC_CHANNEL_6 + * @arg @ref ADC_CHANNEL_7 + * @arg @ref ADC_CHANNEL_8 + * @arg @ref ADC_CHANNEL_9 + * @arg @ref ADC_CHANNEL_10 + * @arg @ref ADC_CHANNEL_11 + * @arg @ref ADC_CHANNEL_12 + * @arg @ref ADC_CHANNEL_13 + * @arg @ref ADC_CHANNEL_14 + * @arg @ref ADC_CHANNEL_15 + * @arg @ref ADC_CHANNEL_16 + * @arg @ref ADC_CHANNEL_17 + * @arg @ref ADC_CHANNEL_18 + * @arg @ref ADC_CHANNEL_VREFINT (1) + * @arg @ref ADC_CHANNEL_TEMPSENSOR (4) + * @arg @ref ADC_CHANNEL_VBAT (4) + * @arg @ref ADC_CHANNEL_DAC1CH1 (5) + * @arg @ref ADC_CHANNEL_DAC1CH2 (5) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC3 (3)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC3 (3)(6) + * + * (1) On STM32L4, parameter available only on ADC instance: ADC1.\n + * (2) On STM32L4, parameter available only on ADC instance: ADC2.\n + * (3) On STM32L4, parameter available only on ADC instance: ADC3.\n + * (4) On STM32L4, parameter available only on ADC instances: ADC1, ADC3.\n + * (5) On STM32L4, parameter available on devices with only 1 ADC instance.\n + * (6) On STM32L4, parameter available on devices with several ADC instances.\n + * (7) On STM32L4, fast channel (0.188 us for 12-bit resolution (ADC conversion rate up to 5.33 Ms/s)). + * Other channels are slow channels (0.238 us for 12-bit resolution (ADC conversion rate up to 4.21 Ms/s)). + * @retval Returned value can be one of the following values: + * @arg @ref ADC_CHANNEL_0 + * @arg @ref ADC_CHANNEL_1 + * @arg @ref ADC_CHANNEL_2 + * @arg @ref ADC_CHANNEL_3 + * @arg @ref ADC_CHANNEL_4 + * @arg @ref ADC_CHANNEL_5 + * @arg @ref ADC_CHANNEL_6 + * @arg @ref ADC_CHANNEL_7 + * @arg @ref ADC_CHANNEL_8 + * @arg @ref ADC_CHANNEL_9 + * @arg @ref ADC_CHANNEL_10 + * @arg @ref ADC_CHANNEL_11 + * @arg @ref ADC_CHANNEL_12 + * @arg @ref ADC_CHANNEL_13 + * @arg @ref ADC_CHANNEL_14 + * @arg @ref ADC_CHANNEL_15 + * @arg @ref ADC_CHANNEL_16 + * @arg @ref ADC_CHANNEL_17 + * @arg @ref ADC_CHANNEL_18 + */ +#define __HAL_ADC_CHANNEL_INTERNAL_TO_EXTERNAL(__CHANNEL__) \ + __LL_ADC_CHANNEL_INTERNAL_TO_EXTERNAL((__CHANNEL__)) + +/** + * @brief Helper macro to determine whether the internal channel + * selected is available on the ADC instance selected. + * @note The channel parameter must be a value defined from parameter + * definition of a ADC internal channel (ADC_CHANNEL_VREFINT, + * ADC_CHANNEL_TEMPSENSOR, ...), + * must not be a value defined from parameter definition of + * ADC external channel (ADC_CHANNEL_1, ADC_CHANNEL_2, ...) + * or a value from functions where a channel number is + * returned from ADC registers, + * because internal and external channels share the same channel + * number in ADC registers. The differentiation is made only with + * parameters definitions of driver. + * @param __ADC_INSTANCE__ ADC instance + * @param __CHANNEL__ This parameter can be one of the following values: + * @arg @ref ADC_CHANNEL_VREFINT (1) + * @arg @ref ADC_CHANNEL_TEMPSENSOR (4) + * @arg @ref ADC_CHANNEL_VBAT (4) + * @arg @ref ADC_CHANNEL_DAC1CH1 (5) + * @arg @ref ADC_CHANNEL_DAC1CH2 (5) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC2 (2)(6) + * @arg @ref ADC_CHANNEL_DAC1CH1_ADC3 (3)(6) + * @arg @ref ADC_CHANNEL_DAC1CH2_ADC3 (3)(6) + * + * (1) On STM32L4, parameter available only on ADC instance: ADC1.\n + * (2) On STM32L4, parameter available only on ADC instance: ADC2.\n + * (3) On STM32L4, parameter available only on ADC instance: ADC3.\n + * (4) On STM32L4, parameter available only on ADC instances: ADC1, ADC3.\n + * (5) On STM32L4, parameter available on devices with only 1 ADC instance.\n + * (6) On STM32L4, parameter available on devices with several ADC instances. + * @retval Value "0" if the internal channel selected is not available on the ADC instance selected. + * Value "1" if the internal channel selected is available on the ADC instance selected. + */ +#define __HAL_ADC_IS_CHANNEL_INTERNAL_AVAILABLE(__ADC_INSTANCE__, __CHANNEL__) \ + __LL_ADC_IS_CHANNEL_INTERNAL_AVAILABLE((__ADC_INSTANCE__), (__CHANNEL__)) + +#if defined(ADC_MULTIMODE_SUPPORT) +/** + * @brief Helper macro to get the ADC multimode conversion data of ADC master + * or ADC slave from raw value with both ADC conversion data concatenated. + * @note This macro is intended to be used when multimode transfer by DMA + * is enabled: refer to function @ref LL_ADC_SetMultiDMATransfer(). + * In this case the transferred data need to processed with this macro + * to separate the conversion data of ADC master and ADC slave. + * @param __ADC_MULTI_MASTER_SLAVE__ This parameter can be one of the following values: + * @arg @ref LL_ADC_MULTI_MASTER + * @arg @ref LL_ADC_MULTI_SLAVE + * @param __ADC_MULTI_CONV_DATA__ Value between Min_Data=0x000 and Max_Data=0xFFF + * @retval Value between Min_Data=0x000 and Max_Data=0xFFF + */ +#define __HAL_ADC_MULTI_CONV_DATA_MASTER_SLAVE(__ADC_MULTI_MASTER_SLAVE__, __ADC_MULTI_CONV_DATA__) \ + __LL_ADC_MULTI_CONV_DATA_MASTER_SLAVE((__ADC_MULTI_MASTER_SLAVE__), (__ADC_MULTI_CONV_DATA__)) +#endif + +/** + * @brief Helper macro to select the ADC common instance + * to which is belonging the selected ADC instance. + * @note ADC common register instance can be used for: + * - Set parameters common to several ADC instances + * - Multimode (for devices with several ADC instances) + * Refer to functions having argument "ADCxy_COMMON" as parameter. + * @param __ADCx__ ADC instance + * @retval ADC common register instance + */ +#define __HAL_ADC_COMMON_INSTANCE(__ADCx__) \ + __LL_ADC_COMMON_INSTANCE((__ADCx__)) + +/** + * @brief Helper macro to check if all ADC instances sharing the same + * ADC common instance are disabled. + * @note This check is required by functions with setting conditioned to + * ADC state: + * All ADC instances of the ADC common group must be disabled. + * Refer to functions having argument "ADCxy_COMMON" as parameter. + * @note On devices with only 1 ADC common instance, parameter of this macro + * is useless and can be ignored (parameter kept for compatibility + * with devices featuring several ADC common instances). + * @param __ADCXY_COMMON__ ADC common instance + * (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() ) + * @retval Value "0" if all ADC instances sharing the same ADC common instance + * are disabled. + * Value "1" if at least one ADC instance sharing the same ADC common instance + * is enabled. + */ +#define __HAL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__ADCXY_COMMON__) \ + __LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE((__ADCXY_COMMON__)) + +/** + * @brief Helper macro to define the ADC conversion data full-scale digital + * value corresponding to the selected ADC resolution. + * @note ADC conversion data full-scale corresponds to voltage range + * determined by analog voltage references Vref+ and Vref- + * (refer to reference manual). + * @param __ADC_RESOLUTION__ This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval ADC conversion data equivalent voltage value (unit: mVolt) + */ +#define __HAL_ADC_DIGITAL_SCALE(__ADC_RESOLUTION__) \ + __LL_ADC_DIGITAL_SCALE((__ADC_RESOLUTION__)) + +/** + * @brief Helper macro to convert the ADC conversion data from + * a resolution to another resolution. + * @param __DATA__ ADC conversion data to be converted + * @param __ADC_RESOLUTION_CURRENT__ Resolution of to the data to be converted + * This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @param __ADC_RESOLUTION_TARGET__ Resolution of the data after conversion + * This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval ADC conversion data to the requested resolution + */ +#define __HAL_ADC_CONVERT_DATA_RESOLUTION(__DATA__,\ + __ADC_RESOLUTION_CURRENT__,\ + __ADC_RESOLUTION_TARGET__) \ + __LL_ADC_CONVERT_DATA_RESOLUTION((__DATA__),\ + (__ADC_RESOLUTION_CURRENT__),\ + (__ADC_RESOLUTION_TARGET__)) + +/** + * @brief Helper macro to calculate the voltage (unit: mVolt) + * corresponding to a ADC conversion data (unit: digital value). + * @note Analog reference voltage (Vref+) must be either known from + * user board environment or can be calculated using ADC measurement + * and ADC helper macro @ref __LL_ADC_CALC_VREFANALOG_VOLTAGE(). + * @param __VREFANALOG_VOLTAGE__ Analog reference voltage (unit: mV) + * @param __ADC_DATA__ ADC conversion data (resolution 12 bits) + * (unit: digital value). + * @param __ADC_RESOLUTION__ This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval ADC conversion data equivalent voltage value (unit: mVolt) + */ +#define __HAL_ADC_CALC_DATA_TO_VOLTAGE(__VREFANALOG_VOLTAGE__,\ + __ADC_DATA__,\ + __ADC_RESOLUTION__) \ + __LL_ADC_CALC_DATA_TO_VOLTAGE((__VREFANALOG_VOLTAGE__),\ + (__ADC_DATA__),\ + (__ADC_RESOLUTION__)) + +/** + * @brief Helper macro to calculate analog reference voltage (Vref+) + * (unit: mVolt) from ADC conversion data of internal voltage + * reference VrefInt. + * @note Computation is using VrefInt calibration value + * stored in system memory for each device during production. + * @note This voltage depends on user board environment: voltage level + * connected to pin Vref+. + * On devices with small package, the pin Vref+ is not present + * and internally bonded to pin Vdda. + * @note On this STM32 serie, calibration data of internal voltage reference + * VrefInt corresponds to a resolution of 12 bits, + * this is the recommended ADC resolution to convert voltage of + * internal voltage reference VrefInt. + * Otherwise, this macro performs the processing to scale + * ADC conversion data to 12 bits. + * @param __VREFINT_ADC_DATA__ ADC conversion data (resolution 12 bits) + * of internal voltage reference VrefInt (unit: digital value). + * @param __ADC_RESOLUTION__ This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval Analog reference voltage (unit: mV) + */ +#define __HAL_ADC_CALC_VREFANALOG_VOLTAGE(__VREFINT_ADC_DATA__,\ + __ADC_RESOLUTION__) \ + __LL_ADC_CALC_VREFANALOG_VOLTAGE((__VREFINT_ADC_DATA__),\ + (__ADC_RESOLUTION__)) + +/** + * @brief Helper macro to calculate the temperature (unit: degree Celsius) + * from ADC conversion data of internal temperature sensor. + * @note Computation is using temperature sensor calibration values + * stored in system memory for each device during production. + * @note Calculation formula: + * Temperature = ((TS_ADC_DATA - TS_CAL1) + * * (TS_CAL2_TEMP - TS_CAL1_TEMP)) + * / (TS_CAL2 - TS_CAL1) + TS_CAL1_TEMP + * with TS_ADC_DATA = temperature sensor raw data measured by ADC + * Avg_Slope = (TS_CAL2 - TS_CAL1) + * / (TS_CAL2_TEMP - TS_CAL1_TEMP) + * TS_CAL1 = equivalent TS_ADC_DATA at temperature + * TEMP_DEGC_CAL1 (calibrated in factory) + * TS_CAL2 = equivalent TS_ADC_DATA at temperature + * TEMP_DEGC_CAL2 (calibrated in factory) + * Caution: Calculation relevancy under reserve that calibration + * parameters are correct (address and data). + * To calculate temperature using temperature sensor + * datasheet typical values (generic values less, therefore + * less accurate than calibrated values), + * use helper macro @ref __LL_ADC_CALC_TEMPERATURE_TYP_PARAMS(). + * @note As calculation input, the analog reference voltage (Vref+) must be + * defined as it impacts the ADC LSB equivalent voltage. + * @note Analog reference voltage (Vref+) must be either known from + * user board environment or can be calculated using ADC measurement + * and ADC helper macro @ref __LL_ADC_CALC_VREFANALOG_VOLTAGE(). + * @note On this STM32 serie, calibration data of temperature sensor + * corresponds to a resolution of 12 bits, + * this is the recommended ADC resolution to convert voltage of + * temperature sensor. + * Otherwise, this macro performs the processing to scale + * ADC conversion data to 12 bits. + * @param __VREFANALOG_VOLTAGE__ Analog reference voltage (unit: mV) + * @param __TEMPSENSOR_ADC_DATA__ ADC conversion data of internal + * temperature sensor (unit: digital value). + * @param __ADC_RESOLUTION__ ADC resolution at which internal temperature + * sensor voltage has been measured. + * This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval Temperature (unit: degree Celsius) + */ +#define __HAL_ADC_CALC_TEMPERATURE(__VREFANALOG_VOLTAGE__,\ + __TEMPSENSOR_ADC_DATA__,\ + __ADC_RESOLUTION__) \ + __LL_ADC_CALC_TEMPERATURE((__VREFANALOG_VOLTAGE__),\ + (__TEMPSENSOR_ADC_DATA__),\ + (__ADC_RESOLUTION__)) + +/** + * @brief Helper macro to calculate the temperature (unit: degree Celsius) + * from ADC conversion data of internal temperature sensor. + * @note Computation is using temperature sensor typical values + * (refer to device datasheet). + * @note Calculation formula: + * Temperature = (TS_TYP_CALx_VOLT(uV) - TS_ADC_DATA * Conversion_uV) + * / Avg_Slope + CALx_TEMP + * with TS_ADC_DATA = temperature sensor raw data measured by ADC + * (unit: digital value) + * Avg_Slope = temperature sensor slope + * (unit: uV/Degree Celsius) + * TS_TYP_CALx_VOLT = temperature sensor digital value at + * temperature CALx_TEMP (unit: mV) + * Caution: Calculation relevancy under reserve the temperature sensor + * of the current device has characteristics in line with + * datasheet typical values. + * If temperature sensor calibration values are available on + * on this device (presence of macro __LL_ADC_CALC_TEMPERATURE()), + * temperature calculation will be more accurate using + * helper macro @ref __LL_ADC_CALC_TEMPERATURE(). + * @note As calculation input, the analog reference voltage (Vref+) must be + * defined as it impacts the ADC LSB equivalent voltage. + * @note Analog reference voltage (Vref+) must be either known from + * user board environment or can be calculated using ADC measurement + * and ADC helper macro @ref __LL_ADC_CALC_VREFANALOG_VOLTAGE(). + * @note ADC measurement data must correspond to a resolution of 12bits + * (full scale digital value 4095). If not the case, the data must be + * preliminarily rescaled to an equivalent resolution of 12 bits. + * @param __TEMPSENSOR_TYP_AVGSLOPE__ Device datasheet data: Temperature sensor slope typical value (unit: uV/DegCelsius). + * On STM32L4, refer to device datasheet parameter "Avg_Slope". + * @param __TEMPSENSOR_TYP_CALX_V__ Device datasheet data: Temperature sensor voltage typical value (at temperature and Vref+ defined in parameters below) (unit: mV). + * On STM32L4, refer to device datasheet parameter "V30" (corresponding to TS_CAL1). + * @param __TEMPSENSOR_CALX_TEMP__ Device datasheet data: Temperature at which temperature sensor voltage (see parameter above) is corresponding (unit: mV) + * @param __VREFANALOG_VOLTAGE__ Analog voltage reference (Vref+) voltage (unit: mV) + * @param __TEMPSENSOR_ADC_DATA__ ADC conversion data of internal temperature sensor (unit: digital value). + * @param __ADC_RESOLUTION__ ADC resolution at which internal temperature sensor voltage has been measured. + * This parameter can be one of the following values: + * @arg @ref ADC_RESOLUTION_12B + * @arg @ref ADC_RESOLUTION_10B + * @arg @ref ADC_RESOLUTION_8B + * @arg @ref ADC_RESOLUTION_6B + * @retval Temperature (unit: degree Celsius) + */ +#define __HAL_ADC_CALC_TEMPERATURE_TYP_PARAMS(__TEMPSENSOR_TYP_AVGSLOPE__,\ + __TEMPSENSOR_TYP_CALX_V__,\ + __TEMPSENSOR_CALX_TEMP__,\ + __VREFANALOG_VOLTAGE__,\ + __TEMPSENSOR_ADC_DATA__,\ + __ADC_RESOLUTION__) \ + __LL_ADC_CALC_TEMPERATURE_TYP_PARAMS((__TEMPSENSOR_TYP_AVGSLOPE__),\ + (__TEMPSENSOR_TYP_CALX_V__),\ + (__TEMPSENSOR_CALX_TEMP__),\ + (__VREFANALOG_VOLTAGE__),\ + (__TEMPSENSOR_ADC_DATA__),\ + (__ADC_RESOLUTION__)) + +/** + * @} + */ /** * @} @@ -965,7 +1703,7 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc); */ /** @addtogroup ADC_Exported_Functions_Group2 - * @brief IO operation functions + * @brief IO operation functions * @{ */ /* IO operation functions *****************************************************/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.c index e43572a990..249566e9a9 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.c @@ -2,22 +2,20 @@ ****************************************************************************** * @file stm32l4xx_hal_adc_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file provides firmware functions to manage the following * functionalities of the Analog to Digital Convertor (ADC) * peripheral: * + Operation functions - * ++ Start, stop, get result of conversions of injected - * group, using 2 possible modes: polling, interruption. + * ++ Start, stop, get result of conversions of ADC group injected, + * using 2 possible modes: polling, interruption. * ++ Calibration * +++ ADC automatic self-calibration * +++ Calibration factors get or set * ++ Multimode feature when available * + Control functions - * ++ Channels configuration on injected group + * ++ Channels configuration on ADC group injected * + State functions - * ++ Injected group queues management + * ++ ADC group injected contexts queue management * Other functions (generic functions) are available in file * "stm32l4xx_hal_adc.c". * @@ -83,10 +81,6 @@ ADC_JSQR_JSQ3 | ADC_JSQR_JSQ4 )) /*!< ADC_JSQR fields of parameters that can be updated anytime once the ADC is enabled */ -#define ADC_CFGR2_INJ_FIELDS ((uint32_t)(ADC_CFGR2_JOVSE | ADC_CFGR2_OVSR |\ - ADC_CFGR2_OVSS )) /*!< ADC_CFGR2 injected oversampling parameters that can be updated - when no conversion is on-going (neither regular nor injected) */ - /* Fixed timeout value for ADC calibration. */ /* Values defined to be higher than worst cases: low clock frequency, */ /* maximum prescalers. */ @@ -95,7 +89,7 @@ /* 112 / 140,000 = 0.8 ms */ /* At maximum CPU speed (80 MHz), this means */ /* 0.8 ms * 80 MHz = 64000 CPU cycles */ -#define ADC_CALIBRATION_TIMEOUT ((uint32_t) 64000) /*!< ADC calibration time-out value */ +#define ADC_CALIBRATION_TIMEOUT (64000U) /*!< ADC calibration time-out value */ /** * @} @@ -122,13 +116,13 @@ (+) Perform the ADC self-calibration for single or differential ending. (+) Get calibration factors for single or differential ending. (+) Set calibration factors for single or differential ending. - - (+) Start conversion of injected group. - (+) Stop conversion of injected group. - (+) Poll for conversion complete on injected group. - (+) Get result of injected channel conversion. - (+) Start conversion of injected group and enable interruptions. - (+) Stop conversion of injected group and disable interruptions. + + (+) Start conversion of ADC group injected. + (+) Stop conversion of ADC group injected. + (+) Poll for conversion complete on ADC group injected. + (+) Get result of ADC group injected channel conversion. + (+) Start conversion of ADC group injected and enable interruptions. + (+) Stop conversion of ADC group injected and disable interruptions. (+) When multimode feature is available, start multimode and enable DMA transfer. (+) Stop multimode and disable ADC DMA transfer. @@ -144,9 +138,9 @@ * function before HAL_ADC_Start() or after HAL_ADC_Stop() ). * @param hadc ADC handle * @param SingleDiff Selection of single-ended or differential input - * This parameter can be one of the following values: - * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended - * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended + * This parameter can be one of the following values: + * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended + * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t SingleDiff) @@ -157,7 +151,7 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff)); - + /* Process locked */ __HAL_LOCK(hadc); @@ -169,10 +163,13 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t /* Check if ADC is effectively disabled */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_REG_BUSY and HAL_ADC_STATE_INJ_BUSY bits, set HAL_ADC_STATE_BUSY_INTERNAL bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_REG_BUSY|HAL_ADC_STATE_INJ_BUSY), HAL_ADC_STATE_BUSY_INTERNAL); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_BUSY_INTERNAL); + + /* Select calibration mode single ended or differential ended */ MODIFY_REG(hadc->Instance->CR, ADC_CR_ADCALDIF, SingleDiff); @@ -186,8 +183,9 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t if (WaitLoopIndex >= ADC_CALIBRATION_TIMEOUT) { /* Update ADC state machine to error */ - /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_ERROR_INTERNAL bit */ - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL); + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_ERROR_INTERNAL); /* Process unlocked */ __HAL_UNLOCK(hadc); @@ -196,8 +194,10 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t } } - /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_READY); } else { @@ -215,13 +215,12 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t } /** - * @brief Get the calibration factor from automatic conversion result. - * @param hadc: ADC handle. - * @param SingleDiff: Selection of single-ended or differential input - * This parameter can be one of the following values: - * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended - * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended - * @retval Converted value + * @brief Get the calibration factor. + * @param hadc ADC handle. + * @param SingleDiff This parameter can be only: + * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended + * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended + * @retval Calibration value. */ uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef* hadc, uint32_t SingleDiff) { @@ -229,7 +228,7 @@ uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef* hadc, uint32_t Single assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff)); - /* Return the selected ADC calibration value */ + /* Return the selected ADC calibration value */ if (SingleDiff == ADC_DIFFERENTIAL_ENDED) { return ADC_CALFACT_DIFF_GET(hadc->Instance->CALFACT); @@ -241,13 +240,13 @@ uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef* hadc, uint32_t Single } /** - * @brief Set the calibration factor to overwrite automatic conversion result. ADC must be enabled and no conversion on going. - * @param hadc: ADC handle. - * @param SingleDiff: Selection of single-ended or differential input. - * This parameter can be one of the following values: - * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended - * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended - * @param CalibrationFactor: Calibration factor (coded on 7 bits maximum) + * @brief Set the calibration factor to overwrite automatic conversion result. + * ADC must be enabled and no conversion is ongoing. + * @param hadc ADC handle + * @param SingleDiff This parameter can be only: + * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended + * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended + * @param CalibrationFactor Calibration factor (coded on 7 bits maximum) * @retval HAL state */ HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef* hadc, uint32_t SingleDiff, uint32_t CalibrationFactor) @@ -281,6 +280,8 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef* hadc, uint32 { /* Update ADC state machine */ SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); + /* Update ADC error code */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); /* Update ADC state machine to error */ tmp_hal_status = HAL_ERROR; @@ -301,7 +302,7 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef* hadc, uint32 * then for ADC master. * For ADC slave, ADC is enabled only (conversion is not started). * For ADC master, ADC is enabled and multimode conversion is started. - * @param hadc: ADC handle. + * @param hadc ADC handle. * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) @@ -353,9 +354,13 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) /* Set ADC error code to none */ ADC_CLEAR_ERRORCODE(hadc); } - /* Update ADC state */ - /* Clear HAL_ADC_STATE_READY and HAL_ADC_STATE_INJ_EOC bits, set HAL_ADC_STATE_INJ_BUSY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_READY|HAL_ADC_STATE_INJ_EOC), HAL_ADC_STATE_INJ_BUSY); + + /* Set ADC state */ + /* - Clear state bitfield related to injected group conversion results */ + /* - Set state bitfield related to injected operation */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, + HAL_ADC_STATE_INJ_BUSY); /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit - by default if ADC is Master or Independent or if multimode feature is not available @@ -365,11 +370,15 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); } - - /* Clear injected group conversion flag */ + /* Clear ADC group injected group conversion flag */ /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS)); + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + /* Enable conversion of injected group, if automatic injected conversion */ /* is disabled. */ /* If software start has been selected, conversion starts immediately. */ @@ -388,8 +397,6 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) { /* hadc is not the handle of a Slave ADC with dual injected conversions enabled: set ADSTART only if JAUTO is cleared */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); if (HAL_IS_BIT_CLR(hadc->Instance->CFGR, ADC_CFGR_JAUTO)) { SET_BIT(hadc->Instance->CR, ADC_CR_JADSTART) ; @@ -400,19 +407,17 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) /* hadc is the handle of a Slave ADC with dual injected conversions enabled: ADSTART is not set */ SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); - /* Process unlocked */ - __HAL_UNLOCK(hadc); } } else { /* Process unlocked */ __HAL_UNLOCK(hadc); - } /* if (tmp_hal_status == HAL_OK) */ + } /* Return function status */ return tmp_hal_status; - } /* if (ADC_IS_CONVERSION_ONGOING_INJECTED(hadc)) */ + } } /** @@ -428,7 +433,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) * For ADC master, conversion is stopped and ADC is disabled. * For ADC slave, ADC is disabled only (conversion stop of ADC master * has already stopped conversion of ADC slave). - * @param hadc: ADC handle. + * @param hadc ADC handle. * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc) @@ -456,16 +461,17 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc) /* Check if ADC is effectively disabled */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_REG_BUSY and HAL_ADC_STATE_INJ_BUSY bits, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_REG_BUSY|HAL_ADC_STATE_INJ_BUSY), HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } /* Conversion on injected group is stopped, but ADC not disabled since */ /* conversion on regular group is still running. */ else { - /* Clear HAL_ADC_STATE_INJ_BUSY bit */ + /* Set ADC state */ CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); } } @@ -479,23 +485,19 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc) /** * @brief Wait for injected group conversion to be completed. - * @param hadc: ADC handle - * @param Timeout: Timeout value in millisecond. + * @param hadc ADC handle + * @param Timeout Timeout value in millisecond. * @note Depending on hadc->Init.EOCSelection, JEOS or JEOC is * checked and cleared depending on AUTDLY bit status. * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) { - uint32_t tickstart; - uint32_t tmp_Flag_End = 0x00; - ADC_TypeDef *tmpADC_Master; - uint32_t tmp_cfgr = 0x00; - uint32_t tmp_cfgr_jqm_autdly = 0x00; - uint32_t tmp_jeos_raised = 0x01; /* by default, assume that JEOS is set, - tmp_jeos_raised will be corrected - accordingly during API execution */ - + uint32_t tickstart = 0U; + uint32_t tmp_Flag_End = 0U; + uint32_t tmp_cfgr = 0U; + ADC_TypeDef *tmpADC_Master; + /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); @@ -531,47 +533,51 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u } } - /* Next, to clear the polled flag as well as to update the handle State, - JEOS is checked and the relevant configuration registers are retrieved. - JQM, JAUTO and CONT bits will have to be read for the State update, - AUTDLY for JEOS clearing. */ - /* 1. Check whether or not JEOS is set */ - if (HAL_IS_BIT_CLR(hadc->Instance->ISR, ADC_FLAG_JEOS)) + /* Get relevant register CFGR in ADC instance of ADC master or slave */ + /* in function of multimode state (for devices with multimode */ + /* available). */ + if (ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(hadc) == SET) { - tmp_jeos_raised = 0; - } - /* 2. Check whether or not hadc is the handle of a Slave ADC with dual - injected conversions enabled. */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(hadc) == RESET) - { - /* hadc is not the handle of a Slave ADC with dual injected conversions enabled: - check JQM and AUTDLY bits directly in ADC CFGR register */ - tmp_cfgr_jqm_autdly = READ_REG(hadc->Instance->CFGR); - } - else - { - /* hadc is the handle of a Slave ADC with dual injected conversions enabled: - need to check JQM and AUTDLY bits of Master ADC CFGR register */ - tmpADC_Master = ADC_MASTER_REGISTER(hadc); - tmp_cfgr_jqm_autdly = READ_REG(tmpADC_Master->CFGR); - } - /* 3. Check whether or not hadc is the handle of a Slave ADC with dual - regular conversions enabled. */ - if (ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(hadc)) - { - /* hadc is not the handle of a Slave ADC with dual regular conversions enabled: - check JAUTO and CONT bits directly in ADC CFGR register */ tmp_cfgr = READ_REG(hadc->Instance->CFGR); } else { - /* hadc is not the handle of a Slave ADC with dual regular conversions enabled: - check JAUTO and CONT bits of Master ADC CFGR register */ tmpADC_Master = ADC_MASTER_REGISTER(hadc); tmp_cfgr = READ_REG(tmpADC_Master->CFGR); } + /* Update ADC state machine */ + SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC); + /* Determine whether any further conversion upcoming on group injected */ + /* by external trigger or by automatic injected conversion */ + /* from group regular. */ + if(ADC_IS_SOFTWARE_START_INJECTED(hadc) || + ((READ_BIT (tmp_cfgr, ADC_CFGR_JAUTO) == RESET) && + (ADC_IS_SOFTWARE_START_REGULAR(hadc) && + (READ_BIT (tmp_cfgr, ADC_CFGR_CONT) == RESET) ) ) ) + { + /* Check whether end of sequence is reached */ + if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS) ) + { + /* Particular case if injected contexts queue is enabled: */ + /* when the last context has been fully processed, JSQR is reset */ + /* by the hardware. Even if no injected conversion is planned to come */ + /* (queue empty, triggers are ignored), it can start again */ + /* immediately after setting a new context (JADSTART is still set). */ + /* Therefore, state of HAL ADC injected group is kept to busy. */ + if(READ_BIT(tmp_cfgr, ADC_CFGR_JQM) == RESET) + { + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); + + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) + { + SET_BIT(hadc->State, HAL_ADC_STATE_READY); + } + } + } + } /* Clear polled flag */ if (tmp_Flag_End == ADC_FLAG_JEOS) @@ -580,46 +586,16 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u /* "LowPowerAutoWait " is disabled, to not interfere with this feature. */ /* For injected groups, no new conversion will start before JEOS is */ /* cleared. */ - /* Note that 1. reading ADCx_JDRy clears JEOC. */ - /* 2. in multimode with dual injected conversions enabled (when */ - /* multimode feature is available), Master AUTDLY bit is */ - /* checked. */ - if (READ_BIT (tmp_cfgr_jqm_autdly, ADC_CFGR_AUTDLY) == RESET) + if (READ_BIT (tmp_cfgr, ADC_CFGR_AUTDLY) == RESET) { - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC); + __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS)); } } else { - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC); + __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC); } - - /* Update ADC state machine */ - SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC); - /* Are injected conversions over ? This is the case if JEOS is set AND - - injected conversions are software-triggered when injected queue management is disabled - OR - - auto-injection is enabled, continuous mode is disabled, - and regular conversions are software-triggered */ - - if (tmp_jeos_raised) - { - if ((ADC_IS_SOFTWARE_START_INJECTED(hadc) && (READ_BIT(tmp_cfgr_jqm_autdly, ADC_CFGR_JQM) != ADC_CFGR_JQM)) - && (!((READ_BIT(tmp_cfgr, (ADC_CFGR_JAUTO|ADC_CFGR_CONT)) == (ADC_CFGR_JAUTO|ADC_CFGR_CONT)) && - (ADC_IS_SOFTWARE_START_REGULAR(hadc))) )) - { - /* Clear HAL_ADC_STATE_INJ_BUSY bit */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); - /* If no regular conversion on-going, set HAL_ADC_STATE_READY bit */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) - { - SET_BIT(hadc->State, HAL_ADC_STATE_READY); - } - } - } - - /* Return API HAL status */ return HAL_OK; } @@ -633,7 +609,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u * then for ADC master. * For ADC slave, ADC is enabled only (conversion is not started). * For ADC master, ADC is enabled and multimode conversion is started. - * @param hadc: ADC handle. + * @param hadc ADC handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) @@ -649,7 +625,6 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) } else { - /* In case of software trigger detection enabled, JQDIS must be set (which can be done only if ADSTART and JADSTART are both cleared). If JQDIS is not set at that point, returns an error @@ -684,8 +659,13 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) /* Set ADC error code to none */ ADC_CLEAR_ERRORCODE(hadc); } - /* Clear HAL_ADC_STATE_READY and HAL_ADC_STATE_INJ_EOC bits, set HAL_ADC_STATE_INJ_BUSY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_READY|HAL_ADC_STATE_INJ_EOC), HAL_ADC_STATE_INJ_BUSY); + + /* Set ADC state */ + /* - Clear state bitfield related to injected group conversion results */ + /* - Set state bitfield related to injected operation */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, + HAL_ADC_STATE_INJ_BUSY); /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit - by default if ADC is Master or Independent or if multimode feature is not available @@ -694,11 +674,16 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) { CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); } - - /* Clear injected group conversion flag */ + + /* Clear ADC group injected group conversion flag */ /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS)); + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + /* Enable ADC Injected context queue overflow interrupt if this feature */ /* is enabled. */ if ((hadc->Instance->CFGR & ADC_CFGR_JQM) != RESET) @@ -738,8 +723,6 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) { /* hadc is not the handle of a Slave ADC with dual injected conversions enabled: set ADSTART only if JAUTO is cleared */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); if (HAL_IS_BIT_CLR(hadc->Instance->CFGR, ADC_CFGR_JAUTO)) { SET_BIT(hadc->Instance->CR, ADC_CR_JADSTART) ; @@ -750,8 +733,6 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) /* hadc is the handle of a Slave ADC with dual injected conversions enabled: ADSTART is not set */ SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); - /* Process unlocked */ - __HAL_UNLOCK(hadc); } } else @@ -762,7 +743,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) /* Return function status */ return tmp_hal_status; -} + } } /** @@ -781,7 +762,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) * For ADC slave, ADC is disabled only (conversion stop of ADC master * has already stopped conversion of ADC slave). * @note In case of auto-injection mode, HAL_ADC_Stop() must be used. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) @@ -805,7 +786,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) /* Disable ADC end of conversion interrupt for injected channels */ __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_JEOC | ADC_IT_JEOS | ADC_FLAG_JQOVF)); - if ((ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)) + if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) { /* 2. Disable the ADC peripheral */ tmp_hal_status = ADC_Disable(hadc); @@ -813,17 +794,18 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) /* Check if ADC is effectively disabled */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_REG_BUSY and HAL_ADC_STATE_INJ_BUSY bits, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_REG_BUSY|HAL_ADC_STATE_INJ_BUSY), HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } /* Conversion on injected group is stopped, but ADC not disabled since */ /* conversion on regular group is still running. */ else { - /* Clear HAL_ADC_STATE_INJ_BUSY bit */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); } } @@ -834,8 +816,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) return tmp_hal_status; } - -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Enable ADC, start MultiMode conversion and transfer regular results through DMA. * @note Multimode must have been previously configured using @@ -846,9 +827,9 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) * @note State field of Slave ADC handle is not updated in this configuration: * user should not rely on it for information related to Slave regular * conversions. - * @param hadc: ADC handle of ADC master (handle of ADC slave must not be used) - * @param pData: Destination Buffer address. - * @param Length: Length of data to be transferred from ADC peripheral to memory (in bytes). + * @param hadc ADC handle of ADC master (handle of ADC slave must not be used) + * @param pData Destination Buffer address. + * @param Length Length of data to be transferred from ADC peripheral to memory (in bytes). * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length) @@ -877,7 +858,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t if (tmphadcSlave.Instance == NULL) { - /* Update ADC state machine to error */ + /* Set ADC state */ SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); /* Process unlocked */ @@ -886,7 +867,6 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t return HAL_ERROR; } - /* Enable the ADC peripherals: master and slave (in case if not already */ /* enabled previously) */ tmp_hal_status = ADC_Enable(hadc); @@ -898,15 +878,14 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t /* Start multimode conversion of ADCs pair */ if (tmp_hal_status == HAL_OK) { - /* Update Master State */ - /* Clear HAL_ADC_STATE_READY and regular conversion results bits, set HAL_ADC_STATE_REG_BUSY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_READY|HAL_ADC_STATE_REG_EOC|HAL_ADC_STATE_REG_OVR|HAL_ADC_STATE_REG_EOSMP), HAL_ADC_STATE_REG_BUSY); - - + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + (HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP), + HAL_ADC_STATE_REG_BUSY); + /* Set ADC error code to none */ ADC_CLEAR_ERRORCODE(hadc); - /* Set the DMA transfer complete callback */ hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt; @@ -917,8 +896,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t hadc->DMA_Handle->XferErrorCallback = ADC_DMAError ; /* Pointer to the common control register */ - tmpADC_Common = ADC_COMMON_REGISTER(hadc); - + tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance); /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC */ /* start (in case of SW start): */ @@ -927,20 +905,23 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR)); + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + /* Enable ADC overrun interrupt */ __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); - + /* Start the DMA channel */ HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&tmpADC_Common->CDR, (uint32_t)pData, Length); /* Enable conversion of regular group. */ - /* Process unlocked */ - __HAL_UNLOCK(hadc); /* If software start has been selected, conversion starts immediately. */ /* If external trigger has been selected, conversion will start at next */ /* trigger event. */ - SET_BIT(hadc->Instance->CR, ADC_CR_ADSTART); - + /* Start ADC group regular conversion */ + LL_ADC_REG_StartConversion(hadc->Instance); } else { @@ -963,7 +944,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t * @note In case of DMA configured in circular mode, function * HAL_ADC_Stop_DMA() must be called after this function with handle of * ADC slave, to properly disable the DMA channel. - * @param hadc: ADC handle of ADC master (handle of ADC slave must not be used) + * @param hadc ADC handle of ADC master (handle of ADC slave must not be used) * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc) @@ -1053,10 +1034,11 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc) ADC_Disable(hadc); ADC_Disable(&tmphadcSlave); } - /* Change ADC state (ADC master) */ - /* Clear HAL_ADC_STATE_REG_BUSY and HAL_ADC_STATE_INJ_BUSY bits, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, (HAL_ADC_STATE_REG_BUSY|HAL_ADC_STATE_INJ_BUSY), HAL_ADC_STATE_READY); + /* Set ADC state (ADC master) */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } /* Process unlocked */ @@ -1068,7 +1050,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc) /** * @brief Return the last ADC Master and Slave regular conversions results when in multimode configuration. - * @param hadc: ADC handle of ADC Master (handle of ADC Slave must not be used) + * @param hadc ADC handle of ADC Master (handle of ADC Slave must not be used) * @retval The converted data values. */ uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc) @@ -1079,12 +1061,12 @@ uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc) assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance)); /* Pointer to the common control register */ - tmpADC_Common = ADC_COMMON_REGISTER(hadc); + tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance); /* Return the multi mode conversion value */ return tmpADC_Common->CDR; } -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @brief Get ADC injected group conversion result. @@ -1105,8 +1087,8 @@ uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc) * in programming model IT: @ref HAL_ADC_IRQHandler(), in programming * model polling: @ref HAL_ADCEx_InjectedPollForConversion() * or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_JEOS). - * @param hadc: ADC handle - * @param InjectedRank: the converted ADC injected rank. + * @param hadc ADC handle + * @param InjectedRank the converted ADC injected rank. * This parameter can be one of the following values: * @arg @ref ADC_INJECTED_RANK_1 ADC group injected rank 1 * @arg @ref ADC_INJECTED_RANK_2 ADC group injected rank 2 @@ -1146,7 +1128,7 @@ uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRa /** * @brief Injected conversion complete callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) @@ -1165,7 +1147,7 @@ __weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) (parameter "QueueInjectedContext" in injected channel configuration) and if a new injected context is set when queue is full (maximum 2 contexts). - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADCEx_InjectedQueueOverflowCallback(ADC_HandleTypeDef* hadc) @@ -1180,7 +1162,7 @@ __weak void HAL_ADCEx_InjectedQueueOverflowCallback(ADC_HandleTypeDef* hadc) /** * @brief Analog watchdog 2 callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef* hadc) @@ -1195,7 +1177,7 @@ __weak void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef* hadc) /** * @brief Analog watchdog 3 callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef* hadc) @@ -1211,7 +1193,7 @@ __weak void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef* hadc) /** * @brief End Of Sampling callback in non-blocking mode. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval None */ __weak void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef* hadc) @@ -1224,13 +1206,11 @@ __weak void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef* hadc) */ } - - /** * @brief Stop ADC conversion of regular group (and injected channels in * case of auto_injection mode), disable ADC peripheral if no * conversion is on going on injected group. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADCEx_RegularStop(ADC_HandleTypeDef* hadc) @@ -1261,9 +1241,10 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop(ADC_HandleTypeDef* hadc) /* Check if ADC is effectively disabled */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_INJ_BUSY bit, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } /* Conversion on injected group is stopped, but ADC not disabled since */ @@ -1287,7 +1268,7 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop(ADC_HandleTypeDef* hadc) * disable interrution of end-of-conversion, * disable ADC peripheral if no conversion is on going * on injected group. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADCEx_RegularStop_IT(ADC_HandleTypeDef* hadc) @@ -1320,9 +1301,10 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop_IT(ADC_HandleTypeDef* hadc) /* if no issue reported */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_INJ_BUSY bit, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } else @@ -1346,7 +1328,7 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop_IT(ADC_HandleTypeDef* hadc) * @note HAL_ADCEx_RegularStop_DMA() function is dedicated to single-ADC mode only. * For multimode (when multimode feature is available), * HAL_ADCEx_RegularMultiModeStop_DMA() API must be used. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status. */ HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef* hadc) @@ -1403,9 +1385,10 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef* hadc) /* Check if ADC is effectively disabled */ if (tmp_hal_status == HAL_OK) { - /* Change ADC state */ - /* Clear HAL_ADC_STATE_INJ_BUSY bit, set HAL_ADC_STATE_READY bit */ - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY); + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); } } else @@ -1421,8 +1404,7 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef* hadc) return tmp_hal_status; } - -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Stop DMA-based multimode ADC conversion, disable ADC DMA transfer, disable ADC peripheral if no injected conversion is on-going. * @note Multimode is kept enabled after this function. Multimode DMA bits @@ -1433,7 +1415,7 @@ HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef* hadc) * @note In case of DMA configured in circular mode, function * HAL_ADCEx_RegularStop_DMA() must be called after this function with handle of * ADC slave, to properly disable the DMA channel. - * @param hadc: ADC handle of ADC master (handle of ADC slave must not be used) + * @param hadc ADC handle of ADC master (handle of ADC slave must not be used) * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_RegularMultiModeStop_DMA(ADC_HandleTypeDef* hadc) @@ -1547,7 +1529,7 @@ HAL_StatusTypeDef HAL_ADCEx_RegularMultiModeStop_DMA(ADC_HandleTypeDef* hadc) /* Return function status */ return tmp_hal_status; } -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @} @@ -1600,19 +1582,18 @@ HAL_StatusTypeDef HAL_ADCEx_RegularMultiModeStop_DMA(ADC_HandleTypeDef* hadc) * for each context (3 channels x 2 contexts = 6 calls). Conversion can * start once the 1st context is set, that is after the first three * HAL_ADCEx_InjectedConfigChannel() calls. The 2nd context can be set on the fly. - * @param hadc: ADC handle - * @param sConfigInjected: Structure of ADC injected group and ADC channel for + * @param hadc ADC handle + * @param sConfigInjected Structure of ADC injected group and ADC channel for * injected group. * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_InjectionConfTypeDef* sConfigInjected) { HAL_StatusTypeDef tmp_hal_status = HAL_OK; - ADC_Common_TypeDef *tmpADC_Common; uint32_t tmpOffsetShifted; - uint32_t wait_loop_index = 0; + uint32_t wait_loop_index = 0U; - uint32_t tmp_JSQR_ContextQueueBeingBuilt = 0; + uint32_t tmp_JSQR_ContextQueueBeingBuilt = 0U; /* Check the parameters */ assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); @@ -1621,7 +1602,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv)); assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->QueueInjectedContext)); assert_param(IS_ADC_EXTTRIGINJEC_EDGE(sConfigInjected->ExternalTrigInjecConvEdge)); - assert_param(IS_ADC_EXTTRIGINJEC(sConfigInjected->ExternalTrigInjecConv)); + assert_param(IS_ADC_EXTTRIGINJEC(hadc, sConfigInjected->ExternalTrigInjecConv)); assert_param(IS_ADC_OFFSET_NUMBER(sConfigInjected->InjectedOffsetNumber)); assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfigInjected->InjectedOffset)); assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjecOversamplingMode)); @@ -1677,9 +1658,9 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* injected ranks have been set. */ /* Note: Scan mode is not present by hardware on this device, but used */ /* by software for alignment over all STM32 devices. */ - + if ((hadc->Init.ScanConvMode == ADC_SCAN_DISABLE) || - (sConfigInjected->InjectedNbrOfConversion == 1) ) + (sConfigInjected->InjectedNbrOfConversion == 1U) ) { /* Configuration of context register JSQR: */ /* - number of ranks in injected group sequencer: fixed to 1st rank */ @@ -1695,19 +1676,18 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* Note: This configuration keeps the hardware feature of parameter */ /* ExternalTrigInjecConvEdge "trigger edge none" equivalent to */ /* software start. */ - if ((sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START) - && (sConfigInjected->ExternalTrigInjecConvEdge != ADC_EXTERNALTRIGINJECCONV_EDGE_NONE)) + if (sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START) { - tmp_JSQR_ContextQueueBeingBuilt = ( ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1) | - sConfigInjected->ExternalTrigInjecConv | - sConfigInjected->ExternalTrigInjecConvEdge ); + tmp_JSQR_ContextQueueBeingBuilt = ( ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1) + | (sConfigInjected->ExternalTrigInjecConv & ADC_JSQR_JEXTSEL) + | sConfigInjected->ExternalTrigInjecConvEdge + ); } else { - tmp_JSQR_ContextQueueBeingBuilt = ( ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1) ); + tmp_JSQR_ContextQueueBeingBuilt = ( ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1) ); } - MODIFY_REG(hadc->Instance->JSQR, ADC_JSQR_FIELDS, tmp_JSQR_ContextQueueBeingBuilt); /* For debug and informative reasons, hadc handle saves JSQR setting */ hadc->InjectionConfig.ContextQueue = tmp_JSQR_ContextQueueBeingBuilt; @@ -1726,7 +1706,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* if hadc->InjectionConfig.ChannelCount is equal to 0, this is the first */ /* call of the context under setting */ - if (hadc->InjectionConfig.ChannelCount == 0) + if (hadc->InjectionConfig.ChannelCount == 0U) { /* Initialize number of channels that will be configured on the context */ /* being built */ @@ -1734,7 +1714,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* Handle hadc saves the context under build up over each HAL_ADCEx_InjectedConfigChannel() call, this context will be written in JSQR register at the last call. At this point, the context is merely reset */ - hadc->InjectionConfig.ContextQueue = (uint32_t)0x00000000; + hadc->InjectionConfig.ContextQueue = 0x00000000U; /* Configuration of context register JSQR: */ /* - number of ranks in injected group sequencer */ @@ -1746,21 +1726,20 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* Note: This configuration keeps the hardware feature of parameter */ /* ExternalTrigInjecConvEdge "trigger edge none" equivalent to */ /* software start. */ - if ((sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START) - && (sConfigInjected->ExternalTrigInjecConvEdge != ADC_EXTERNALTRIGINJECCONV_EDGE_NONE)) + if (sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START) { - tmp_JSQR_ContextQueueBeingBuilt = ((sConfigInjected->InjectedNbrOfConversion - (uint32_t)1) | - sConfigInjected->ExternalTrigInjecConv | - sConfigInjected->ExternalTrigInjecConvEdge ); + tmp_JSQR_ContextQueueBeingBuilt = ( (sConfigInjected->InjectedNbrOfConversion - 1U) + | (sConfigInjected->ExternalTrigInjecConv & ADC_JSQR_JEXTSEL) + | sConfigInjected->ExternalTrigInjecConvEdge + ); } else { - tmp_JSQR_ContextQueueBeingBuilt = ((sConfigInjected->InjectedNbrOfConversion - (uint32_t)1) ); + tmp_JSQR_ContextQueueBeingBuilt = ((sConfigInjected->InjectedNbrOfConversion - 1U) ); } - } /* if (hadc->InjectionConfig.ChannelCount == 0) */ + } - /* 2. Continue setting of context under definition with parameter */ /* related to each channel: channel rank sequence */ /* Clear the old JSQx bits for the selected rank */ @@ -1768,7 +1747,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* Set the JSQx bits for the selected rank */ tmp_JSQR_ContextQueueBeingBuilt |= ADC_JSQR_RK(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank); - + /* Decrease channel count */ hadc->InjectionConfig.ChannelCount--; @@ -1779,7 +1758,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* 4. End of context setting: if this is the last channel set, then write context into register JSQR and make it enter into queue */ - if (hadc->InjectionConfig.ChannelCount == 0) + if (hadc->InjectionConfig.ChannelCount == 0U) { MODIFY_REG(hadc->Instance->JSQR, ADC_JSQR_FIELDS, hadc->InjectionConfig.ContextQueue); } @@ -1801,7 +1780,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I ADC_CFGR_INJECT_CONTEXT_QUEUE(sConfigInjected->QueueInjectedContext) | ADC_CFGR_INJECT_DISCCONTINUOUS(sConfigInjected->InjectedDiscontinuousConvMode) ); } - /* If auto-injected mode is enabled: Injected discontinuous setting is */ + /* If auto-injected mode is enabled: Injected discontinuous setting is */ /* discarded. */ else { @@ -1864,11 +1843,14 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* - Right bit shift */ /* Enable OverSampling mode */ - - MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_INJ_FIELDS, - ADC_CFGR2_JOVSE | - sConfigInjected->InjecOversampling.Ratio | - sConfigInjected->InjecOversampling.RightBitShift ); + MODIFY_REG(hadc->Instance->CFGR2, + ADC_CFGR2_JOVSE | + ADC_CFGR2_OVSR | + ADC_CFGR2_OVSS, + ADC_CFGR2_JOVSE | + sConfigInjected->InjecOversampling.Ratio | + sConfigInjected->InjecOversampling.RightBitShift + ); } else { @@ -1876,18 +1858,28 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I CLEAR_BIT( hadc->Instance->CFGR2, ADC_CFGR2_JOVSE); } - /* Sampling time configuration of the selected channel */ - /* if ADC_Channel_10 ... ADC_Channel_18 is selected */ - if (sConfigInjected->InjectedChannel >= ADC_CHANNEL_10) - { - /* Clear the old sample time and set the new one */ - ADC_SMPR2_SETTING(hadc, sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); - } - else /* if ADC_Channel_0 ... ADC_Channel_9 is selected */ - { - /* Clear the old sample time and set the new one */ - ADC_SMPR1_SETTING(hadc, sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); - } +#if defined(ADC_SMPR1_SMPPLUS) + /* Manage specific case of sampling time 3.5 cycles replacing 2.5 cyles */ + if(sConfigInjected->InjectedSamplingTime == ADC_SAMPLETIME_3CYCLES_5) + { + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfigInjected->InjectedChannel, LL_ADC_SAMPLINGTIME_2CYCLES_5); + + /* Set ADC sampling time common configuration */ + LL_ADC_SetSamplingTimeCommonConfig(hadc->Instance, LL_ADC_SAMPLINGTIME_COMMON_3C5_REPL_2C5); + } + else + { + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfigInjected->InjectedChannel, sConfigInjected->InjectedSamplingTime); + + /* Set ADC sampling time common configuration */ + LL_ADC_SetSamplingTimeCommonConfig(hadc->Instance, LL_ADC_SAMPLINGTIME_COMMON_DEFAULT); + } +#else + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfigInjected->InjectedChannel, sConfigInjected->InjectedSamplingTime); +#endif /* Configure the offset: offset enable/disable, channel, offset value */ @@ -1895,75 +1887,35 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* Offset has to be left-aligned on bit 11, the LSB (right bits) are set to 0 */ tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, sConfigInjected->InjectedOffset); - switch (sConfigInjected->InjectedOffsetNumber) + if(sConfigInjected->InjectedOffsetNumber != ADC_OFFSET_NONE) { - case ADC_OFFSET_1: - /* Configure offset register 1: */ - /* - Enable offset */ - /* - Set channel number */ - /* - Set offset value */ - MODIFY_REG(hadc->Instance->OFR1, - ADC_OFR1_OFFSET1 | ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1_EN, - ADC_OFR1_OFFSET1_EN | ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_2: - /* Configure offset register 2: */ - /* - Enable offset */ - /* - Set channel number */ - /* - Set offset value */ - MODIFY_REG(hadc->Instance->OFR2, - ADC_OFR2_OFFSET2 | ADC_OFR2_OFFSET2_CH | ADC_OFR2_OFFSET2_EN, - ADC_OFR2_OFFSET2_EN | ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_3: - /* Configure offset register 3: */ - /* - Enable offset */ - /* - Set channel number */ - /* - Set offset value */ - MODIFY_REG(hadc->Instance->OFR3, - ADC_OFR3_OFFSET3 | ADC_OFR3_OFFSET3_CH | ADC_OFR3_OFFSET3_EN, - ADC_OFR3_OFFSET3_EN | ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel) | tmpOffsetShifted); - break; - - case ADC_OFFSET_4: - /* Configure offset register 1: */ - /* - Enable offset */ - /* - Set channel number */ - /* - Set offset value */ - MODIFY_REG(hadc->Instance->OFR4, - ADC_OFR4_OFFSET4 | ADC_OFR4_OFFSET4_CH | ADC_OFR4_OFFSET4_EN, - ADC_OFR4_OFFSET4_EN | ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel) | tmpOffsetShifted); - break; - - /* Case ADC_OFFSET_NONE */ - default : - /* Scan OFR1, OFR2, OFR3, OFR4 to check if the selected channel is enabled. If this is the case, offset OFRx is disabled. */ - if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel)) + /* Set ADC selected offset number */ + LL_ADC_SetOffset(hadc->Instance, sConfigInjected->InjectedOffsetNumber, sConfigInjected->InjectedChannel, tmpOffsetShifted); + + } + else + { + /* Scan each offset register to check if the selected channel is targeted. */ + /* If this is the case, the corresponding offset number is disabled. */ + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_1)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel)) { - /* Disable offset OFR1*/ - CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_OFFSET1_EN); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_1, LL_ADC_OFFSET_DISABLE); } - if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel)) + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_2)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel)) { - /* Disable offset OFR2*/ - CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_OFFSET2_EN); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_2, LL_ADC_OFFSET_DISABLE); } - if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel)) + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_3)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel)) { - /* Disable offset OFR3*/ - CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_OFFSET3_EN); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_3, LL_ADC_OFFSET_DISABLE); } - if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfigInjected->InjectedChannel)) + if(__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_4)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel)) { - /* Disable offset OFR4*/ - CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_OFFSET4_EN); + LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_4, LL_ADC_OFFSET_DISABLE); } - break; } - } /* if (ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(hadc) == RESET) */ + } /* Parameters update conditioned to ADC state: */ /* Parameters that can be updated only when ADC is disabled: */ @@ -1971,32 +1923,16 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* - Internal measurement channels: Vbat/VrefInt/TempSensor */ if (ADC_IS_ENABLE(hadc) == RESET) { + /* Set mode single-ended or differential input of the selected ADC channel */ + LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfigInjected->InjectedChannel, sConfigInjected->InjectedSingleDiff); + /* Configuration of differential mode */ - if (sConfigInjected->InjectedSingleDiff != ADC_DIFFERENTIAL_ENDED) + if (sConfigInjected->InjectedSingleDiff == ADC_DIFFERENTIAL_ENDED) { - /* Disable differential mode (default mode: single-ended) */ - CLEAR_BIT(hadc->Instance->DIFSEL, ADC_DIFSEL_CHANNEL(sConfigInjected->InjectedChannel)); - } - else - { - /* Enable differential mode */ - SET_BIT(hadc->Instance->DIFSEL, ADC_DIFSEL_CHANNEL(sConfigInjected->InjectedChannel)); - - /* Sampling time configuration of channel ADC_IN+1 (negative input). - Starting from channel 9, SMPR2 register must be configured. */ - if (sConfigInjected->InjectedChannel >= ADC_CHANNEL_9) - { - /* Clear the old sample time and set the new one */ - ADC_SMPR2_SETTING(hadc, sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel+1); - } - else /* For channels 0 to 8 */ - { - /* Clear the old sample time and set the new one */ - ADC_SMPR1_SETTING(hadc, sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel+1); - } + /* Set sampling time of the selected ADC channel */ + LL_ADC_SetChannelSamplingTime(hadc->Instance, __LL_ADC_DECIMAL_NB_TO_CHANNEL(__LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel) + 1), sConfigInjected->InjectedSamplingTime); } - /* Management of internal measurement channels: Vbat/VrefInt/TempSensor */ /* internal measurement paths enable: If internal channel selected, */ /* enable dedicated internal buffers and path. */ @@ -2004,18 +1940,15 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I /* HAL_ADC_DeInit(). */ /* Configuration of common ADC parameters */ - - tmpADC_Common = ADC_COMMON_REGISTER(hadc); - /* If the requested internal measurement path has already been enabled, */ /* bypass the configuration processing. */ - if (( (sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_TSEN)) ) || - ( (sConfigInjected->InjectedChannel == ADC_CHANNEL_VBAT) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_VBATEN)) ) || - ( (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT) && - (HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_VREFEN))) - ) + if (( (sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) && + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0U)) || + ( (sConfigInjected->InjectedChannel == ADC_CHANNEL_VBAT) && + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_VBAT) == 0U)) || + ( (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT) && + ((LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) & LL_ADC_PATH_INTERNAL_VREFINT) == 0U)) + ) { /* Configuration of common ADC parameters (continuation) */ /* Software is allowed to change common parameters only when all ADCs */ @@ -2027,11 +1960,11 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I { if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_TSEN); + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); /* Delay for temperature sensor stabilization time */ /* Compute number of CPU cycles to wait for */ - wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000)); + wait_loop_index = (LL_ADC_DELAY_TEMPSENSOR_STAB_US * (SystemCoreClock / 1000000)); while(wait_loop_index != 0) { wait_loop_index--; @@ -2042,16 +1975,16 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I { if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_VBATEN); + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); } } else if (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT) { if (ADC_VREFINT_INSTANCE(hadc)) { - SET_BIT(tmpADC_Common->CCR, ADC_CCR_VREFEN); - } - } + LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance))); + } + } } /* If the requested internal measurement path has already been enabled */ /* and other ADC of the common group are enabled, internal */ @@ -2065,7 +1998,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I } } - } /* if (ADC_IS_ENABLE(hadc) == RESET) */ + } /* Process unlocked */ __HAL_UNLOCK(hadc); @@ -2074,7 +2007,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I return tmp_hal_status; } -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Enable ADC multimode and configure multimode parameters * @note Possibility to update parameters on the fly: @@ -2087,8 +2020,8 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I * "ADC_MultiModeTypeDef". * @note To move back configuration from multimode to single mode, ADC must * be reset (using function HAL_ADC_Init() ). - * @param hadc: Master ADC handle - * @param multimode : Structure of ADC multimode configuration + * @param hadc Master ADC handle + * @param multimode Structure of ADC multimode configuration * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_MultiModeTypeDef* multimode) @@ -2131,7 +2064,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ && (ADC_IS_CONVERSION_ONGOING_REGULAR(&tmphadcSlave) == RESET) ) { /* Pointer to the common control register */ - tmpADC_Common = ADC_COMMON_REGISTER(hadc); + tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance); /* If multimode is selected, configure all multimode paramaters. */ /* Otherwise, reset multimode parameters (can be used in case of */ @@ -2155,8 +2088,12 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ if ((ADC_IS_ENABLE(hadc) == RESET) && (ADC_IS_ENABLE(&tmphadcSlave) == RESET) ) { - MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY, - multimode->Mode | multimode->TwoSamplingDelay ); + MODIFY_REG(tmpADC_Common->CCR, + ADC_CCR_DUAL | + ADC_CCR_DELAY, + multimode->Mode | + multimode->TwoSamplingDelay + ); } } else /* ADC_MODE_INDEPENDENT */ @@ -2183,14 +2120,13 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ tmp_hal_status = HAL_ERROR; } - /* Process unlocked */ __HAL_UNLOCK(hadc); /* Return function status */ return tmp_hal_status; } -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @brief Enable Injected Queue @@ -2198,7 +2134,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ * Injected Queue. JQDIS can be written only when ADSTART and JDSTART * are both equal to 0 to ensure that no regular nor injected * conversion is ongoing. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_EnableInjectedQueue(ADC_HandleTypeDef* hadc) @@ -2225,7 +2161,7 @@ HAL_StatusTypeDef HAL_ADCEx_EnableInjectedQueue(ADC_HandleTypeDef* hadc) * Injected Queue. JQDIS can be written only when ADSTART and JDSTART * are both equal to 0 to ensure that no regular nor injected * conversion is ongoing. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_DisableInjectedQueue(ADC_HandleTypeDef* hadc) @@ -2248,7 +2184,7 @@ HAL_StatusTypeDef HAL_ADCEx_DisableInjectedQueue(ADC_HandleTypeDef* hadc) * be carried out only when ADC is disabled. * @note To enable again the voltage regulator, the user is expected to * resort to HAL_ADC_Init() API. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef* hadc) @@ -2278,7 +2214,7 @@ HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef* hadc) * resort to HAL_ADC_Init() API as well as to relaunch a calibration * with HAL_ADCEx_Calibration_Start() API or to re-apply a previously * saved calibration factor. - * @param hadc: ADC handle + * @param hadc ADC handle * @retval HAL status */ HAL_StatusTypeDef HAL_ADCEx_EnterADCDeepPowerDownMode(ADC_HandleTypeDef* hadc) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.h index 7dc27f8cdb..042c3b7548 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_adc_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_adc_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of ADC HAL extended module. ****************************************************************************** * @attention @@ -45,7 +43,7 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" - + /** @addtogroup STM32L4xx_HAL_Driver * @{ */ @@ -59,48 +57,16 @@ * @{ */ -/** - * @brief ADC group injected contexts queue configuration - */ -typedef struct -{ - uint32_t ContextQueue; /*!< Injected channel configuration context: build-up over each - HAL_ADCEx_InjectedConfigChannel() call to finally initialize - JSQR register at HAL_ADCEx_InjectedConfigChannel() last call */ - - uint32_t ChannelCount; /*!< Number of channels in the injected sequence */ -}ADC_InjectionConfigTypeDef; - /** - * @brief ADC handle Structure definition - */ -typedef struct -{ - ADC_TypeDef *Instance; /*!< Register base address */ - - ADC_InitTypeDef Init; /*!< ADC initialization parameters and regular conversions setting */ - - DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */ - - HAL_LockTypeDef Lock; /*!< ADC locking object */ - - __IO uint32_t State; /*!< ADC communication state (bit-map of ADC states) */ - - __IO uint32_t ErrorCode; /*!< ADC Error code */ - - ADC_InjectionConfigTypeDef InjectionConfig ; /*!< ADC injected channel configuration build-up structure */ -}ADC_HandleTypeDef; - -/** - * @brief ADC Injected Conversion Oversampling structure definition + * @brief ADC Injected Conversion Oversampling structure definition */ typedef struct { uint32_t Ratio; /*!< Configures the oversampling ratio. - This parameter can be a value of @ref ADCEx_Oversampling_Ratio */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_RATIO */ uint32_t RightBitShift; /*!< Configures the division coefficient for the Oversampler. - This parameter can be a value of @ref ADCEx_Right_Bit_Shift */ + This parameter can be a value of @ref ADC_HAL_EC_OVS_SHIFT */ }ADC_InjOversamplingTypeDef; /** @@ -122,11 +88,11 @@ typedef struct typedef struct { uint32_t InjectedChannel; /*!< Specifies the channel to configure into ADC group injected. - This parameter can be a value of @ref ADC_channels + This parameter can be a value of @ref ADC_HAL_EC_CHANNEL Note: Depending on devices and ADC instances, some channels may not be available on device package pins. Refer to device datasheet for channels availability. */ uint32_t InjectedRank; /*!< Specifies the rank in the ADC group injected sequencer. - This parameter must be a value of @ref ADCEx_injected_rank. + This parameter must be a value of @ref ADC_LL_EC_INJ_SEQ_RANKS. Note: to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions adjusted) */ @@ -134,7 +100,7 @@ typedef struct Unit: ADC clock cycles. Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits, 10.5 cycles at 10 bits, 8.5 cycles at 8 bits, 6.5 cycles at 6 bits). - This parameter can be a value of @ref ADC_sampling_times. + This parameter can be a value of @ref ADC_HAL_EC_CHANNEL_SAMPLINGTIME. Caution: This parameter applies to a channel that can be used in a regular and/or injected group. It overwrites the last setting. Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor), @@ -144,7 +110,7 @@ typedef struct uint32_t InjectedSingleDiff; /*!< Selection of single-ended or differential input. In differential mode: Differential measurement is between the selected channel 'i' (positive input) and channel 'i+1' (negative input). Only channel 'i' has to be configured, channel 'i+1' is configured automatically. - This parameter must be a value of @ref ADCEx_SingleDifferential. + This parameter must be a value of @ref ADC_HAL_EC_CHANNEL_SINGLE_DIFF_ENDING. Caution: This parameter applies to a channel that can be used in a regular and/or injected group. It overwrites the last setting. Note: Refer to Reference Manual to ensure the selected channel is available in differential mode. @@ -154,7 +120,7 @@ typedef struct of another parameter update on the fly) */ uint32_t InjectedOffsetNumber; /*!< Selects the offset number. - This parameter can be a value of @ref ADCEx_OffsetNumber. + This parameter can be a value of @ref ADC_HAL_EC_OFFSET_NB. Caution: Only one offset is allowed per channel. This parameter overwrites the last setting. */ uint32_t InjectedOffset; /*!< Defines the offset to be subtracted from the raw converted data. @@ -186,7 +152,7 @@ typedef struct Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_INJECTED_SOFTWARE_START) Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete. To maintain JAUTO always enabled, DMA must be configured in circular mode. - Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to + Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to configure a channel on injected group can impact the configuration of other channels previously set. */ uint32_t QueueInjectedContext; /*!< Specifies whether the context queue feature is enabled. @@ -203,7 +169,7 @@ typedef struct uint32_t ExternalTrigInjecConv; /*!< Selects the external event used to trigger the conversion start of injected group. If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled and software trigger is used instead. This parameter can be a value of @ref ADC_injected_external_trigger_source. - Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to + Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to configure a channel on injected group can impact the configuration of other channels previously set. */ uint32_t ExternalTrigInjecConvEdge; /*!< Selects the external trigger edge of injected group. @@ -211,18 +177,17 @@ typedef struct If trigger source is set to ADC_INJECTED_SOFTWARE_START, this parameter is discarded. Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to configure a channel on injected group can impact the configuration of other channels previously set. */ - - uint32_t InjecOversamplingMode; /*!< Specifies whether the oversampling feature is enabled or disabled. - This parameter can be set to ENABLE or DISABLE. - Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ - - ADC_InjOversamplingTypeDef InjecOversampling; /*!< Specifies the Oversampling parameters. - Caution: this setting overwrites the previous oversampling configuration if oversampling already enabled. - Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ + + uint32_t InjecOversamplingMode; /*!< Specifies whether the oversampling feature is enabled or disabled. + This parameter can be set to ENABLE or DISABLE. + Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ + + ADC_InjOversamplingTypeDef InjecOversampling; /*!< Specifies the Oversampling parameters. + Caution: this setting overwrites the previous oversampling configuration if oversampling already enabled. + Note: This parameter can be modified only if there is no conversion is ongoing (both ADSTART and JADSTART cleared). */ }ADC_InjectionConfTypeDef; - -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Structure definition of ADC multimode * @note The setting of these parameters by function HAL_ADCEx_MultiModeConfigChannel() is conditioned by ADCs state (both Master and Slave ADCs). @@ -231,19 +196,19 @@ typedef struct typedef struct { uint32_t Mode; /*!< Configures the ADC to operate in independent or multimode. - This parameter can be a value of @ref ADCEx_Common_mode. */ + This parameter can be a value of @ref ADC_HAL_EC_MULTI_MODE. */ uint32_t DMAAccessMode; /*!< Configures the DMA mode for multimode ADC: selection whether 2 DMA channels (each ADC uses its own DMA channel) or 1 DMA channel (one DMA channel for both ADC, DMA of ADC master) - This parameter can be a value of @ref ADCEx_Direct_memory_access_mode_for_multimode. */ + This parameter can be a value of @ref ADC_HAL_EC_MULTI_DMA_TRANSFER_RESOLUTION. */ uint32_t TwoSamplingDelay; /*!< Configures the Delay between 2 sampling phases. - This parameter can be a value of @ref ADCEx_delay_between_2_sampling_phases. + This parameter can be a value of @ref ADC_HAL_EC_MULTI_TWOSMP_DELAY. Delay range depends on selected resolution: from 1 to 12 clock cycles for 12 bits, from 1 to 10 clock cycles for 10 bits, from 1 to 8 clock cycles for 8 bits, from 1 to 6 clock cycles for 6 bits. */ }ADC_MultiModeTypeDef; -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @} @@ -251,7 +216,7 @@ typedef struct /* Exported constants --------------------------------------------------------*/ - /** @defgroup ADCEx_Exported_Constants ADC Extended Exported Constants +/** @defgroup ADCEx_Exported_Constants ADC Extended Exported Constants * @{ */ @@ -259,23 +224,23 @@ typedef struct * @{ */ /* ADC group regular trigger sources for all ADC instances */ -#define ADC_EXTERNALTRIGINJEC_T1_TRGO ((uint32_t)0x00000000) /*!< Event 0 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T1_CC4 ((uint32_t)ADC_JSQR_JEXTSEL_0) /*!< Event 1 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T2_TRGO ((uint32_t)ADC_JSQR_JEXTSEL_1) /*!< Event 2 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T2_CC1 ((uint32_t)(ADC_JSQR_JEXTSEL_1 | ADC_JSQR_JEXTSEL_0)) /*!< Event 3 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T3_CC4 ((uint32_t)ADC_JSQR_JEXTSEL_2) /*!< Event 4 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T4_TRGO ((uint32_t)(ADC_JSQR_JEXTSEL_2 | ADC_JSQR_JEXTSEL_0)) /*!< Event 5 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_EXT_IT15 ((uint32_t)(ADC_JSQR_JEXTSEL_2 | ADC_JSQR_JEXTSEL_1)) /*!< Event 6 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T8_CC4 ((uint32_t)(ADC_JSQR_JEXTSEL_2 | ADC_JSQR_JEXTSEL_1 | ADC_JSQR_JEXTSEL_0)) /*!< Event 7 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T1_TRGO2 ((uint32_t)ADC_JSQR_JEXTSEL_3) /*!< Event 8 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T8_TRGO ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_0)) /*!< Event 9 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T8_TRGO2 ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_1)) /*!< Event 10 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T3_CC3 ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_1 | ADC_JSQR_JEXTSEL_0)) /*!< Event 11 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T3_TRGO ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_2)) /*!< Event 12 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T3_CC1 ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_2 | ADC_JSQR_JEXTSEL_0)) /*!< Event 13 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T6_TRGO ((uint32_t)(ADC_JSQR_JEXTSEL_3 | ADC_JSQR_JEXTSEL_2 | ADC_JSQR_JEXTSEL_1)) /*!< Event 14 triggers injected group conversion start */ -#define ADC_EXTERNALTRIGINJEC_T15_TRGO ((uint32_t)ADC_JSQR_JEXTSEL) /*!< Event 15 triggers injected group conversion start */ -#define ADC_INJECTED_SOFTWARE_START ((uint32_t)0x00000001) /*!< Software triggers injected group conversion start */ +#define ADC_INJECTED_SOFTWARE_START (LL_ADC_INJ_TRIG_SOFTWARE) /*!< Software triggers injected group conversion start */ +#define ADC_EXTERNALTRIGINJEC_T1_TRGO (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM1 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T1_TRGO2 (LL_ADC_INJ_TRIG_EXT_TIM1_TRGO2) /*!< ADC group injected conversion trigger from external IP: TIM1 TRGO2. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T1_CC4 (LL_ADC_INJ_TRIG_EXT_TIM1_CH4) /*!< ADC group injected conversion trigger from external IP: TIM1 channel 4 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T2_TRGO (LL_ADC_INJ_TRIG_EXT_TIM2_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM2 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T2_CC1 (LL_ADC_INJ_TRIG_EXT_TIM2_CH1) /*!< ADC group injected conversion trigger from external IP: TIM2 channel 1 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T3_TRGO (LL_ADC_INJ_TRIG_EXT_TIM3_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM3 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T3_CC1 (LL_ADC_INJ_TRIG_EXT_TIM3_CH1) /*!< ADC group injected conversion trigger from external IP: TIM3 channel 1 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T3_CC3 (LL_ADC_INJ_TRIG_EXT_TIM3_CH3) /*!< ADC group injected conversion trigger from external IP: TIM3 channel 3 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T3_CC4 (LL_ADC_INJ_TRIG_EXT_TIM3_CH4) /*!< ADC group injected conversion trigger from external IP: TIM3 channel 4 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T4_TRGO (LL_ADC_INJ_TRIG_EXT_TIM4_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM4 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T6_TRGO (LL_ADC_INJ_TRIG_EXT_TIM6_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM6 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T8_CC4 (LL_ADC_INJ_TRIG_EXT_TIM8_CH4) /*!< ADC group injected conversion trigger from external IP: TIM8 channel 4 event (capture compare: input capture or output capture). Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T8_TRGO (LL_ADC_INJ_TRIG_EXT_TIM8_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM8 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T8_TRGO2 (LL_ADC_INJ_TRIG_EXT_TIM8_TRGO2) /*!< ADC group injected conversion trigger from external IP: TIM8 TRGO2. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_T15_TRGO (LL_ADC_INJ_TRIG_EXT_TIM15_TRGO) /*!< ADC group injected conversion trigger from external IP: TIM15 TRGO. Trigger edge set to rising edge (default setting). */ +#define ADC_EXTERNALTRIGINJEC_EXT_IT15 (LL_ADC_INJ_TRIG_EXT_EXTI_LINE15) /*!< ADC group injected conversion trigger from external IP: external interrupt line 15. Trigger edge set to rising edge (default setting). */ /** * @} */ @@ -283,288 +248,107 @@ typedef struct /** @defgroup ADC_injected_external_trigger_edge ADC group injected trigger edge (when external trigger is selected) * @{ */ -#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE ((uint32_t)0x00000000) /*!< Injected conversions hardware trigger detection disabled */ -#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING ((uint32_t)ADC_JSQR_JEXTEN_0) /*!< Injected conversions hardware trigger detection on the rising edge */ -#define ADC_EXTERNALTRIGINJECCONV_EDGE_FALLING ((uint32_t)ADC_JSQR_JEXTEN_1) /*!< Injected conversions hardware trigger detection on the falling edge */ -#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISINGFALLING ((uint32_t)ADC_JSQR_JEXTEN) /*!< Injected conversions hardware trigger detection on both the rising and falling edges */ +#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE (0x00000000U) /*!< Injected conversions hardware trigger detection disabled */ +#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING (ADC_JSQR_JEXTEN_0) /*!< Injected conversions hardware trigger detection on the rising edge */ +#define ADC_EXTERNALTRIGINJECCONV_EDGE_FALLING (ADC_JSQR_JEXTEN_1) /*!< Injected conversions hardware trigger detection on the falling edge */ +#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISINGFALLING (ADC_JSQR_JEXTEN) /*!< Injected conversions hardware trigger detection on both the rising and falling edges */ /** * @} */ -/** @defgroup ADCEx_SingleDifferential ADC Extended Single-ended/Differential input mode +/** @defgroup ADC_HAL_EC_CHANNEL_SINGLE_DIFF_ENDING Channel - Single or differential ending * @{ */ -#define ADC_SINGLE_ENDED ((uint32_t)0x00000000) /*!< ADC channel set in single-ended input mode */ -#define ADC_DIFFERENTIAL_ENDED ((uint32_t)ADC_CR_ADCALDIF) /*!< ADC channel set in differential mode */ +#define ADC_SINGLE_ENDED (LL_ADC_SINGLE_ENDED) /*!< ADC channel ending set to single ended (literal also used to set calibration mode) */ +#define ADC_DIFFERENTIAL_ENDED (LL_ADC_DIFFERENTIAL_ENDED) /*!< ADC channel ending set to differential (literal also used to set calibration mode) */ /** * @} */ -/** @defgroup ADCEx_OffsetNumber ADC Extended Offset Number +/** @defgroup ADC_HAL_EC_OFFSET_NB ADC instance - Offset number * @{ */ -#define ADC_OFFSET_NONE ((uint32_t)0x00) /*!< No offset correction */ -#define ADC_OFFSET_1 ((uint32_t)0x01) /*!< Offset correction to apply to a first channel */ -#define ADC_OFFSET_2 ((uint32_t)0x02) /*!< Offset correction to apply to a second channel */ -#define ADC_OFFSET_3 ((uint32_t)0x03) /*!< Offset correction to apply to a third channel */ -#define ADC_OFFSET_4 ((uint32_t)0x04) /*!< Offset correction to apply to a fourth channel */ +#define ADC_OFFSET_NONE (ADC_OFFSET_4 + 1U) /*!< ADC offset disabled: no offset correction for the selected ADC channel */ +#define ADC_OFFSET_1 (LL_ADC_OFFSET_1) /*!< ADC offset number 1: ADC channel and offset level to which the offset programmed will be applied (independently of channel mapped on ADC group regular or group injected) */ +#define ADC_OFFSET_2 (LL_ADC_OFFSET_2) /*!< ADC offset number 2: ADC channel and offset level to which the offset programmed will be applied (independently of channel mapped on ADC group regular or group injected) */ +#define ADC_OFFSET_3 (LL_ADC_OFFSET_3) /*!< ADC offset number 3: ADC channel and offset level to which the offset programmed will be applied (independently of channel mapped on ADC group regular or group injected) */ +#define ADC_OFFSET_4 (LL_ADC_OFFSET_4) /*!< ADC offset number 4: ADC channel and offset level to which the offset programmed will be applied (independently of channel mapped on ADC group regular or group injected) */ /** * @} */ -/** @defgroup ADCEx_injected_rank ADC Extended Injected Channel Rank +/** @defgroup ADC_LL_EC_INJ_SEQ_RANKS ADC group injected - Sequencer ranks * @{ */ -#define ADC_INJECTED_RANK_1 ((uint32_t)0x00000001) /*!< ADC injected conversion rank 1 */ -#define ADC_INJECTED_RANK_2 ((uint32_t)0x00000002) /*!< ADC injected conversion rank 2 */ -#define ADC_INJECTED_RANK_3 ((uint32_t)0x00000003) /*!< ADC injected conversion rank 3 */ -#define ADC_INJECTED_RANK_4 ((uint32_t)0x00000004) /*!< ADC injected conversion rank 4 */ +#define ADC_INJECTED_RANK_1 (LL_ADC_INJ_RANK_1) /*!< ADC group injected sequencer rank 1 */ +#define ADC_INJECTED_RANK_2 (LL_ADC_INJ_RANK_2) /*!< ADC group injected sequencer rank 2 */ +#define ADC_INJECTED_RANK_3 (LL_ADC_INJ_RANK_3) /*!< ADC group injected sequencer rank 3 */ +#define ADC_INJECTED_RANK_4 (LL_ADC_INJ_RANK_4) /*!< ADC group injected sequencer rank 4 */ /** * @} */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -/** @defgroup ADCEx_Common_mode ADC Extended multimode dual mode +#if defined(ADC_MULTIMODE_SUPPORT) +/** @defgroup ADC_HAL_EC_MULTI_MODE Multimode - Mode * @{ */ -#define ADC_MODE_INDEPENDENT ((uint32_t)(0x00000000)) /*!< Independent ADC conversions mode */ -#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)(ADC_CCR_DUAL_0)) /*!< Combined regular simultaneous + injected simultaneous mode */ -#define ADC_DUALMODE_REGSIMULT_ALTERTRIG ((uint32_t)(ADC_CCR_DUAL_1)) /*!< Combined regular simultaneous + alternate trigger mode */ -#define ADC_DUALMODE_REGINTERL_INJECSIMULT ((uint32_t)(ADC_CCR_DUAL_1 | ADC_CCR_DUAL_0)) /*!< Combined Interleaved mode + injected simultaneous mode */ -#define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CCR_DUAL_2 | ADC_CCR_DUAL_0)) /*!< Injected simultaneous mode only */ -#define ADC_DUALMODE_REGSIMULT ((uint32_t)(ADC_CCR_DUAL_2 | ADC_CCR_DUAL_1)) /*!< Regular simultaneous mode only */ -#define ADC_DUALMODE_INTERL ((uint32_t)(ADC_CCR_DUAL_2 | ADC_CCR_DUAL_1 | ADC_CCR_DUAL_0)) /*!< Interleaved mode only */ -#define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CCR_DUAL_3 | ADC_CCR_DUAL_0)) /*!< Alternate trigger mode only */ -/** - * @} - */ +#define ADC_MODE_INDEPENDENT (LL_ADC_MULTI_INDEPENDENT) /*!< ADC dual mode disabled (ADC independent mode) */ +#define ADC_DUALMODE_REGSIMULT (LL_ADC_MULTI_DUAL_REG_SIMULT) /*!< ADC dual mode enabled: group regular simultaneous */ +#define ADC_DUALMODE_INTERL (LL_ADC_MULTI_DUAL_REG_INTERL) /*!< ADC dual mode enabled: Combined group regular interleaved */ +#define ADC_DUALMODE_INJECSIMULT (LL_ADC_MULTI_DUAL_INJ_SIMULT) /*!< ADC dual mode enabled: group injected simultaneous */ +#define ADC_DUALMODE_ALTERTRIG (LL_ADC_MULTI_DUAL_INJ_ALTERN) /*!< ADC dual mode enabled: group injected alternate trigger. Works only with external triggers (not internal SW start) */ +#define ADC_DUALMODE_REGSIMULT_INJECSIMULT (LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM) /*!< ADC dual mode enabled: Combined group regular simultaneous + group injected simultaneous */ +#define ADC_DUALMODE_REGSIMULT_ALTERTRIG (LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT) /*!< ADC dual mode enabled: Combined group regular simultaneous + group injected alternate trigger */ +#define ADC_DUALMODE_REGINTERL_INJECSIMULT (LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM) /*!< ADC dual mode enabled: Combined group regular interleaved + group injected simultaneous */ -/** @defgroup ADCEx_Direct_memory_access_mode_for_multimode ADC Extended DMA mode for multimode +/** @defgroup ADC_HAL_EC_MULTI_DMA_TRANSFER_RESOLUTION Multimode - DMA transfer mode depending on ADC resolution * @{ */ -#define ADC_DMAACCESSMODE_DISABLED ((uint32_t)0x00000000) /*!< DMA multimode disabled: each ADC uses its own DMA channel */ -#define ADC_DMAACCESSMODE_12_10_BITS ((uint32_t)ADC_CCR_MDMA_1) /*!< DMA multimode enabled (one DMA channel for both ADC, DMA of ADC master) for 12 and 10 bits resolution */ -#define ADC_DMAACCESSMODE_8_6_BITS ((uint32_t)ADC_CCR_MDMA) /*!< DMA multimode enabled (one DMA channel for both ADC, DMA of ADC master) for 8 and 6 bits resolution */ +#define ADC_DMAACCESSMODE_DISABLED (0x00000000U) /*!< DMA multimode disabled: each ADC uses its own DMA channel */ +#define ADC_DMAACCESSMODE_12_10_BITS (ADC_CCR_MDMA_1) /*!< DMA multimode enabled (one DMA channel for both ADC, DMA of ADC master) for 12 and 10 bits resolution */ +#define ADC_DMAACCESSMODE_8_6_BITS (ADC_CCR_MDMA) /*!< DMA multimode enabled (one DMA channel for both ADC, DMA of ADC master) for 8 and 6 bits resolution */ /** * @} */ -/** @defgroup ADCEx_delay_between_2_sampling_phases ADC Extended delay between 2 sampling phases +/** @defgroup ADC_HAL_EC_MULTI_TWOSMP_DELAY Multimode - Delay between two sampling phases * @{ */ -#define ADC_TWOSAMPLINGDELAY_1CYCLE ((uint32_t)(0x00000000)) /*!< 1 ADC clock cycle delay */ -#define ADC_TWOSAMPLINGDELAY_2CYCLES ((uint32_t)(ADC_CCR_DELAY_0)) /*!< 2 ADC clock cycles delay */ -#define ADC_TWOSAMPLINGDELAY_3CYCLES ((uint32_t)(ADC_CCR_DELAY_1)) /*!< 3 ADC clock cycles delay */ -#define ADC_TWOSAMPLINGDELAY_4CYCLES ((uint32_t)(ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) /*!< 4 ADC clock cycles delay */ -#define ADC_TWOSAMPLINGDELAY_5CYCLES ((uint32_t)(ADC_CCR_DELAY_2)) /*!< 5 ADC clock cycles delay */ -#define ADC_TWOSAMPLINGDELAY_6CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_0)) /*!< 6 ADC clock cycles delay */ -#define ADC_TWOSAMPLINGDELAY_7CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1)) /*!< 7 ADC clock cycles delay (lower for non 12-bit resolution) */ -#define ADC_TWOSAMPLINGDELAY_8CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) /*!< 8 ADC clock cycles delay (lower for non 12-bit resolution) */ -#define ADC_TWOSAMPLINGDELAY_9CYCLES ((uint32_t)(ADC_CCR_DELAY_3)) /*!< 9 ADC clock cycles delay (lower for non 12-bit resolution) */ -#define ADC_TWOSAMPLINGDELAY_10CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_0)) /*!< 10 ADC clock cycles delay (lower for non 12-bit resolution) */ -#define ADC_TWOSAMPLINGDELAY_11CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1)) /*!< 11 ADC clock cycles delay (lower for non 12-bit resolution) */ -#define ADC_TWOSAMPLINGDELAY_12CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) /*!< 12 ADC clock cycles delay (lower for non 12-bit resolution) */ +#define ADC_TWOSAMPLINGDELAY_1CYCLE (LL_ADC_MULTI_TWOSMP_DELAY_1CYCLE) /*!< ADC multimode delay between two sampling phases: 1 ADC clock cycle */ +#define ADC_TWOSAMPLINGDELAY_2CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_2CYCLES) /*!< ADC multimode delay between two sampling phases: 2 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_3CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_3CYCLES) /*!< ADC multimode delay between two sampling phases: 3 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_4CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_4CYCLES) /*!< ADC multimode delay between two sampling phases: 4 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_5CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_5CYCLES) /*!< ADC multimode delay between two sampling phases: 5 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_6CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_6CYCLES) /*!< ADC multimode delay between two sampling phases: 6 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_7CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_7CYCLES) /*!< ADC multimode delay between two sampling phases: 7 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_8CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_8CYCLES) /*!< ADC multimode delay between two sampling phases: 8 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_9CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_9CYCLES) /*!< ADC multimode delay between two sampling phases: 9 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_10CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_10CYCLES) /*!< ADC multimode delay between two sampling phases: 10 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_11CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_11CYCLES) /*!< ADC multimode delay between two sampling phases: 11 ADC clock cycles */ +#define ADC_TWOSAMPLINGDELAY_12CYCLES (LL_ADC_MULTI_TWOSMP_DELAY_12CYCLES) /*!< ADC multimode delay between two sampling phases: 12 ADC clock cycles */ /** * @} */ -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -/** @defgroup ADCEx_Common_mode ADC Extended Independent ADC Mode + +/** + * @} + */ +#endif /* ADC_MULTIMODE_SUPPORT */ + +/** @defgroup ADC_HAL_EC_GROUPS ADC instance - Groups * @{ */ -#define ADC_MODE_INDEPENDENT ((uint32_t)(0x00000000)) /*!< Independent ADC conversions mode */ +#define ADC_REGULAR_GROUP (LL_ADC_GROUP_REGULAR) /*!< ADC group regular (available on all STM32 devices) */ +#define ADC_INJECTED_GROUP (LL_ADC_GROUP_INJECTED) /*!< ADC group injected (not available on all STM32 devices)*/ +#define ADC_REGULAR_INJECTED_GROUP (LL_ADC_GROUP_REGULAR_INJECTED) /*!< ADC both groups regular and injected */ /** * @} */ -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ - -/** @defgroup ADCEx_analog_watchdog_number ADC Extended Analog Watchdog Selection - * @{ - */ -#define ADC_ANALOGWATCHDOG_1 ((uint32_t)0x00000001) /*!< Analog watchdog 1 selection */ -#define ADC_ANALOGWATCHDOG_2 ((uint32_t)0x00000002) /*!< Analog watchdog 2 selection */ -#define ADC_ANALOGWATCHDOG_3 ((uint32_t)0x00000003) /*!< Analog watchdog 3 selection */ -/** - * @} - */ - -/** @defgroup ADCEx_analog_watchdog_mode ADC Extended Analog Watchdog Mode - * @{ - */ -#define ADC_ANALOGWATCHDOG_NONE ((uint32_t) 0x00000000) /*!< No analog watchdog selected */ -#define ADC_ANALOGWATCHDOG_SINGLE_REG ((uint32_t)(ADC_CFGR_AWD1SGL | ADC_CFGR_AWD1EN)) /*!< Analog watchdog applied to a regular group single channel */ -#define ADC_ANALOGWATCHDOG_SINGLE_INJEC ((uint32_t)(ADC_CFGR_AWD1SGL | ADC_CFGR_JAWD1EN)) /*!< Analog watchdog applied to an injected group single channel */ -#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC ((uint32_t)(ADC_CFGR_AWD1SGL | ADC_CFGR_AWD1EN | ADC_CFGR_JAWD1EN)) /*!< Analog watchdog applied to a regular and injected groups single channel */ -#define ADC_ANALOGWATCHDOG_ALL_REG ((uint32_t) ADC_CFGR_AWD1EN) /*!< Analog watchdog applied to regular group all channels */ -#define ADC_ANALOGWATCHDOG_ALL_INJEC ((uint32_t) ADC_CFGR_JAWD1EN) /*!< Analog watchdog applied to injected group all channels */ -#define ADC_ANALOGWATCHDOG_ALL_REGINJEC ((uint32_t)(ADC_CFGR_AWD1EN | ADC_CFGR_JAWD1EN)) /*!< Analog watchdog applied to regular and injected groups all channels */ -/** - * @} - */ - -/** @defgroup ADCEx_conversion_group ADC Extended Conversion Group - * @{ - */ -#define ADC_REGULAR_GROUP ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_EOS)) /*!< ADC regular group selection */ -#define ADC_INJECTED_GROUP ((uint32_t)(ADC_FLAG_JEOC | ADC_FLAG_JEOS)) /*!< ADC injected group selection */ -#define ADC_REGULAR_INJECTED_GROUP ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_JEOC | ADC_FLAG_JEOS)) /*!< ADC regular and injected groups selection */ -/** - * @} - */ - -/** @defgroup ADCEx_Event_type ADC Extended Event Type - * @{ - */ -#define ADC_EOSMP_EVENT ((uint32_t)ADC_FLAG_EOSMP) /*!< ADC End of Sampling event */ -#define ADC_AWD1_EVENT ((uint32_t)ADC_FLAG_AWD1) /*!< ADC Analog watchdog 1 event (main analog watchdog, present on all STM32 series) */ -#define ADC_AWD2_EVENT ((uint32_t)ADC_FLAG_AWD2) /*!< ADC Analog watchdog 2 event (additional analog watchdog, not present on all STM32 series) */ -#define ADC_AWD3_EVENT ((uint32_t)ADC_FLAG_AWD3) /*!< ADC Analog watchdog 3 event (additional analog watchdog, not present on all STM32 series) */ -#define ADC_OVR_EVENT ((uint32_t)ADC_FLAG_OVR) /*!< ADC overrun event */ -#define ADC_JQOVF_EVENT ((uint32_t)ADC_FLAG_JQOVF) /*!< ADC Injected Context Queue Overflow event */ -/** - * @} - */ -#define ADC_AWD_EVENT ADC_AWD1_EVENT /*!< ADC Analog watchdog 1 event: Naming for compatibility with other STM32 devices having only one analog watchdog */ - -/** @defgroup ADCEx_interrupts_definition ADC Extended Interrupts Definition - * @{ - */ -#define ADC_IT_RDY ADC_IER_ADRDY /*!< ADC Ready (ADRDY) interrupt source */ -#define ADC_IT_EOSMP ADC_IER_EOSMP /*!< ADC End of sampling interrupt source */ -#define ADC_IT_EOC ADC_IER_EOC /*!< ADC End of regular conversion interrupt source */ -#define ADC_IT_EOS ADC_IER_EOS /*!< ADC End of regular sequence of conversions interrupt source */ -#define ADC_IT_OVR ADC_IER_OVR /*!< ADC overrun interrupt source */ -#define ADC_IT_JEOC ADC_IER_JEOC /*!< ADC End of injected conversion interrupt source */ -#define ADC_IT_JEOS ADC_IER_JEOS /*!< ADC End of injected sequence of conversions interrupt source */ -#define ADC_IT_AWD1 ADC_IER_AWD1 /*!< ADC Analog watchdog 1 interrupt source (main analog watchdog) */ -#define ADC_IT_AWD2 ADC_IER_AWD2 /*!< ADC Analog watchdog 2 interrupt source (additional analog watchdog) */ -#define ADC_IT_AWD3 ADC_IER_AWD3 /*!< ADC Analog watchdog 3 interrupt source (additional analog watchdog) */ -#define ADC_IT_JQOVF ADC_IER_JQOVF /*!< ADC Injected Context Queue Overflow interrupt source */ - -#define ADC_IT_AWD ADC_IT_AWD1 /*!< ADC Analog watchdog 1 interrupt source: naming for compatibility with other STM32 devices having only one analog watchdog */ - -/** - * @} - */ - -/** @defgroup ADCEx_flags_definition ADC Extended Flags Definition - * @{ - */ -#define ADC_FLAG_RDY ADC_ISR_ADRDY /*!< ADC Ready (ADRDY) flag */ -#define ADC_FLAG_EOSMP ADC_ISR_EOSMP /*!< ADC End of Sampling flag */ -#define ADC_FLAG_EOC ADC_ISR_EOC /*!< ADC End of Regular Conversion flag */ -#define ADC_FLAG_EOS ADC_ISR_EOS /*!< ADC End of Regular sequence of Conversions flag */ -#define ADC_FLAG_OVR ADC_ISR_OVR /*!< ADC overrun flag */ -#define ADC_FLAG_JEOC ADC_ISR_JEOC /*!< ADC End of Injected Conversion flag */ -#define ADC_FLAG_JEOS ADC_ISR_JEOS /*!< ADC End of Injected sequence of Conversions flag */ -#define ADC_FLAG_AWD1 ADC_ISR_AWD1 /*!< ADC Analog watchdog 1 flag (main analog watchdog) */ -#define ADC_FLAG_AWD2 ADC_ISR_AWD2 /*!< ADC Analog watchdog 2 flag (additional analog watchdog) */ -#define ADC_FLAG_AWD3 ADC_ISR_AWD3 /*!< ADC Analog watchdog 3 flag (additional analog watchdog) */ -#define ADC_FLAG_JQOVF ADC_ISR_JQOVF /*!< ADC Injected Context Queue Overflow flag */ - -#define ADC_FLAG_AWD ADC_FLAG_AWD1 /*!< ADC Analog watchdog 1 flag: Naming for compatibility with other STM32 devices having only one analog watchdog */ - -#define ADC_FLAG_ALL (ADC_FLAG_RDY | ADC_FLAG_EOSMP | ADC_FLAG_EOC | ADC_FLAG_EOS | \ - ADC_FLAG_JEOC | ADC_FLAG_JEOS | ADC_FLAG_OVR | ADC_FLAG_AWD1 | \ - ADC_FLAG_AWD2 | ADC_FLAG_AWD3 | ADC_FLAG_JQOVF) /*!< ADC all flags */ - -/* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx, JQOVF */ -#define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_JEOC | ADC_FLAG_JEOS | \ - ADC_FLAG_OVR | ADC_FLAG_AWD1 | ADC_FLAG_AWD2 | ADC_FLAG_AWD3 | \ - ADC_FLAG_JQOVF) /*!< ADC post-conversion all flags */ - -/** - * @} - */ - - -/** @defgroup ADCEx_injected_rank ADC Extended Injected Channel Rank - * @{ - */ -#define ADC_INJECTED_RANK_1 ((uint32_t)0x00000001) /*!< ADC injected conversion rank 1 */ -#define ADC_INJECTED_RANK_2 ((uint32_t)0x00000002) /*!< ADC injected conversion rank 2 */ -#define ADC_INJECTED_RANK_3 ((uint32_t)0x00000003) /*!< ADC injected conversion rank 3 */ -#define ADC_INJECTED_RANK_4 ((uint32_t)0x00000004) /*!< ADC injected conversion rank 4 */ -/** - * @} - */ - - - -/** @defgroup ADCEx_Oversampling_Ratio ADC Extended Oversampling Ratio - * @{ - */ - -#define ADC_OVERSAMPLING_RATIO_2 ((uint32_t)0x00000000) /*!< ADC Oversampling ratio 2x */ -#define ADC_OVERSAMPLING_RATIO_4 ((uint32_t)ADC_CFGR2_OVSR_0) /*!< ADC Oversampling ratio 4x */ -#define ADC_OVERSAMPLING_RATIO_8 ((uint32_t)ADC_CFGR2_OVSR_1) /*!< ADC Oversampling ratio 8x */ -#define ADC_OVERSAMPLING_RATIO_16 ((uint32_t)(ADC_CFGR2_OVSR_1 | ADC_CFGR2_OVSR_0)) /*!< ADC Oversampling ratio 16x */ -#define ADC_OVERSAMPLING_RATIO_32 ((uint32_t)ADC_CFGR2_OVSR_2) /*!< ADC Oversampling ratio 32x */ -#define ADC_OVERSAMPLING_RATIO_64 ((uint32_t)(ADC_CFGR2_OVSR_2 | ADC_CFGR2_OVSR_0)) /*!< ADC Oversampling ratio 64x */ -#define ADC_OVERSAMPLING_RATIO_128 ((uint32_t)(ADC_CFGR2_OVSR_2 | ADC_CFGR2_OVSR_1)) /*!< ADC Oversampling ratio 128x */ -#define ADC_OVERSAMPLING_RATIO_256 ((uint32_t)(ADC_CFGR2_OVSR)) /*!< ADC Oversampling ratio 256x */ -/** - * @} - */ - -/** @defgroup ADCEx_Right_Bit_Shift ADC Extended Oversampling Right Shift - * @{ - */ -#define ADC_RIGHTBITSHIFT_NONE ((uint32_t)0x00000000) /*!< ADC No bit shift for oversampling */ -#define ADC_RIGHTBITSHIFT_1 ((uint32_t)ADC_CFGR2_OVSS_0) /*!< ADC 1 bit shift for oversampling */ -#define ADC_RIGHTBITSHIFT_2 ((uint32_t)ADC_CFGR2_OVSS_1) /*!< ADC 2 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_3 ((uint32_t)(ADC_CFGR2_OVSS_1 | ADC_CFGR2_OVSS_0)) /*!< ADC 3 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_4 ((uint32_t)ADC_CFGR2_OVSS_2) /*!< ADC 4 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_5 ((uint32_t)(ADC_CFGR2_OVSS_2 | ADC_CFGR2_OVSS_0)) /*!< ADC 5 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_6 ((uint32_t)(ADC_CFGR2_OVSS_2 | ADC_CFGR2_OVSS_1)) /*!< ADC 6 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_7 ((uint32_t)(ADC_CFGR2_OVSS_2 | ADC_CFGR2_OVSS_1 | ADC_CFGR2_OVSS_0)) /*!< ADC 7 bits shift for oversampling */ -#define ADC_RIGHTBITSHIFT_8 ((uint32_t)ADC_CFGR2_OVSS_3) /*!< ADC 8 bits shift for oversampling */ -/** - * @} - */ - -/** @defgroup ADCEx_Triggered_Oversampling_Mode ADC Extended Triggered Regular Oversampling - * @{ - */ -#define ADC_TRIGGEREDMODE_SINGLE_TRIGGER ((uint32_t)0x00000000) /*!< A single trigger for all channel oversampled conversions */ -#define ADC_TRIGGEREDMODE_MULTI_TRIGGER ((uint32_t)ADC_CFGR2_TROVS) /*!< A trigger for each oversampled conversion */ -/** - * @} - */ - -/** @defgroup ADCEx_Regular_Oversampling_Mode ADC Extended Regular Oversampling Continued or Resumed Mode - * @{ - */ -#define ADC_REGOVERSAMPLING_CONTINUED_MODE ((uint32_t)0x00000000) /*!< Oversampling buffer maintained during injection sequence */ -#define ADC_REGOVERSAMPLING_RESUMED_MODE ((uint32_t)ADC_CFGR2_ROVSM) /*!< Oversampling buffer zeroed during injection sequence */ -/** - * @} - */ - -/** @defgroup ADC_sampling_times ADC Sampling Times - * @{ - */ -#define ADC_SAMPLETIME_2CYCLES_5 ((uint32_t)0x00000000) /*!< Sampling time 2.5 ADC clock cycle */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_SAMPLETIME_3CYCLES_5 ((uint32_t)ADC_SMPR1_SMPPLUS) /*!< Sampling time 3.5 ADC clock cycles. If selected, this sampling time - replaces all sampling time 2.5 ADC clock cycles. These 2 sampling - times cannot be used simultaneously. */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ -#define ADC_SAMPLETIME_6CYCLES_5 ((uint32_t)ADC_SMPR2_SMP10_0) /*!< Sampling time 6.5 ADC clock cycles */ -#define ADC_SAMPLETIME_12CYCLES_5 ((uint32_t)ADC_SMPR2_SMP10_1) /*!< Sampling time 12.5 ADC clock cycles */ -#define ADC_SAMPLETIME_24CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP10_1 | ADC_SMPR2_SMP10_0)) /*!< Sampling time 24.5 ADC clock cycles */ -#define ADC_SAMPLETIME_47CYCLES_5 ((uint32_t)ADC_SMPR2_SMP10_2) /*!< Sampling time 47.5 ADC clock cycles */ -#define ADC_SAMPLETIME_92CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP10_2 | ADC_SMPR2_SMP10_0)) /*!< Sampling time 92.5 ADC clock cycles */ -#define ADC_SAMPLETIME_247CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP10_2 | ADC_SMPR2_SMP10_1)) /*!< Sampling time 247.5 ADC clock cycles */ -#define ADC_SAMPLETIME_640CYCLES_5 ((uint32_t)ADC_SMPR2_SMP10) /*!< Sampling time 640.5 ADC clock cycles */ -/** - * @} - */ - /** @defgroup ADC_CFGR_fields ADCx CFGR fields * @{ */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) #define ADC_CFGR_FIELDS (ADC_CFGR_AWD1CH | ADC_CFGR_JAUTO | ADC_CFGR_JAWD1EN |\ ADC_CFGR_AWD1EN | ADC_CFGR_AWD1SGL | ADC_CFGR_JQM |\ ADC_CFGR_JDISCEN | ADC_CFGR_DISCNUM | ADC_CFGR_DISCEN |\ @@ -578,15 +362,15 @@ typedef struct ADC_CFGR_AUTDLY | ADC_CFGR_CONT | ADC_CFGR_OVRMOD |\ ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL | ADC_CFGR_ALIGN |\ ADC_CFGR_RES | ADC_CFGR_DMACFG | ADC_CFGR_DMAEN ) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ +#endif /** * @} - */ + */ /** @defgroup ADC_SMPR1_fields ADCx SMPR1 fields * @{ */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_SMPR1_SMPPLUS) #define ADC_SMPR1_FIELDS (ADC_SMPR1_SMP9 | ADC_SMPR1_SMP8 | ADC_SMPR1_SMP7 |\ ADC_SMPR1_SMP6 | ADC_SMPR1_SMP5 | ADC_SMPR1_SMP4 |\ ADC_SMPR1_SMP3 | ADC_SMPR1_SMP2 | ADC_SMPR1_SMP1 |\ @@ -595,44 +379,44 @@ typedef struct #define ADC_SMPR1_FIELDS (ADC_SMPR1_SMP9 | ADC_SMPR1_SMP8 | ADC_SMPR1_SMP7 |\ ADC_SMPR1_SMP6 | ADC_SMPR1_SMP5 | ADC_SMPR1_SMP4 |\ ADC_SMPR1_SMP3 | ADC_SMPR1_SMP2 | ADC_SMPR1_SMP1 |\ - ADC_SMPR1_SMP0) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ + ADC_SMPR1_SMP0) +#endif /** * @} - */ - + */ + /** @defgroup ADC_CFGR_fields_2 ADCx CFGR sub fields * @{ */ /* ADC_CFGR fields of parameters that can be updated when no conversion - (neither regular nor injected) is on-going */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_CFGR_FIELDS_2 ((uint32_t)(ADC_CFGR_DMACFG | ADC_CFGR_AUTDLY | ADC_CFGR_DFSDMCFG)) + (neither regular nor injected) is on-going */ +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) +#define ADC_CFGR_FIELDS_2 ((ADC_CFGR_DMACFG | ADC_CFGR_AUTDLY | ADC_CFGR_DFSDMCFG)) #else -#define ADC_CFGR_FIELDS_2 ((uint32_t)(ADC_CFGR_DMACFG | ADC_CFGR_AUTDLY)) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ +#define ADC_CFGR_FIELDS_2 ((ADC_CFGR_DMACFG | ADC_CFGR_AUTDLY)) +#endif /** * @} - */ - -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -/** @defgroup ADCEx_DFSDM_Mode_Configuration ADC Extended DFSDM mode configuration + */ + +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) +/** @defgroup ADC_HAL_EC_REG_DFSDM_TRANSFER ADC group regular - DFSDM transfer of ADC conversion data * @{ */ -#define ADC_DFSDM_MODE_DISABLE ((uint32_t)0x00000000) /*!< DFSDM mode configuration disabled */ -#define ADC_DFSDM_MODE_ENABLE ((uint32_t)ADC_CFGR_DFSDMCFG) /*!< DFSDM mode configuration enabled */ +#define ADC_DFSDM_MODE_DISABLE (0x00000000U) /*!< ADC conversions are not transferred by DFSDM. */ +#define ADC_DFSDM_MODE_ENABLE (LL_ADC_REG_DFSDM_TRANSFER_ENABLE) /*!< ADC conversion data are transfered to DFSDM for post processing. The ADC conversion data format must be 16-bit signed and right aligned, refer to reference manual. DFSDM transfer cannot be used if DMA transfer is enabled. */ /** * @} - */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ - + */ +#endif + /** * @} */ /* Exported macros -----------------------------------------------------------*/ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** @defgroup ADCEx_Exported_Macro ADC Extended Exported Macros * @{ */ @@ -648,300 +432,179 @@ typedef struct * configuration and can lead to have HAL ADC handles status * misaligned. Usage of this macro must be limited to cases * mentionned above. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval None */ #define ADC_FORCE_MODE_INDEPENDENT(__HANDLE__) \ - CLEAR_BIT(ADC_COMMON_REGISTER(__HANDLE__)->CCR, ADC_CCR_DUAL) + LL_ADC_SetMultimode(__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance), LL_ADC_MULTI_INDEPENDENT) /** * @} */ -#endif +#endif /* ADC_MULTIMODE_SUPPORT */ -/* Private macros -----------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ /** @defgroup ADCEx_Private_Macro_internal_HAL_driver ADC Extended Private Macros * @{ */ - +/* Macro reserved for internal HAL driver usage, not intended to be used in */ +/* code of final user. */ + /** * @brief Test if conversion trigger of injected group is software start * or external trigger. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (software start) or RESET (external trigger). */ -#define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) \ - (((__HANDLE__)->Instance->JSQR & ADC_JSQR_JEXTEN) == RESET) +#define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) \ + (((__HANDLE__)->Instance->JSQR & ADC_JSQR_JEXTEN) == RESET) /** * @brief Check if conversion is on going on regular or injected groups. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (conversion is on going) or RESET (no conversion is on going). */ #define ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED(__HANDLE__) \ (( (((__HANDLE__)->Instance->CR) & (ADC_CR_ADSTART | ADC_CR_JADSTART)) == RESET \ ) ? RESET : SET) - + /** * @brief Check if conversion is on going on injected group. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (conversion is on going) or RESET (no conversion is on going). */ -#define ADC_IS_CONVERSION_ONGOING_INJECTED(__HANDLE__) \ - (( (((__HANDLE__)->Instance->CR) & ADC_CR_JADSTART) == RESET \ - ) ? RESET : SET) - +#define ADC_IS_CONVERSION_ONGOING_INJECTED(__HANDLE__) \ + (LL_ADC_INJ_IsConversionOngoing((__HANDLE__)->Instance)) + /** * @brief Check whether or not ADC is independent. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note When multimode feature is not available, the macro always returns SET. * @retval SET (ADC is independent) or RESET (ADC is not). */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define ADC_IS_INDEPENDENT(__HANDLE__) \ ( ( ( ((__HANDLE__)->Instance) == ADC3) \ )? \ SET \ : \ RESET \ - ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) + ) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_IS_INDEPENDENT(__HANDLE__) (SET) #endif - -/** - * @brief Set the sample time for Channels numbers between 0 and 9. - * @param __SAMPLETIME__: Sample time parameter. - * @param __CHANNELNB__: Channel number. - * @retval None - */ -#define ADC_SMPR1(__SAMPLETIME__, __CHANNELNB__) ((__SAMPLETIME__) << (POSITION_VAL(ADC_SMPR1_SMP1) * (__CHANNELNB__))) - -/** - * @brief Set the sample time for Channels numbers between 10 and 18. - * @param __SAMPLETIME__: Sample time parameter. - * @param __CHANNELNB__: Channel number. - * @retval None - */ -#define ADC_SMPR2(__SAMPLETIME__, __CHANNELNB__) ((__SAMPLETIME__) << ((POSITION_VAL(ADC_SMPR2_SMP11) * ((__CHANNELNB__) - 10)))) - -/** - * @brief Write SMPR1 register. - * @param __HANDLE__ : ADC handle. - * @param __SAMPLETIME__: Sample time parameter. - * @param __CHANNELNB__ : Channel number. - * @retval None - */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_SMPR1_SETTING(__HANDLE__, __SAMPLETIME__, __CHANNELNB__) \ - do { \ - if((__SAMPLETIME__) == ADC_SAMPLETIME_3CYCLES_5) \ - { \ - SET_BIT((__HANDLE__)->Instance->SMPR1, ADC_SMPR1_SMPPLUS); \ - } \ - else if ((__SAMPLETIME__) == ADC_SAMPLETIME_2CYCLES_5) \ - { \ - CLEAR_BIT((__HANDLE__)->Instance->SMPR1, ADC_SMPR1_SMPPLUS); \ - } \ - MODIFY_REG((__HANDLE__)->Instance->SMPR1, \ - ADC_SMPR1(ADC_SMPR1_SMP0, (__CHANNELNB__)), \ - ADC_SMPR1((__SAMPLETIME__) & 0x7FFFFFFF, (__CHANNELNB__))); \ - } while(0) -#else -#define ADC_SMPR1_SETTING(__HANDLE__, __SAMPLETIME__, __CHANNELNB__) \ - MODIFY_REG((__HANDLE__)->Instance->SMPR1, \ - ADC_SMPR1(ADC_SMPR1_SMP0, (__CHANNELNB__)), \ - ADC_SMPR1((__SAMPLETIME__), (__CHANNELNB__))) -#endif - -/** - * @brief Write SMPR2 register. - * @param __HANDLE__ : ADC handle. - * @param __SAMPLETIME__: Sample time parameter. - * @param __CHANNELNB__ : Channel number. - * @retval None - */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_SMPR2_SETTING(__HANDLE__, __SAMPLETIME__, __CHANNELNB__) \ - do { \ - if((__SAMPLETIME__) == ADC_SAMPLETIME_3CYCLES_5) \ - { \ - SET_BIT((__HANDLE__)->Instance->SMPR1, ADC_SMPR1_SMPPLUS); \ - } \ - else if ((__SAMPLETIME__) == ADC_SAMPLETIME_2CYCLES_5) \ - { \ - CLEAR_BIT((__HANDLE__)->Instance->SMPR1, ADC_SMPR1_SMPPLUS); \ - } \ - MODIFY_REG((__HANDLE__)->Instance->SMPR2, \ - ADC_SMPR2(ADC_SMPR2_SMP10, (__CHANNELNB__)), \ - ADC_SMPR2((__SAMPLETIME__) & 0x7FFFFFFF, (__CHANNELNB__))); \ - } while(0) -#else -#define ADC_SMPR2_SETTING(__HANDLE__, __SAMPLETIME__, __CHANNELNB__) \ - MODIFY_REG((__HANDLE__)->Instance->SMPR2, \ - ADC_SMPR2(ADC_SMPR2_SMP10, (__CHANNELNB__)), \ - ADC_SMPR2((__SAMPLETIME__), (__CHANNELNB__))) -#endif - - -/** - * @brief Set the selected regular Channel rank for rank between 1 and 4. - * @param __CHANNELNB__: Channel number. - * @param __RANKNB__: Rank number. - * @retval None - */ -#define ADC_SQR1_RK(__CHANNELNB__, __RANKNB__) ((__CHANNELNB__) << (POSITION_VAL(ADC_SQR1_SQ1) * (__RANKNB__))) - -/** - * @brief Set the selected regular Channel rank for rank between 5 and 9. - * @param __CHANNELNB__: Channel number. - * @param __RANKNB__: Rank number. - * @retval None - */ -#define ADC_SQR2_RK(__CHANNELNB__, __RANKNB__) ((__CHANNELNB__) << (POSITION_VAL(ADC_SQR2_SQ6) * ((__RANKNB__) - 5))) - -/** - * @brief Set the selected regular Channel rank for rank between 10 and 14. - * @param __CHANNELNB__: Channel number. - * @param __RANKNB__: Rank number. - * @retval None - */ -#define ADC_SQR3_RK(__CHANNELNB__, __RANKNB__) ((__CHANNELNB__) << (POSITION_VAL(ADC_SQR3_SQ11) * ((__RANKNB__) - 10))) - -/** - * @brief Set the selected regular Channel rank for rank between 15 and 16. - * @param __CHANNELNB__: Channel number. - * @param __RANKNB__: Rank number. - * @retval None - */ -#define ADC_SQR4_RK(__CHANNELNB__, __RANKNB__) ((__CHANNELNB__) << (POSITION_VAL(ADC_SQR4_SQ16) * ((__RANKNB__) - 15))) /** * @brief Set the selected injected Channel rank. - * @param __CHANNELNB__: Channel number. - * @param __RANKNB__: Rank number. + * @param __CHANNELNB__ Channel number. + * @param __RANKNB__ Rank number. * @retval None */ -#define ADC_JSQR_RK(__CHANNELNB__, __RANKNB__) ((__CHANNELNB__) << ((POSITION_VAL(ADC_JSQR_JSQ1)-2) * (__RANKNB__) +2)) - - -/** - * @brief Set the Analog Watchdog 1 channel. - * @param __CHANNEL__: channel to be monitored by Analog Watchdog 1. - * @retval None - */ -#define ADC_CFGR_SET_AWD1CH(__CHANNEL__) ((__CHANNEL__) << POSITION_VAL(ADC_CFGR_AWD1CH)) - -/** - * @brief Configure the channel number in Analog Watchdog 2 or 3. - * @param __CHANNEL__: ADC Channel - * @retval None - */ -#define ADC_CFGR_SET_AWD23CR(__CHANNEL__) (1U << (__CHANNEL__)) +#define ADC_JSQR_RK(__CHANNELNB__, __RANKNB__) ((((__CHANNELNB__) & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << ((__RANKNB__) & ADC_INJ_RANK_ID_JSQR_MASK)) /** * @brief Configure ADC injected context queue - * @param __INJECT_CONTEXT_QUEUE_MODE__: Injected context queue mode. + * @param __INJECT_CONTEXT_QUEUE_MODE__ Injected context queue mode. * @retval None - */ -#define ADC_CFGR_INJECT_CONTEXT_QUEUE(__INJECT_CONTEXT_QUEUE_MODE__) ((__INJECT_CONTEXT_QUEUE_MODE__) << POSITION_VAL(ADC_CFGR_JQM)) + */ +#define ADC_CFGR_INJECT_CONTEXT_QUEUE(__INJECT_CONTEXT_QUEUE_MODE__) ((__INJECT_CONTEXT_QUEUE_MODE__) << ADC_CFGR_JQM_Pos) /** * @brief Configure ADC discontinuous conversion mode for injected group - * @param __INJECT_DISCONTINUOUS_MODE__: Injected discontinuous mode. + * @param __INJECT_DISCONTINUOUS_MODE__ Injected discontinuous mode. * @retval None */ -#define ADC_CFGR_INJECT_DISCCONTINUOUS(__INJECT_DISCONTINUOUS_MODE__) ((__INJECT_DISCONTINUOUS_MODE__) << POSITION_VAL(ADC_CFGR_JDISCEN)) +#define ADC_CFGR_INJECT_DISCCONTINUOUS(__INJECT_DISCONTINUOUS_MODE__) ((__INJECT_DISCONTINUOUS_MODE__) << ADC_CFGR_JDISCEN_Pos) /** * @brief Configure ADC discontinuous conversion mode for regular group - * @param __REG_DISCONTINUOUS_MODE__: Regular discontinuous mode. - * @retval None - */ -#define ADC_CFGR_REG_DISCONTINUOUS(__REG_DISCONTINUOUS_MODE__) ((__REG_DISCONTINUOUS_MODE__) << POSITION_VAL(ADC_CFGR_DISCEN)) -/** - * @brief Configure the number of discontinuous conversions for regular group. - * @param __NBR_DISCONTINUOUS_CONV__: Number of discontinuous conversions. + * @param __REG_DISCONTINUOUS_MODE__ Regular discontinuous mode. * @retval None */ -#define ADC_CFGR_DISCONTINUOUS_NUM(__NBR_DISCONTINUOUS_CONV__) (((__NBR_DISCONTINUOUS_CONV__) - 1) << POSITION_VAL(ADC_CFGR_DISCNUM)) +#define ADC_CFGR_REG_DISCONTINUOUS(__REG_DISCONTINUOUS_MODE__) ((__REG_DISCONTINUOUS_MODE__) << ADC_CFGR_DISCEN_Pos) + +/** + * @brief Configure the number of discontinuous conversions for regular group. + * @param __NBR_DISCONTINUOUS_CONV__ Number of discontinuous conversions. + * @retval None + */ +#define ADC_CFGR_DISCONTINUOUS_NUM(__NBR_DISCONTINUOUS_CONV__) (((__NBR_DISCONTINUOUS_CONV__) - 1) << ADC_CFGR_DISCNUM_Pos) /** * @brief Configure the ADC auto delay mode. - * @param __AUTOWAIT__: Auto delay bit enable or disable. + * @param __AUTOWAIT__ Auto delay bit enable or disable. * @retval None */ -#define ADC_CFGR_AUTOWAIT(__AUTOWAIT__) ((__AUTOWAIT__) << POSITION_VAL(ADC_CFGR_AUTDLY)) +#define ADC_CFGR_AUTOWAIT(__AUTOWAIT__) ((__AUTOWAIT__) << ADC_CFGR_AUTDLY_Pos) /** * @brief Configure ADC continuous conversion mode. - * @param __CONTINUOUS_MODE__: Continuous mode. + * @param __CONTINUOUS_MODE__ Continuous mode. * @retval None */ -#define ADC_CFGR_CONTINUOUS(__CONTINUOUS_MODE__) ((__CONTINUOUS_MODE__) << POSITION_VAL(ADC_CFGR_CONT)) - +#define ADC_CFGR_CONTINUOUS(__CONTINUOUS_MODE__) ((__CONTINUOUS_MODE__) << ADC_CFGR_CONT_Pos) + /** * @brief Configure the ADC DMA continuous request. - * @param __DMACONTREQ_MODE__: DMA continuous request mode. + * @param __DMACONTREQ_MODE__ DMA continuous request mode. * @retval None - */ -#define ADC_CFGR_DMACONTREQ(__DMACONTREQ_MODE__) ((__DMACONTREQ_MODE__) << POSITION_VAL(ADC_CFGR_DMACFG)) - + */ +#define ADC_CFGR_DMACONTREQ(__DMACONTREQ_MODE__) ((__DMACONTREQ_MODE__) << ADC_CFGR_DMACFG_Pos) /** * @brief Configure the channel number into offset OFRx register. - * @param __CHANNEL__: ADC Channel. + * @param __CHANNEL__ ADC Channel. * @retval None */ -#define ADC_OFR_CHANNEL(__CHANNEL__) ((__CHANNEL__) << POSITION_VAL(ADC_OFR1_OFFSET1_CH)) +#define ADC_OFR_CHANNEL(__CHANNEL__) ((__CHANNEL__) << ADC_OFR1_OFFSET1_CH_Pos) /** * @brief Configure the channel number into differential mode selection register. - * @param __CHANNEL__: ADC Channel. + * @param __CHANNEL__ ADC Channel. * @retval None */ #define ADC_DIFSEL_CHANNEL(__CHANNEL__) (1U << (__CHANNEL__)) /** * @brief Configure calibration factor in differential mode to be set into calibration register. - * @param __CALIBRATION_FACTOR__: Calibration factor value. + * @param __CALIBRATION_FACTOR__ Calibration factor value. * @retval None */ -#define ADC_CALFACT_DIFF_SET(__CALIBRATION_FACTOR__) (((__CALIBRATION_FACTOR__) & (ADC_CALFACT_CALFACT_D >> POSITION_VAL(ADC_CALFACT_CALFACT_D)) ) << POSITION_VAL(ADC_CALFACT_CALFACT_D)) +#define ADC_CALFACT_DIFF_SET(__CALIBRATION_FACTOR__) (((__CALIBRATION_FACTOR__) & (ADC_CALFACT_CALFACT_D_Pos >> ADC_CALFACT_CALFACT_D_Pos) ) << ADC_CALFACT_CALFACT_D_Pos) + /** * @brief Calibration factor in differential mode to be retrieved from calibration register. - * @param __CALIBRATION_FACTOR__: Calibration factor value. + * @param __CALIBRATION_FACTOR__ Calibration factor value. * @retval None - */ -#define ADC_CALFACT_DIFF_GET(__CALIBRATION_FACTOR__) ((__CALIBRATION_FACTOR__) >> POSITION_VAL(ADC_CALFACT_CALFACT_D)) - + */ +#define ADC_CALFACT_DIFF_GET(__CALIBRATION_FACTOR__) ((__CALIBRATION_FACTOR__) >> ADC_CALFACT_CALFACT_D_Pos) + /** * @brief Configure the analog watchdog high threshold into registers TR1, TR2 or TR3. - * @param __THRESHOLD__: Threshold value. + * @param __THRESHOLD__ Threshold value. * @retval None */ #define ADC_TRX_HIGHTHRESHOLD(__THRESHOLD__) ((__THRESHOLD__) << 16) -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Configure the ADC DMA continuous request for ADC multimode. - * @param __DMACONTREQ_MODE__: DMA continuous request mode. + * @param __DMACONTREQ_MODE__ DMA continuous request mode. * @retval None - */ -#define ADC_CCR_MULTI_DMACONTREQ(__DMACONTREQ_MODE__) ((__DMACONTREQ_MODE__) << POSITION_VAL(ADC_CCR_DMACFG)) -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ - + */ +#define ADC_CCR_MULTI_DMACONTREQ(__DMACONTREQ_MODE__) ((__DMACONTREQ_MODE__) << ADC_CCR_DMACFG_Pos) +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @brief Enable the ADC peripheral. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval None */ #define ADC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= ADC_CR_ADEN) /** * @brief Verification of hardware constraints before ADC can be enabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (ADC can be enabled) or RESET (ADC cannot be enabled) */ #define ADC_ENABLING_CONDITIONS(__HANDLE__) \ @@ -950,10 +613,10 @@ typedef struct ADC_CR_ADSTART | ADC_CR_ADDIS | ADC_CR_ADEN ) \ ) == RESET \ ) ? SET : RESET) - + /** * @brief Disable the ADC peripheral. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval None */ #define ADC_DISABLE(__HANDLE__) \ @@ -961,17 +624,17 @@ typedef struct (__HANDLE__)->Instance->CR |= ADC_CR_ADDIS; \ __HAL_ADC_CLEAR_FLAG((__HANDLE__), (ADC_FLAG_EOSMP | ADC_FLAG_RDY)); \ } while(0) - + /** * @brief Verification of hardware constraints before ADC can be disabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (ADC can be disabled) or RESET (ADC cannot be disabled) */ #define ADC_DISABLING_CONDITIONS(__HANDLE__) \ (( ( ((__HANDLE__)->Instance->CR) & \ (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN \ ) ? SET : RESET) - + /** * @brief Shift the offset with respect to the selected ADC resolution. * @note Offset has to be left-aligned on bit 11, the LSB (right bits) are set to 0. @@ -980,8 +643,8 @@ typedef struct * If resolution 8 bits, shift of 4 ranks on the left. * If resolution 6 bits, shift of 6 ranks on the left. * Therefore, shift = (12 - resolution) = 12 - (12- (((RES[1:0]) >> 3)*2)). - * @param __HANDLE__: ADC handle - * @param __OFFSET__: Value to be shifted + * @param __HANDLE__ ADC handle + * @param __OFFSET__ Value to be shifted * @retval None */ #define ADC_OFFSET_SHIFT_RESOLUTION(__HANDLE__, __OFFSET__) \ @@ -996,8 +659,8 @@ typedef struct * If resolution 8 bits, shift of 4 ranks on the left. * If resolution 6 bits, shift of 6 ranks on the left. * Therefore, shift = (12 - resolution) = 12 - (12- (((RES[1:0]) >> 3)*2)). - * @param __HANDLE__: ADC handle - * @param __THRESHOLD__: Value to be shifted + * @param __HANDLE__ ADC handle + * @param __THRESHOLD__ Value to be shifted * @retval None */ #define ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(__HANDLE__, __THRESHOLD__) \ @@ -1010,8 +673,8 @@ typedef struct * If resolution 10 bits, shift of 2 ranks on the right (the 2 LSB are discarded). * If resolution 8 bits, no shift. * If resolution 6 bits, shift of 2 ranks on the left (the 2 LSB are set to 0). - * @param __HANDLE__: ADC handle - * @param __THRESHOLD__: Value to be shifted + * @param __HANDLE__ ADC handle + * @param __THRESHOLD__ Value to be shifted * @retval None */ #define ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(__HANDLE__, __THRESHOLD__) \ @@ -1019,20 +682,9 @@ typedef struct ((__THRESHOLD__) >> (4- ((((__HANDLE__)->Instance->CFGR & ADC_CFGR_RES) >> 3)*2))) : \ (__THRESHOLD__) << 2 ) -/** - * @brief Report ADC common register. - * @param __HANDLE__: ADC handle. - * @retval Common control register - */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_COMMON_REGISTER(__HANDLE__) (ADC123_COMMON) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -#define ADC_COMMON_REGISTER(__HANDLE__) (ADC1_COMMON) -#endif - /** * @brief Report Master Instance. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return same instance if ADC of input handle is independent ADC or if * multimode feature is not available. * @retval Master Instance @@ -1045,17 +697,17 @@ typedef struct : \ (ADC1) \ ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_MASTER_REGISTER(__HANDLE__) ((__HANDLE__)->Instance) #endif - + /** * @brief Clear Common Control Register. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval None */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_CLEAR_COMMON_CONTROL_REGISTER(__HANDLE__) CLEAR_BIT(ADC_COMMON_REGISTER(__HANDLE__)->CCR, ADC_CCR_CKMODE | \ +#if defined(ADC_MULTIMODE_SUPPORT) +#define ADC_CLEAR_COMMON_CONTROL_REGISTER(__HANDLE__) CLEAR_BIT(__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance)->CCR, ADC_CCR_CKMODE | \ ADC_CCR_PRESC | \ ADC_CCR_VBATEN | \ ADC_CCR_TSEN | \ @@ -1064,22 +716,22 @@ typedef struct ADC_CCR_DMACFG | \ ADC_CCR_DELAY | \ ADC_CCR_DUAL ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -#define ADC_CLEAR_COMMON_CONTROL_REGISTER(__HANDLE__) CLEAR_BIT(ADC_COMMON_REGISTER(__HANDLE__)->CCR, ADC_CCR_CKMODE | \ +#else +#define ADC_CLEAR_COMMON_CONTROL_REGISTER(__HANDLE__) CLEAR_BIT(__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance)->CCR, ADC_CCR_CKMODE | \ ADC_CCR_PRESC | \ ADC_CCR_VBATEN | \ ADC_CCR_TSEN | \ ADC_CCR_VREFEN ) -#endif - - -/** + +#endif /* ADC_MULTIMODE_SUPPORT */ + +/** * @brief Check whether or not dual conversions are enabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return RESET if ADC of input handle is independent ADC or if multimode feature is not available. * @retval SET (dual regular conversions are enabled) or RESET (ADC is independent or no dual regular conversions are enabled) */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) #define ADC_IS_DUAL_CONVERSION_ENABLE(__HANDLE__) \ ( ( ((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) \ )? \ @@ -1087,38 +739,37 @@ typedef struct : \ RESET \ ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#else #define ADC_IS_DUAL_CONVERSION_ENABLE(__HANDLE__) (RESET) -#endif - +#endif + /** * @brief Check whether or not dual regular conversions are enabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return RESET if ADC of input handle is independent ADC or if multimode feature is not available. * @retval SET (dual regular conversions are enabled) or RESET (ADC is independent or no dual regular conversions are enabled) */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) #define ADC_IS_DUAL_REGULAR_CONVERSION_ENABLE(__HANDLE__) \ ( ( ((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) \ )? \ - ( (((ADC_COMMON_REGISTER(__HANDLE__))->CCR & ADC_CCR_DUAL) != ADC_MODE_INDEPENDENT) && \ - (((ADC_COMMON_REGISTER(__HANDLE__))->CCR & ADC_CCR_DUAL) != ADC_DUALMODE_INJECSIMULT) && \ - (((ADC_COMMON_REGISTER(__HANDLE__))->CCR & ADC_CCR_DUAL) != ADC_DUALMODE_ALTERTRIG) ) \ + ( (((__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance))->CCR & ADC_CCR_DUAL) != ADC_MODE_INDEPENDENT) && \ + (((__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance))->CCR & ADC_CCR_DUAL) != ADC_DUALMODE_INJECSIMULT) && \ + (((__LL_ADC_COMMON_INSTANCE((__HANDLE__)->Instance))->CCR & ADC_CCR_DUAL) != ADC_DUALMODE_ALTERTRIG) ) \ : \ RESET \ ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#else #define ADC_IS_DUAL_REGULAR_CONVERSION_ENABLE(__HANDLE__) (RESET) #endif - /** * @brief Verification of condition for ADC start conversion: ADC must be in non-multimode or multimode with handle of ADC master. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return SET if multimode feature is not available. * @retval SET (non-multimode or Master handle) or RESET (handle of Slave ADC in multimode) */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) \ ( ( ((__HANDLE__)->Instance == ADC1) || ((__HANDLE__)->Instance == ADC3) \ )? \ @@ -1126,17 +777,17 @@ typedef struct : \ ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == RESET) \ ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (SET) -#endif - +#endif + /** * @brief Ensure ADC Instance is Independent or Master, or is not Slave ADC with dual regular conversions enabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return SET if multimode feature is not available. * @retval SET (Independent or Master, or Slave without dual regular conversions enabled) or RESET (Slave ADC with dual regular conversions enabled) */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(__HANDLE__) \ ( ( ((__HANDLE__)->Instance == ADC1) || ((__HANDLE__)->Instance == ADC3) \ )? \ @@ -1144,18 +795,18 @@ typedef struct : \ ( ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_MODE_INDEPENDENT) || \ ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_DUALMODE_INJECSIMULT) || \ - ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_DUALMODE_ALTERTRIG) )) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) + ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_DUALMODE_ALTERTRIG) )) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined( STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE(__HANDLE__) (SET) -#endif +#endif /** * @brief Ensure ADC Instance is Independent or Master, or is not Slave ADC with dual injected conversions enabled. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note Return SET if multimode feature is not available. * @retval SET (non-multimode or Master, or Slave without dual injected conversions enabled) or RESET (Slave ADC with dual injected conversions enabled) */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(__HANDLE__) \ ( ( ((__HANDLE__)->Instance == ADC1) || ((__HANDLE__)->Instance == ADC3) \ )? \ @@ -1164,26 +815,26 @@ typedef struct ( ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_MODE_INDEPENDENT) || \ ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_DUALMODE_REGSIMULT) || \ ((ADC123_COMMON->CCR & ADC_CCR_DUAL) == ADC_DUALMODE_INTERL) )) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE(__HANDLE__) (SET) -#endif - +#endif + /** * @brief Verification of ADC state: enabled or disabled, directly checked on instance as input parameter. - * @param __INSTANCE__: ADC instance. + * @param __INSTANCE__ ADC instance. * @retval SET (ADC enabled) or RESET (ADC disabled) */ #define ADC_INSTANCE_IS_ENABLED(__INSTANCE__) \ (( ((((__INSTANCE__)->CR) & (ADC_CR_ADEN | ADC_CR_ADDIS)) == ADC_CR_ADEN) && \ ((((__INSTANCE__)->ISR) & ADC_FLAG_RDY) == ADC_FLAG_RDY) \ ) ? SET : RESET) - + /** * @brief Verification of enabled/disabled status of ADCs other than that associated to the input parameter handle. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (at least one other ADC is enabled) or RESET (no other ADC is enabled, all other ADCs are disabled) - */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + */ +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define ADC_ANY_OTHER_ENABLED(__HANDLE__) \ ( ( ((__HANDLE__)->Instance == ADC1) \ )? \ @@ -1195,99 +846,94 @@ typedef struct : \ ADC_INSTANCE_IS_ENABLED(ADC1)) || (ADC_INSTANCE_IS_ENABLED(ADC2)) \ ) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define ADC_ANY_OTHER_ENABLED(__HANDLE__) (RESET) -#endif - +#endif #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) /** * @brief Set handle instance of the ADC slave associated to the ADC master. - * @param __HANDLE_MASTER__: ADC master handle. - * @param __HANDLE_SLAVE__: ADC slave handle. - * @note if __HANDLE_MASTER__ is the handle of a slave ADC (ADC2) or an independent ADC (ADC3), __HANDLE_SLAVE__ instance is set to NULL. + * @param __HANDLE_MASTER__ ADC master handle. + * @param __HANDLE_SLAVE__ ADC slave handle. + * @note if __HANDLE_MASTER__ is the handle of a slave ADC or an independent ADC, __HANDLE_SLAVE__ instance is set to NULL. * @retval None */ #define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__) \ ( (((__HANDLE_MASTER__)->Instance == ADC1)) ? ((__HANDLE_SLAVE__)->Instance = ADC2) : ((__HANDLE_SLAVE__)->Instance = NULL) ) -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) */ +#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) */ - /** * @brief Check whether or not multimode is configured in DMA mode. + * @param __HANDLE__ ADC handle. * @note Return RESET if multimode feature is not available. * @retval SET (multimode is configured in DMA mode) or RESET (DMA multimode is disabled) - */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -#define ADC_MULTIMODE_DMA_ENABLED() \ + */ +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#define ADC_MULTIMODE_DMA_ENABLED(__HANDLE__) \ ((READ_BIT(ADC123_COMMON->CCR, ADC_CCR_MDMA) == ADC_DMAACCESSMODE_12_10_BITS) \ || (READ_BIT(ADC123_COMMON->CCR, ADC_CCR_MDMA) == ADC_DMAACCESSMODE_8_6_BITS)) -#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -#define ADC_MULTIMODE_DMA_ENABLED() (RESET) -#endif - +#elif defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define ADC_MULTIMODE_DMA_ENABLED(__HANDLE__) (RESET) +#endif /** * @brief Verify the ADC instance connected to the temperature sensor. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (ADC instance is valid) or RESET (ADC instance is invalid) - */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -/* The temperature sensor measurement path (channel 17) is available on ADC1 */ + */ +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/* The temperature sensor measurement path (channel 17) is available on ADC1 */ #define ADC_TEMPERATURE_SENSOR_INSTANCE(__HANDLE__) (((__HANDLE__)->Instance) == ADC1) #elif defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -/* The temperature sensor measurement path (channel 17) is available on ADC1 and ADC3 */ +/* The temperature sensor measurement path (channel 17) is available on ADC1 and ADC3 */ #define ADC_TEMPERATURE_SENSOR_INSTANCE(__HANDLE__) ((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC3)) #endif /** * @brief Verify the ADC instance connected to the battery voltage VBAT. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (ADC instance is valid) or RESET (ADC instance is invalid) - */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) -/* The battery voltage measurement path (channel 18) is available on ADC1 */ + */ +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/* The battery voltage measurement path (channel 18) is available on ADC1 */ #define ADC_BATTERY_VOLTAGE_INSTANCE(__HANDLE__) (((__HANDLE__)->Instance) == ADC1) #elif defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) -/* The battery voltage measurement path (channel 18) is available on ADC1 and ADC3 */ +/* The battery voltage measurement path (channel 18) is available on ADC1 and ADC3 */ #define ADC_BATTERY_VOLTAGE_INSTANCE(__HANDLE__) ((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC3)) #endif /** * @brief Verify the ADC instance connected to the internal voltage reference VREFINT. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @retval SET (ADC instance is valid) or RESET (ADC instance is invalid) - */ -/* The internal voltage reference VREFINT measurement path (channel 0) is available on ADC1 */ + */ +/* The internal voltage reference VREFINT measurement path (channel 0) is available on ADC1 */ #define ADC_VREFINT_INSTANCE(__HANDLE__) (((__HANDLE__)->Instance) == ADC1) - /** * @brief Verify the length of scheduled injected conversions group. - * @param __LENGTH__: number of programmed conversions. + * @param __LENGTH__ number of programmed conversions. * @retval SET (__LENGTH__ is within the maximum number of possible programmable injected conversions) or RESET (__LENGTH__ is null or too large) - */ -#define IS_ADC_INJECTED_NB_CONV(__LENGTH__) (((__LENGTH__) >= ((uint32_t)1)) && ((__LENGTH__) <= ((uint32_t)4))) - - + */ +#define IS_ADC_INJECTED_NB_CONV(__LENGTH__) (((__LENGTH__) >= (1U)) && ((__LENGTH__) <= (4U))) + /** * @brief Calibration factor size verification (7 bits maximum). - * @param __CALIBRATION_FACTOR__: Calibration factor value. + * @param __CALIBRATION_FACTOR__ Calibration factor value. * @retval SET (__CALIBRATION_FACTOR__ is within the authorized size) or RESET (__CALIBRATION_FACTOR__ is too large) */ -#define IS_ADC_CALFACT(__CALIBRATION_FACTOR__) ((__CALIBRATION_FACTOR__) <= ((uint32_t)0x7F)) +#define IS_ADC_CALFACT(__CALIBRATION_FACTOR__) ((__CALIBRATION_FACTOR__) <= (0x7FU)) + - /** * @brief Verify the ADC channel setting. - * @param __HANDLE__: ADC handle. - * @param __CHANNEL__: programmed ADC channel. + * @param __HANDLE__ ADC handle. + * @param __CHANNEL__ programmed ADC channel. * @retval SET (__CHANNEL__ is valid) or RESET (__CHANNEL__ is invalid) */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_ADC_CHANNEL(__HANDLE__, __CHANNEL__) ((((__HANDLE__)->Instance) == ADC1) && \ - (((__CHANNEL__) == ADC_CHANNEL_VREFINT) || \ - ((__CHANNEL__) == ADC_CHANNEL_1) || \ + (((__CHANNEL__) == ADC_CHANNEL_1) || \ ((__CHANNEL__) == ADC_CHANNEL_2) || \ ((__CHANNEL__) == ADC_CHANNEL_3) || \ ((__CHANNEL__) == ADC_CHANNEL_4) || \ @@ -1305,12 +951,14 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_16) || \ ((__CHANNEL__) == ADC_CHANNEL_17) || \ ((__CHANNEL__) == ADC_CHANNEL_18) || \ + ((__CHANNEL__) == ADC_CHANNEL_VREFINT) || \ ((__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR) || \ - ((__CHANNEL__) == ADC_CHANNEL_VBAT))) + ((__CHANNEL__) == ADC_CHANNEL_VBAT) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH1) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH2))) #elif defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define IS_ADC_CHANNEL(__HANDLE__, __CHANNEL__) (((((__HANDLE__)->Instance) == ADC1) && \ - (((__CHANNEL__) == ADC_CHANNEL_VREFINT) || \ - ((__CHANNEL__) == ADC_CHANNEL_1) || \ + (((__CHANNEL__) == ADC_CHANNEL_1) || \ ((__CHANNEL__) == ADC_CHANNEL_2) || \ ((__CHANNEL__) == ADC_CHANNEL_3) || \ ((__CHANNEL__) == ADC_CHANNEL_4) || \ @@ -1326,6 +974,7 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_14) || \ ((__CHANNEL__) == ADC_CHANNEL_15) || \ ((__CHANNEL__) == ADC_CHANNEL_16) || \ + ((__CHANNEL__) == ADC_CHANNEL_VREFINT) || \ ((__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR) || \ ((__CHANNEL__) == ADC_CHANNEL_VBAT))) || \ ((((__HANDLE__)->Instance) == ADC2) && \ @@ -1346,7 +995,9 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_15) || \ ((__CHANNEL__) == ADC_CHANNEL_16) || \ ((__CHANNEL__) == ADC_CHANNEL_17) || \ - ((__CHANNEL__) == ADC_CHANNEL_18))) || \ + ((__CHANNEL__) == ADC_CHANNEL_18) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH1_ADC2) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH2_ADC2))) || \ ((((__HANDLE__)->Instance) == ADC3) && \ (((__CHANNEL__) == ADC_CHANNEL_1) || \ ((__CHANNEL__) == ADC_CHANNEL_2) || \ @@ -1363,16 +1014,18 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_14) || \ ((__CHANNEL__) == ADC_CHANNEL_15) || \ ((__CHANNEL__) == ADC_CHANNEL_TEMPSENSOR) || \ - ((__CHANNEL__) == ADC_CHANNEL_VBAT) ))) + ((__CHANNEL__) == ADC_CHANNEL_VBAT) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH1_ADC3) || \ + ((__CHANNEL__) == ADC_CHANNEL_DAC1CH2_ADC3) ))) #endif - + /** * @brief Verify the ADC channel setting in differential mode. - * @param __HANDLE__: ADC handle. - * @param __CHANNEL__: programmed ADC channel. + * @param __HANDLE__ ADC handle. + * @param __CHANNEL__ programmed ADC channel. * @retval SET (__CHANNEL__ is valid) or RESET (__CHANNEL__ is invalid) - */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) + */ +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_ADC_DIFF_CHANNEL(__HANDLE__, __CHANNEL__) (((__CHANNEL__) == ADC_CHANNEL_1) || \ ((__CHANNEL__) == ADC_CHANNEL_2) || \ ((__CHANNEL__) == ADC_CHANNEL_3) || \ @@ -1390,9 +1043,9 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_15) ) #elif defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) /* For ADC1 and ADC2, channels 1 to 15 are available in differential mode, - channels 0, 16 to 18 can be only used in single-ended mode. + channels 0, 16 to 18 can be only used in single-ended mode. For ADC3, channels 1 to 3 and 6 to 12 are available in differential mode, - channels 4, 5 and 13 to 18 can only be used in single-ended mode. */ + channels 4, 5 and 13 to 18 can only be used in single-ended mode. */ #define IS_ADC_DIFF_CHANNEL(__HANDLE__, __CHANNEL__) ((((((__HANDLE__)->Instance) == ADC1) || \ (((__HANDLE__)->Instance) == ADC2)) && \ (((__CHANNEL__) == ADC_CHANNEL_1) || \ @@ -1421,21 +1074,21 @@ typedef struct ((__CHANNEL__) == ADC_CHANNEL_10) || \ ((__CHANNEL__) == ADC_CHANNEL_11) || \ ((__CHANNEL__) == ADC_CHANNEL_12) ))) -#endif - -/** +#endif + +/** * @brief Verify the ADC single-ended input or differential mode setting. - * @param __SING_DIFF__: programmed channel setting. + * @param __SING_DIFF__ programmed channel setting. * @retval SET (__SING_DIFF__ is valid) or RESET (__SING_DIFF__ is invalid) - */ + */ #define IS_ADC_SINGLE_DIFFERENTIAL(__SING_DIFF__) (((__SING_DIFF__) == ADC_SINGLE_ENDED) || \ ((__SING_DIFF__) == ADC_DIFFERENTIAL_ENDED) ) - + /** * @brief Verify the ADC offset management setting. - * @param __OFFSET_NUMBER__: ADC offset management. + * @param __OFFSET_NUMBER__ ADC offset management. * @retval SET (__OFFSET_NUMBER__ is valid) or RESET (__OFFSET_NUMBER__ is invalid) - */ + */ #define IS_ADC_OFFSET_NUMBER(__OFFSET_NUMBER__) (((__OFFSET_NUMBER__) == ADC_OFFSET_NONE) || \ ((__OFFSET_NUMBER__) == ADC_OFFSET_1) || \ ((__OFFSET_NUMBER__) == ADC_OFFSET_2) || \ @@ -1444,7 +1097,7 @@ typedef struct /** * @brief Verify the ADC injected channel setting. - * @param __CHANNEL__: programmed ADC injected channel. + * @param __CHANNEL__ programmed ADC injected channel. * @retval SET (__CHANNEL__ is valid) or RESET (__CHANNEL__ is invalid) */ #define IS_ADC_INJECTED_RANK(__CHANNEL__) (((__CHANNEL__) == ADC_INJECTED_RANK_1) || \ @@ -1454,31 +1107,31 @@ typedef struct /** * @brief Verify the ADC injected conversions external trigger. - * @param __INJTRIG__: programmed ADC injected conversions external trigger. + * @param __HANDLE__ ADC handle. + * @param __INJTRIG__ programmed ADC injected conversions external trigger. * @retval SET (__INJTRIG__ is a valid value) or RESET (__INJTRIG__ is invalid) - */ -#define IS_ADC_EXTTRIGINJEC(__INJTRIG__) (((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_CC4) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T2_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T2_CC1) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC4) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T4_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_EXT_IT15) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_CC4) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_TRGO2) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_TRGO2) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC3) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC1) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T6_TRGO) || \ - ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T15_TRGO) || \ - \ - ((__INJTRIG__) == ADC_SOFTWARE_START) ) + */ +#define IS_ADC_EXTTRIGINJEC(__HANDLE__, __INJTRIG__) (((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_CC4) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T2_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T2_CC1) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC4) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T4_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_EXT_IT15) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_CC4) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T1_TRGO2) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T8_TRGO2) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC3) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T3_CC1) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T6_TRGO) || \ + ((__INJTRIG__) == ADC_EXTERNALTRIGINJEC_T15_TRGO) || \ + ((__INJTRIG__) == ADC_INJECTED_SOFTWARE_START) ) /** * @brief Verify the ADC edge trigger setting for injected group. - * @param __EDGE__: programmed ADC edge trigger setting. + * @param __EDGE__ programmed ADC edge trigger setting. * @retval SET (__EDGE__ is a valid value) or RESET (__EDGE__ is invalid) */ #define IS_ADC_EXTTRIGINJEC_EDGE(__EDGE__) (((__EDGE__) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE) || \ @@ -1486,10 +1139,10 @@ typedef struct ((__EDGE__) == ADC_EXTERNALTRIGINJECCONV_EDGE_FALLING) || \ ((__EDGE__) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISINGFALLING) ) -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) /** * @brief Verify the ADC multimode setting. - * @param __MODE__: programmed ADC multimode setting. + * @param __MODE__ programmed ADC multimode setting. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_ADC_MULTIMODE(__MODE__) (((__MODE__) == ADC_MODE_INDEPENDENT) || \ @@ -1499,11 +1152,11 @@ typedef struct ((__MODE__) == ADC_DUALMODE_INJECSIMULT) || \ ((__MODE__) == ADC_DUALMODE_REGSIMULT) || \ ((__MODE__) == ADC_DUALMODE_INTERL) || \ - ((__MODE__) == ADC_DUALMODE_ALTERTRIG) ) + ((__MODE__) == ADC_DUALMODE_ALTERTRIG) ) /** * @brief Verify the ADC multimode DMA access setting. - * @param __MODE__: programmed ADC multimode DMA access setting. + * @param __MODE__ programmed ADC multimode DMA access setting. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_ADC_DMA_ACCESS_MULTIMODE(__MODE__) (((__MODE__) == ADC_DMAACCESSMODE_DISABLED) || \ @@ -1512,7 +1165,7 @@ typedef struct /** * @brief Verify the ADC multimode delay setting. - * @param __DELAY__: programmed ADC multimode delay setting. + * @param __DELAY__ programmed ADC multimode delay setting. * @retval SET (__DELAY__ is a valid value) or RESET (__DELAY__ is invalid) */ #define IS_ADC_SAMPLING_DELAY(__DELAY__) (((__DELAY__) == ADC_TWOSAMPLINGDELAY_1CYCLE) || \ @@ -1527,11 +1180,11 @@ typedef struct ((__DELAY__) == ADC_TWOSAMPLINGDELAY_10CYCLES) || \ ((__DELAY__) == ADC_TWOSAMPLINGDELAY_11CYCLES) || \ ((__DELAY__) == ADC_TWOSAMPLINGDELAY_12CYCLES) ) -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @brief Verify the ADC analog watchdog setting. - * @param __WATCHDOG__: programmed ADC analog watchdog setting. + * @param __WATCHDOG__ programmed ADC analog watchdog setting. * @retval SET (__WATCHDOG__ is valid) or RESET (__WATCHDOG__ is invalid) */ #define IS_ADC_ANALOG_WATCHDOG_NUMBER(__WATCHDOG__) (((__WATCHDOG__) == ADC_ANALOGWATCHDOG_1) || \ @@ -1540,7 +1193,7 @@ typedef struct /** * @brief Verify the ADC analog watchdog mode setting. - * @param __WATCHDOG_MODE__: programmed ADC analog watchdog mode setting. + * @param __WATCHDOG_MODE__ programmed ADC analog watchdog mode setting. * @retval SET (__WATCHDOG_MODE__ is valid) or RESET (__WATCHDOG_MODE__ is invalid) */ #define IS_ADC_ANALOG_WATCHDOG_MODE(__WATCHDOG_MODE__) (((__WATCHDOG_MODE__) == ADC_ANALOGWATCHDOG_NONE) || \ @@ -1553,7 +1206,7 @@ typedef struct /** * @brief Verify the ADC conversion (regular or injected or both). - * @param __CONVERSION__: ADC conversion group. + * @param __CONVERSION__ ADC conversion group. * @retval SET (__CONVERSION__ is valid) or RESET (__CONVERSION__ is invalid) */ #define IS_ADC_CONVERSION_GROUP(__CONVERSION__) (((__CONVERSION__) == ADC_REGULAR_GROUP) || \ @@ -1562,7 +1215,7 @@ typedef struct /** * @brief Verify the ADC event type. - * @param __EVENT__: ADC event. + * @param __EVENT__ ADC event. * @retval SET (__EVENT__ is valid) or RESET (__EVENT__ is invalid) */ #define IS_ADC_EVENT_TYPE(__EVENT__) (((__EVENT__) == ADC_EOSMP_EVENT) || \ @@ -1574,9 +1227,9 @@ typedef struct /** * @brief Verify the ADC oversampling ratio. - * @param __RATIO__: programmed ADC oversampling ratio. + * @param __RATIO__ programmed ADC oversampling ratio. * @retval SET (__RATIO__ is a valid value) or RESET (__RATIO__ is invalid) - */ + */ #define IS_ADC_OVERSAMPLING_RATIO(__RATIO__) (((__RATIO__) == ADC_OVERSAMPLING_RATIO_2 ) || \ ((__RATIO__) == ADC_OVERSAMPLING_RATIO_4 ) || \ ((__RATIO__) == ADC_OVERSAMPLING_RATIO_8 ) || \ @@ -1588,9 +1241,9 @@ typedef struct /** * @brief Verify the ADC oversampling shift. - * @param __SHIFT__: programmed ADC oversampling shift. + * @param __SHIFT__ programmed ADC oversampling shift. * @retval SET (__SHIFT__ is a valid value) or RESET (__SHIFT__ is invalid) - */ + */ #define IS_ADC_RIGHT_BIT_SHIFT(__SHIFT__) (((__SHIFT__) == ADC_RIGHTBITSHIFT_NONE) || \ ((__SHIFT__) == ADC_RIGHTBITSHIFT_1 ) || \ ((__SHIFT__) == ADC_RIGHTBITSHIFT_2 ) || \ @@ -1603,63 +1256,62 @@ typedef struct /** * @brief Verify the ADC oversampling triggered mode. - * @param __MODE__: programmed ADC oversampling triggered mode. + * @param __MODE__ programmed ADC oversampling triggered mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) - */ + */ #define IS_ADC_TRIGGERED_OVERSAMPLING_MODE(__MODE__) (((__MODE__) == ADC_TRIGGEREDMODE_SINGLE_TRIGGER) || \ ((__MODE__) == ADC_TRIGGEREDMODE_MULTI_TRIGGER) ) /** * @brief Verify the ADC oversampling regular conversion resumed or continued mode. - * @param __MODE__: programmed ADC oversampling regular conversion resumed or continued mode. + * @param __MODE__ programmed ADC oversampling regular conversion resumed or continued mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) - */ + */ #define IS_ADC_REGOVERSAMPLING_MODE(__MODE__) (((__MODE__) == ADC_REGOVERSAMPLING_CONTINUED_MODE) || \ ((__MODE__) == ADC_REGOVERSAMPLING_RESUMED_MODE) ) - /** * @brief Verify the DFSDM mode configuration. - * @param __HANDLE__: ADC handle. + * @param __HANDLE__ ADC handle. * @note When DMSDFM configuration is not supported, the macro systematically reports SET. For * this reason, the input parameter is the ADC handle and not the configuration parameter * directly. * @retval SET (DFSDM mode configuration is valid) or RESET (DFSDM mode configuration is invalid) */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) #define IS_ADC_DFSDMCFG_MODE(__HANDLE__) (((__HANDLE__)->Init.DFSDMConfig == ADC_DFSDM_MODE_DISABLE) || \ ((__HANDLE__)->Init.DFSDMConfig == ADC_DFSDM_MODE_ENABLE) ) #else #define IS_ADC_DFSDMCFG_MODE(__HANDLE__) (SET) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ +#endif /** - * @brief Return the DFSDM configuration mode. - * @param __HANDLE__: ADC handle. + * @brief Return the DFSDM configuration mode. + * @param __HANDLE__ ADC handle. * @note When DMSDFM configuration is not supported, the macro systematically reports 0x0 (i.e disabled). * For this reason, the input parameter is the ADC handle and not the configuration parameter * directly. * @retval DFSDM configuration mode */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) #define ADC_CFGR_DFSDM(__HANDLE__) ((__HANDLE__)->Init.DFSDMConfig) #else #define ADC_CFGR_DFSDM(__HANDLE__) (0x0) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ - +#endif + /** * @} */ -/* Exported functions --------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @addtogroup ADCEx_Exported_Functions * @{ - */ - + */ + /** @addtogroup ADCEx_Exported_Functions_Group1 * @{ - */ + */ /* IO operation functions *****************************************************/ /* ADC calibration */ @@ -1675,13 +1327,13 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* h /* Non-blocking mode: Interruption */ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc); - -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + +#if defined(ADC_MULTIMODE_SUPPORT) /* ADC multimode */ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length); HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc); uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc); -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /* ADC retrieve conversion value intended to be used with polling or interruption */ uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank); @@ -1693,26 +1345,26 @@ void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef* h void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef* hadc); void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef* hadc); -/* ADC Regular conversions stop */ +/* ADC group regular conversions stop */ HAL_StatusTypeDef HAL_ADCEx_RegularStop(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADCEx_RegularStop_IT(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef* hadc); -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) HAL_StatusTypeDef HAL_ADCEx_RegularMultiModeStop_DMA(ADC_HandleTypeDef* hadc); -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ /** * @} */ - + /** @addtogroup ADCEx_Exported_Functions_Group2 * @{ - */ + */ /* Peripheral Control functions ***********************************************/ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected); -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined(ADC_MULTIMODE_SUPPORT) HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode); -#endif /* defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) */ +#endif /* ADC_MULTIMODE_SUPPORT */ HAL_StatusTypeDef HAL_ADCEx_EnableInjectedQueue(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADCEx_DisableInjectedQueue(ADC_HandleTypeDef* hadc); HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef* hadc); @@ -1725,10 +1377,10 @@ HAL_StatusTypeDef HAL_ADCEx_EnterADCDeepPowerDownMode(ADC_HandleTypeDef* h /** * @} */ - + /** * @} - */ + */ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.c index 9dfd4d0bec..a78181d858 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.c @@ -2,74 +2,131 @@ ****************************************************************************** * @file stm32l4xx_hal_can.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief CAN HAL module driver. - * This file provides firmware functions to manage the following - * functionalities of the Controller Area Network (CAN) peripheral: - * + Initialization and de-initialization functions - * + IO operation functions - * + Peripheral Control functions + * This file provides firmware functions to manage the following + * functionalities of the Controller Area Network (CAN) peripheral: + * + Initialization and de-initialization functions + * + Configuration functions + * + Control functions + * + Interrupts management + * + Callbacks functions * + Peripheral State and Error functions * @verbatim - ============================================================================== + ============================================================================== ##### How to use this driver ##### ============================================================================== - [..] - (#) Enable the CAN controller interface clock using - __HAL_RCC_CAN1_CLK_ENABLE() for CAN1. - - (#) CAN pins configuration - (++) Enable the clock for the CAN GPIOs using the following function: - __HAL_RCC_GPIOx_CLK_ENABLE(); - (++) Connect and configure the involved CAN pins using the - following function HAL_GPIO_Init(); - - (#) Initialize and configure the CAN using HAL_CAN_Init() function. - - (#) Transmit the desired CAN frame using HAL_CAN_Transmit() or - HAL_CAN_Transmit_IT() function. - - (#) Receive a CAN frame using HAL_CAN_Receive() or HAL_CAN_Receive_IT() function. + [..] + (#) Initialize the CAN low level resources by implementing the + HAL_CAN_MspInit(): + (++) Enable the CAN interface clock using __HAL_RCC_CANx_CLK_ENABLE() + (++) Configure CAN pins + (+++) Enable the clock for the CAN GPIOs + (+++) Configure CAN pins as alternate function open-drain + (++) In case of using interrupts (e.g. HAL_CAN_ActivateNotification()) + (+++) Configure the CAN interrupt priority using + HAL_NVIC_SetPriority() + (+++) Enable the CAN IRQ handler using HAL_NVIC_EnableIRQ() + (+++) In CAN IRQ handler, call HAL_CAN_IRQHandler() + + (#) Initialize the CAN peripheral using HAL_CAN_Init() function. This + function resorts to HAL_CAN_MspInit() for low-level initialization. + + (#) Configure the reception filters using the following configuration + functions: + (++) HAL_CAN_ConfigFilter() + + (#) Start the CAN module using HAL_CAN_Start() function. At this level + the node is active on the bus: it receive messages, and can send + messages. + + (#) To manage messages transmission, the following Tx control functions + can be used: + (++) HAL_CAN_AddTxMessage() to request transmission of a new + message. + (++) HAL_CAN_AbortTxRequest() to abort transmission of a pending + message. + (++) HAL_CAN_GetTxMailboxesFreeLevel() to get the number of free Tx + mailboxes. + (++) HAL_CAN_IsTxMessagePending() to check if a message is pending + in a Tx mailbox. + (++) HAL_CAN_GetTxTimestamp() to get the timestamp of Tx message + sent, if time triggered communication mode is enabled. + + (#) When a message is received into the CAN Rx FIFOs, it can be retrieved + using the HAL_CAN_GetRxMessage() function. The function + HAL_CAN_GetRxFifoFillLevel() allows to know how many Rx message are + stored in the Rx Fifo. + + (#) Calling the HAL_CAN_Stop() function stops the CAN module. + + (#) The deinitialization is achieved with HAL_CAN_DeInit() function. + + + *** Polling mode operation *** + ============================== + [..] + (#) Reception: + (++) Monitor reception of message using HAL_CAN_GetRxFifoFillLevel() + until at least one message is received. + (++) Then get the message using HAL_CAN_GetRxMessage(). + + (#) Transmission: + (++) Monitor the Tx mailboxes availability until at least one Tx + mailbox is free, using HAL_CAN_GetTxMailboxesFreeLevel(). + (++) Then request transmission of a message using + HAL_CAN_AddTxMessage(). + + + *** Interrupt mode operation *** + ================================ + [..] + (#) Notifications are activated using HAL_CAN_ActivateNotification() + function. Then, the process can be controlled through the + available user callbacks: HAL_CAN_xxxCallback(), using same APIs + HAL_CAN_GetRxMessage() and HAL_CAN_AddTxMessage(). + + (#) Notifications can be deactivated using + HAL_CAN_DeactivateNotification() function. + + (#) Special care should be taken for CAN_IT_RX_FIFO0_MSG_PENDING and + CAN_IT_RX_FIFO1_MSG_PENDING notifications. These notifications trig + the callbacks HAL_CAN_RxFIFO0MsgPendingCallback() and + HAL_CAN_RxFIFO1MsgPendingCallback(). User has two possible options + here. + (++) Directly get the Rx message in the callback, using + HAL_CAN_GetRxMessage(). + (++) Or deactivate the notification in the callback without + getting the Rx message. The Rx message can then be got later + using HAL_CAN_GetRxMessage(). Once the Rx message have been + read, the notification can be activated again. + + + *** Sleep mode *** + ================== + [..] + (#) The CAN peripheral can be put in sleep mode (low power), using + HAL_CAN_RequestSleep(). The sleep mode will be entered as soon as the + current CAN activity (transmission or reception of a CAN frame) will + be completed. + + (#) A notification can be activated to be informed when the sleep mode + will be entered. + + (#) It can be checked if the sleep mode is entered using + HAL_CAN_IsSleepActive(). + Note that the CAN state (accessible from the API HAL_CAN_GetState()) + is HAL_CAN_STATE_SLEEP_PENDING as soon as the sleep mode request is + submitted (the sleep mode is not yet entered), and become + HAL_CAN_STATE_SLEEP_ACTIVE when the sleep mode is effective. + + (#) The wake-up from sleep mode can be trigged by two ways: + (++) Using HAL_CAN_WakeUp(). When returning from this function, + the sleep mode is exited (if return status is HAL_OK). + (++) When a start of Rx CAN frame is detected by the CAN peripheral, + if automatic wake up mode is enabled. - *** Polling mode IO operation *** - ================================= - [..] - (+) Start the CAN peripheral transmission and wait the end of this operation - using HAL_CAN_Transmit(), at this stage user can specify the value of timeout - according to his end application - (+) Start the CAN peripheral reception and wait the end of this operation - using HAL_CAN_Receive(), at this stage user can specify the value of timeout - according to his end application - - *** Interrupt mode IO operation *** - =================================== - [..] - (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() - (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() - (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine - (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_TxCpltCallback - (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can - add his own code by customization of function pointer HAL_CAN_ErrorCallback - - *** CAN HAL driver macros list *** - ============================================= - [..] - Below the list of most used macros in CAN HAL driver. - - (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts - (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts - (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled - (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags - (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status - - [..] - (@) You can refer to the CAN HAL driver header file for more useful macros - @endverbatim - ****************************************************************************** * @attention * @@ -107,553 +164,594 @@ * @{ */ +#if defined(CAN1) + /** @defgroup CAN CAN * @brief CAN driver modules * @{ - */ - -#ifdef HAL_CAN_MODULE_ENABLED - + */ + +#ifdef HAL_CAN_MODULE_ENABLED + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #error "The CAN driver cannot be used with its legacy, Please enable only one CAN module at once" +#endif + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -#define CAN_TIMEOUT_VALUE 10 +#define CAN_TIMEOUT_VALUE 10U /** * @} */ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); -/** - * @} - */ - /* Exported functions --------------------------------------------------------*/ /** @defgroup CAN_Exported_Functions CAN Exported Functions * @{ */ -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim ============================================================================== ##### Initialization and de-initialization functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Initialize and configure the CAN. - (+) De-initialize the CAN. - + (+) HAL_CAN_Init : Initialize and configure the CAN. + (+) HAL_CAN_DeInit : De-initialize the CAN. + (+) HAL_CAN_MspInit : Initialize the CAN MSP. + (+) HAL_CAN_MspDeInit : DeInitialize the CAN MSP. + @endverbatim * @{ */ - + /** - * @brief Initialize the CAN peripheral according to the specified parameters - * in the CAN_InitStruct structure and initialize the associated handle. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Initializes the CAN peripheral according to the specified + * parameters in the CAN_InitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { - uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ - uint32_t tickstart = 0; - + uint32_t tickstart = 0U; + /* Check CAN handle */ - if(hcan == NULL) + if (hcan == NULL) { - return HAL_ERROR; + return HAL_ERROR; } /* Check the parameters */ assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); - assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TimeTriggeredMode)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoBusOff)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoWakeUp)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AutoRetransmission)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ReceiveFifoLocked)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TransmitFifoPriority)); assert_param(IS_CAN_MODE(hcan->Init.Mode)); - assert_param(IS_CAN_SJW(hcan->Init.SJW)); - assert_param(IS_CAN_BS1(hcan->Init.BS1)); - assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_SJW(hcan->Init.SyncJumpWidth)); + assert_param(IS_CAN_BS1(hcan->Init.TimeSeg1)); + assert_param(IS_CAN_BS2(hcan->Init.TimeSeg2)); assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); - - if(hcan->State == HAL_CAN_STATE_RESET) - { - /* Allocate lock resource and initialize it */ - hcan->Lock = HAL_UNLOCKED; - /* Init the low level hardware */ + if (hcan->State == HAL_CAN_STATE_RESET) + { + /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); } - - /* Initialize the CAN state*/ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Exit from sleep mode */ - hcan->Instance->MCR &= (~(uint32_t)CAN_MCR_SLEEP); - /* Request initialisation */ - hcan->Instance->MCR |= CAN_MCR_INRQ ; + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); /* Get tick */ tickstart = HAL_GetTick(); - /* Wait the acknowledge */ - while((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != RESET) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - /* Check acknowledge */ - if ((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == RESET) { - /* Set the time triggered communication mode */ - if (hcan->Init.TTCM == ENABLE) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - hcan->Instance->MCR |= CAN_MCR_TTCM; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TTCM; - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - /* Set the automatic bus-off management */ - if (hcan->Init.ABOM == ENABLE) - { - hcan->Instance->MCR |= CAN_MCR_ABOM; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_ABOM; - } + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; - /* Set the automatic wake-up mode */ - if (hcan->Init.AWUM == ENABLE) - { - hcan->Instance->MCR |= CAN_MCR_AWUM; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_AWUM; - } - - /* Set the no automatic retransmission */ - if (hcan->Init.NART == ENABLE) - { - hcan->Instance->MCR |= CAN_MCR_NART; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_NART; - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.RFLM == ENABLE) - { - hcan->Instance->MCR |= CAN_MCR_RFLM; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_RFLM; - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TXFP == ENABLE) - { - hcan->Instance->MCR |= CAN_MCR_TXFP; - } - else - { - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TXFP; - } - - /* Set the bit timing register */ - hcan->Instance->BTR = (uint32_t)((uint32_t)hcan->Init.Mode) | \ - ((uint32_t)hcan->Init.SJW) | \ - ((uint32_t)hcan->Init.BS1) | \ - ((uint32_t)hcan->Init.BS2) | \ - ((uint32_t)hcan->Init.Prescaler - 1); - - /* Request leave initialisation */ - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_INRQ; - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } - } - - /* Check acknowledged */ - if ((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) - { - status = CAN_INITSTATUS_SUCCESS; + return HAL_ERROR; } } - - if(status == CAN_INITSTATUS_SUCCESS) + + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) { - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); + } + + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); + } + + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + hcan->Init.SyncJumpWidth | + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Deinitializes the CAN peripheral registers to their default + * reset values. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan) +{ + /* Check CAN handle */ + if (hcan == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); + + /* Stop the CAN module */ + HAL_CAN_Stop(hcan); + + /* DeInit the low level hardware: CLOCK, NVIC */ + HAL_CAN_MspDeInit(hcan); + + /* Reset the CAN peripheral */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET); + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_RESET; + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initializes the CAN MSP. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitializes the CAN MSP. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_MspDeInit could be implemented in the user file + */ +} + + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions. + * +@verbatim + ============================================================================== + ##### Configuration functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ConfigFilter : Configure the CAN reception filters + +@endverbatim + * @{ + */ + +/** + * @brief Configures the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) +{ + uint32_t filternbrbitpos = 0U; + CAN_TypeDef *can_ip = hcan->Instance; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check the parameters */ + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterIdLow)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdHigh)); + assert_param(IS_CAN_FILTER_ID_HALFWORD(sFilterConfig->FilterMaskIdLow)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); + +#if defined(CAN2) + /* CAN1 and CAN2 are dual instances with 28 common filters banks */ + /* Select master instance to access the filter banks */ + can_ip = CAN1; + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->FilterBank)); + assert_param(IS_CAN_FILTER_BANK_DUAL(sFilterConfig->SlaveStartFilterBank)); +#else + /* CAN1 is single instance with 14 dedicated filters banks */ + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); +#endif + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + +#if defined(CAN2) + /* Select the start filter number of CAN2 slave instance */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB); + SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos); + +#endif + /* Convert filter number into bit position */ + filternbrbitpos = (1U) << sFilterConfig->FilterBank; + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == ENABLE) + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + /* Return function status */ return HAL_OK; } else { - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - /* Return function status */ return HAL_ERROR; } } -/** - * @brief Configure the CAN reception filter according to the specified - * parameters in the CAN_FilterInitStruct. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param sFilterConfig: pointer to a CAN_FilterConfTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) -{ - uint32_t filternbrbitpos = 0; - - /* Prevent unused argument(s) compilation warning */ - UNUSED(hcan); - - /* Check the parameters */ - assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); - assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); - assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); - assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); - assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); - assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); - - filternbrbitpos = ((uint32_t)1) << sFilterConfig->FilterNumber; - - /* Initialisation mode for the filter */ - CAN1->FMR |= (uint32_t)CAN_FMR_FINIT; - -#if defined(CAN2) - /* Select the start slave bank */ - CAN1->FMR &= ~((uint32_t)CAN_FMR_CAN2SB); - CAN1->FMR |= (uint32_t)(sFilterConfig->BankNumber << 8); -#endif - - /* Filter Deactivation */ - CAN1->FA1R &= ~(uint32_t)filternbrbitpos; - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - { - /* 16-bit scale for the filter */ - CAN1->FS1R &= ~(uint32_t)filternbrbitpos; - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16) | - (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | - (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh); - } - - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) - { - /* 32-bit scale for the filter */ - CAN1->FS1R |= filternbrbitpos; - /* 32-bit identifier or First 32-bit identifier */ - CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = - ((0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh) << 16) | - (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); - /* 32-bit mask or Second 32-bit identifier */ - CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = - ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | - (0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow); - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - { - /*Id/Mask mode for the filter*/ - CAN1->FM1R &= ~(uint32_t)filternbrbitpos; - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /*Identifier list mode for the filter*/ - CAN1->FM1R |= (uint32_t)filternbrbitpos; - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - { - /* FIFO 0 assignation for the filter */ - CAN1->FFA1R &= ~(uint32_t)filternbrbitpos; - } - - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO1) - { - /* FIFO 1 assignation for the filter */ - CAN1->FFA1R |= (uint32_t)filternbrbitpos; - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == ENABLE) - { - CAN1->FA1R |= filternbrbitpos; - } - - /* Leave the initialisation mode for the filter */ - CAN1->FMR &= ~((uint32_t)CAN_FMR_FINIT); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief DeInitialize the CAN peripheral registers to their default reset values. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) -{ - /* Check CAN handle */ - if(hcan == NULL) - { - return HAL_ERROR; - } - - /* Check the parameters */ - assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* DeInit the low level hardware */ - HAL_CAN_MspDeInit(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_RESET; - - /* Release Lock */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; -} - -/** - * @brief Initialize the CAN MSP. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hcan); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_CAN_MspInit could be implemented in the user file - */ -} - -/** - * @brief DeInitialize the CAN MSP. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) -{ - /* Prevent unused argument(s) compilation warning */ - UNUSED(hcan); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_CAN_MspDeInit could be implemented in the user file - */ -} - /** * @} */ -/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions +/** @defgroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions * -@verbatim +@verbatim ============================================================================== - ##### IO operation functions ##### + ##### Control functions ##### ============================================================================== [..] This section provides functions allowing to: - (+) Transmit a CAN frame message. - (+) Receive a CAN frame message. - (+) Enter CAN peripheral in sleep mode. - (+) Wake up the CAN peripheral from sleep mode. - + (+) HAL_CAN_Start : Start the CAN module + (+) HAL_CAN_Stop : Stop the CAN module + (+) HAL_CAN_RequestSleep : Request sleep mode entry. + (+) HAL_CAN_WakeUp : Wake up from sleep mode. + (+) HAL_CAN_IsSleepActive : Check is sleep mode is active. + (+) HAL_CAN_AddTxMessage : Add a message to the Tx mailboxes + and activate the corresponding + transmission request + (+) HAL_CAN_AbortTxRequest : Abort transmission request + (+) HAL_CAN_GetTxMailboxesFreeLevel : Return Tx mailboxes free level + (+) HAL_CAN_IsTxMessagePending : Check if a transmission request is + pending on the selected Tx mailbox + (+) HAL_CAN_GetRxMessage : Get a CAN frame from the Rx FIFO + (+) HAL_CAN_GetRxFifoFillLevel : Return Rx FIFO fill level + @endverbatim * @{ */ /** - * @brief Initiate and transmit a CAN frame message. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param Timeout: Timeout duration. + * @brief Start the CAN module. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; - uint32_t tickstart = 0; + uint32_t tickstart = 0U; - /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - /* Process locked */ - __HAL_LOCK(hcan); - - if(hcan->State == HAL_CAN_STATE_BUSY_RX) + if (hcan->State == HAL_CAN_STATE_READY) { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX_RX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - } - - /* Select one empty transmit mailbox */ - if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) - { - transmitmailbox = 0; - } - else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) - { - transmitmailbox = 1; - } - else if ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) - { - transmitmailbox = 2; - } + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; - if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX) - { - /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if (hcan->pTxMsg->IDE == CAN_ID_STD) - { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ - hcan->pTxMsg->RTR); - } - else - { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); - } - - /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - /* Set up the data field */ - hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | - ((uint32_t)hcan->pTxMsg->Data[2] << 16) | - ((uint32_t)hcan->pTxMsg->Data[1] << 8) | - ((uint32_t)hcan->pTxMsg->Data[0])); - hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | - ((uint32_t)hcan->pTxMsg->Data[6] << 16) | - ((uint32_t)hcan->pTxMsg->Data[5] << 8) | - ((uint32_t)hcan->pTxMsg->Data[4])); - /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; - /* Get tick */ tickstart = HAL_GetTick(); - - /* Check End of transmission flag */ - while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != RESET) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) { - if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; } } - if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_RX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + /* Return function status */ return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; + + return HAL_ERROR; + } +} + +/** + * @brief Stop the CAN module and enable access to configuration registers. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) +{ + uint32_t tickstart = 0U; + + if (hcan->State == HAL_CAN_STATE_LISTENING) + { + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == RESET) + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + return HAL_ERROR; + } + } + + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; + + return HAL_ERROR; + } +} + +/** + * @brief Request the sleep mode (low power) entry. + * When returning from this function, Sleep mode will be entered + * as soon as the current CAN activity (transmission or reception + * of a CAN frame) has been completed. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan) +{ + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Request Sleep mode */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; /* Return function status */ return HAL_ERROR; @@ -661,545 +759,1084 @@ HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) } /** - * @brief Initiate and transmit a CAN frame message in Interrupt mode. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. + * @brief Wake up from sleep mode. + * When returning with HAL_OK status from this function, Sleep mode + * is exited. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan) +{ + __IO uint32_t count = 0; + uint32_t timeout = 1000000U; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Wake up request */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + + /* Wait sleep mode is exited */ + do + { + /* Check if timeout is reached */ + if (++count > timeout) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != RESET); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } +} + +/** + * @brief Check is sleep mode is active. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Status + * - 0 : Sleep mode is not active. + * - 1 : Sleep mode is active. + */ +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan) +{ + uint32_t status = 0U; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check Sleep mode */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != RESET) + { + status = 1U; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Add a message to the first free Tx mailbox and activate the + * corresponding transmission request. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param pHeader pointer to a CAN_TxHeaderTypeDef structure. + * @param aData array containing the payload of the Tx frame. + * @param pTxMailbox pointer to a variable where the function will return + * the TxMailbox used to store the Tx message. + * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { - uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t transmitmailbox; /* Check the parameters */ - assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); - assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); - assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); - - if((hcan->State == HAL_CAN_STATE_READY) || (hcan->State == HAL_CAN_STATE_BUSY_RX)) + assert_param(IS_CAN_IDTYPE(pHeader->IDE)); + assert_param(IS_CAN_RTR(pHeader->RTR)); + assert_param(IS_CAN_DLC(pHeader->DLC)); + if (pHeader->IDE == CAN_ID_STD) { - /* Process Locked */ - __HAL_LOCK(hcan); - - /* Select one empty transmit mailbox */ - if((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) - { - transmitmailbox = 0; - } - else if((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) - { - transmitmailbox = 1; - } - else if((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) - { - transmitmailbox = 2; - } + assert_param(IS_CAN_STDID(pHeader->StdId)); + } + else + { + assert_param(IS_CAN_EXTID(pHeader->ExtId)); + } + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); - if(transmitmailbox != CAN_TXSTATUS_NOMAILBOX) + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check that all the Tx mailboxes are not full */ + if (((hcan->Instance->TSR & CAN_TSR_TME0) != RESET) || + ((hcan->Instance->TSR & CAN_TSR_TME1) != RESET) || + ((hcan->Instance->TSR & CAN_TSR_TME2) != RESET)) { + /* Select an empty transmit mailbox */ + transmitmailbox = (hcan->Instance->TSR & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + + /* Store the Tx mailbox */ + *pTxMailbox = 1U << transmitmailbox; + /* Set up the Id */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; - if(hcan->pTxMsg->IDE == CAN_ID_STD) + if (pHeader->IDE == CAN_ID_STD) { - assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ - hcan->pTxMsg->RTR); + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + pHeader->RTR); } else { - assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ - hcan->pTxMsg->IDE | \ - hcan->pTxMsg->RTR); + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + pHeader->IDE | + pHeader->RTR); } - + /* Set up the DLC */ - hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; - hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + } /* Set up the data field */ - hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | - ((uint32_t)hcan->pTxMsg->Data[2] << 16) | - ((uint32_t)hcan->pTxMsg->Data[1] << 8) | - ((uint32_t)hcan->pTxMsg->Data[0])); - hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | - ((uint32_t)hcan->pTxMsg->Data[6] << 16) | - ((uint32_t)hcan->pTxMsg->Data[5] << 8) | - ((uint32_t)hcan->pTxMsg->Data[4])); - - if(hcan->State == HAL_CAN_STATE_BUSY_RX) - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX_RX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Process Unlocked */ - __HAL_UNLOCK(hcan); - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - /* - Enable Transmit mailbox empty Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR | - CAN_IT_TME ); - + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + ((uint32_t)aData[3] << CAN_TDL0R_DATA3_Pos) | + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + /* Request transmission */ - hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } else { - return HAL_BUSY; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; } - - return HAL_OK; } /** - * @brief Receive a correct CAN frame. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber: FIFO number. - * @param Timeout: Timeout duration. + * @brief Abort transmission requests + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of the Tx Mailboxes to abort. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) { - uint32_t tickstart = 0; - - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - /* Process locked */ - __HAL_LOCK(hcan); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX_RX; + /* Check Tx Mailbox 0 */ + if ((TxMailboxes & CAN_TX_MAILBOX0) != RESET) + { + /* Add cancellation request for Tx Mailbox 0 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ0); + } + + /* Check Tx Mailbox 1 */ + if ((TxMailboxes & CAN_TX_MAILBOX1) != RESET) + { + /* Add cancellation request for Tx Mailbox 1 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ1); + } + + /* Check Tx Mailbox 2 */ + if ((TxMailboxes & CAN_TX_MAILBOX2) != RESET) + { + /* Add cancellation request for Tx Mailbox 2 */ + SET_BIT(hcan->Instance->TSR, CAN_TSR_ABRQ2); + } + + /* Return function status */ + return HAL_OK; } else { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_RX; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Check pending message */ - while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0) +} + +/** + * @brief Return Tx Mailboxes free level: number of free Tx Mailboxes. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Number of free Tx Mailboxes. + */ +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan) +{ + uint32_t freelevel = 0U; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) { - /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != RESET) { - if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + freelevel++; + } + + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != RESET) + { + freelevel++; + } + + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != RESET) + { + freelevel++; + } + } + + /* Return Tx Mailboxes free level */ + return freelevel; +} + +/** + * @brief Check if a transmission request is pending on the selected Tx + * Mailboxes. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailboxes List of Tx Mailboxes to check. + * This parameter can be any combination of @arg CAN_Tx_Mailboxes. + * @retval Status + * - 0 : No pending transmission request on any selected Tx Mailboxes. + * - 1 : Pending transmission request on at least one of the selected + * Tx Mailbox. + */ +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes) +{ + uint32_t status = 0U; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX_LIST(TxMailboxes)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check pending transmission request on the selected Tx Mailboxes */ + if ((hcan->Instance->TSR & (TxMailboxes << CAN_TSR_TME0_Pos)) != (TxMailboxes << CAN_TSR_TME0_Pos)) + { + status = 1U; + } + } + + /* Return status */ + return status; +} + +/** + * @brief Return timestamp of Tx message sent, if time triggered communication + mode is enabled. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param TxMailbox Tx Mailbox where the timestamp of message sent will be + * read. + * This parameter can be one value of @arg CAN_Tx_Mailboxes. + * @retval Timestamp of message sent from Tx Mailbox. + */ +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox) +{ + uint32_t timestamp = 0U; + uint32_t transmitmailbox; + + /* Check function parameters */ + assert_param(IS_CAN_TX_MAILBOX(TxMailbox)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Select the Tx mailbox */ + transmitmailbox = POSITION_VAL(TxMailbox); + + /* Get timestamp */ + timestamp = (hcan->Instance->sTxMailBox[transmitmailbox].TDTR & CAN_TDT0R_TIME) >> CAN_TDT0R_TIME_Pos; + } + + /* Return the timestamp */ + return timestamp; +} + +/** + * @brief Get an CAN frame from the Rx FIFO zone into the message RAM. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Fifo number of the received message to be read. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @param pHeader pointer to a CAN_RxHeaderTypeDef structure where the header + * of the Rx frame will be stored. + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == RESET) { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + + return HAL_ERROR; } } - } - - /* Get the Id */ - hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (hcan->pRxMsg->IDE == CAN_ID_STD) - { - hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); - } - else - { - hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); - } - - hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - /* Get the DLC */ - hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; - /* Get the FMI */ - hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); - /* Get the data field */ - hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; - hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); - hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); - hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); - hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; - hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); - hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); - hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); - - /* Release the FIFO */ - if(FIFONumber == CAN_FIFO0) - { - /* Release FIFO0 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - } - else /* FIFONumber == CAN_FIFO1 */ - { - /* Release FIFO1 */ - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - } - - if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - } - - /* Process unlocked */ - __HAL_UNLOCK(hcan); + else if (RxFifo == CAN_RX_FIFO1) /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == RESET) + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; - /* Return function status */ - return HAL_OK; + return HAL_ERROR; + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + if (pHeader->IDE == CAN_ID_STD) + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + } + else + { + pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos; + } + pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos; + pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos; + pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos; + pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos; + + /* Get the data */ + aData[0] = (CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos; + aData[1] = (CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos; + aData[2] = (CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos; + aData[3] = (CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos; + aData[4] = (CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos; + aData[5] = (CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos; + aData[6] = (CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos; + aData[7] = (CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos; + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + } + else if (RxFifo == CAN_RX_FIFO1) /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + } + + /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + return HAL_ERROR; + } } /** - * @brief Receive a correct CAN frame in Interrupt mode. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber: FIFO number. + * @brief Return Rx FIFO fill level. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param RxFifo Rx FIFO. + * This parameter can be a value of @arg CAN_receive_FIFO_number. + * @retval Number of messages available in Rx FIFO. + */ +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) +{ + uint32_t filllevel = 0U; + + /* Check function parameters */ + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + if (RxFifo == CAN_RX_FIFO0) + { + filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; + } + else /* RxFifo == CAN_RX_FIFO1 */ + { + filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; + } + } + + /* Return Rx FIFO fill level */ + return filllevel; +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * +@verbatim + ============================================================================== + ##### Interrupts management ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) HAL_CAN_ActivateNotification : Enable interrupts + (+) HAL_CAN_DeactivateNotification : Disable interrupts + (+) HAL_CAN_IRQHandler : Handles CAN interrupt request + +@endverbatim + * @{ + */ + +/** + * @brief Enable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) { - /* Check the parameters */ - assert_param(IS_CAN_FIFO(FIFONumber)); - - if((hcan->State == HAL_CAN_STATE_READY) || (hcan->State == HAL_CAN_STATE_BUSY_TX)) + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) { - /* Process locked */ - __HAL_LOCK(hcan); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX_RX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_RX; - } - - /* Set CAN error code to none */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - - /* Enable interrupts: */ - /* - Enable Error warning Interrupt */ - /* - Enable Error passive Interrupt */ - /* - Enable Bus-off Interrupt */ - /* - Enable Last error code Interrupt */ - /* - Enable Error Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - if(FIFONumber == CAN_FIFO0) - { - /* Enable FIFO 0 message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FMP0); - } - else - { - /* Enable FIFO 1 message pending Interrupt */ - __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FMP1); - } - + /* Return function status */ + return HAL_OK; } else { - return HAL_BUSY; - } - - /* Return function status */ - return HAL_OK; -} + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; -/** - * @brief Enter the Sleep (low power) mode. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) -{ - uint32_t tickstart = 0; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Request Sleep mode */ - hcan->Instance->MCR = (((hcan->Instance->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); - - /* Sleep mode status */ - if ((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ return HAL_ERROR; } - - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Wait the acknowledge */ - while((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK) - { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State = HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } - } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Wake up the CAN peripheral from sleep mode (after that the CAN peripheral - * is in the normal mode). - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @brief Disable interrupts. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. - * @retval HAL status. + * @param InactiveITs indicates which interrupts will be disabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status */ -HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) { - uint32_t tickstart = 0; - - /* Process locked */ - __HAL_LOCK(hcan); - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY; - - /* Wake up request */ - hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_SLEEP; + /* Check function parameters */ + assert_param(IS_CAN_IT(InactiveITs)); - /* Get tick */ - tickstart = HAL_GetTick(); - - /* Sleep mode status */ - while((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK) + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) { - if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) - { - hcan->State= HAL_CAN_STATE_TIMEOUT; - /* Process unlocked */ - __HAL_UNLOCK(hcan); - return HAL_TIMEOUT; - } - } - if((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK) - { - /* Process unlocked */ - __HAL_UNLOCK(hcan); + /* Disable the selected interrupts */ + __HAL_CAN_DISABLE_IT(hcan, InactiveITs); /* Return function status */ + return HAL_OK; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + return HAL_ERROR; } - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - - /* Process unlocked */ - __HAL_UNLOCK(hcan); - - /* Return function status */ - return HAL_OK; } /** - * @brief Handle CAN interrupt request. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @brief Handles CAN interrupt request + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { - /* Check End of transmission flag */ - if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) + uint32_t errorcode = HAL_CAN_ERROR_NONE; + uint32_t interrupts = READ_REG(hcan->Instance->IER); + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + uint32_t esrflags = READ_REG(hcan->Instance->ESR); + + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != RESET) { - if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || - (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != RESET) { - /* Call transmit function */ - CAN_Transmit_IT(hcan); - } - } - - /* Check End of reception flag for FIFO0 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO0); - } - - /* Check End of reception flag for FIFO1 */ - if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && - (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0)) - { - /* Call receive function */ - CAN_Receive_IT(hcan, CAN_FIFO1); - } - - /* Check Error Warning Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EWG error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EWG; - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to EPV error */ - hcan->ErrorCode |= HAL_CAN_ERROR_EPV; - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-Off Flag */ - if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - /* Set CAN error code to BOF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BOF; - /* No need for clear of Bus-Off Flag as read-only */ - } - - /* Check Last error code Flag */ - if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && - (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) - { - switch(hcan->Instance->ESR & CAN_ESR_LEC) - { - case(CAN_ESR_LEC_0): - /* Set CAN error code to STF error */ - hcan->ErrorCode |= HAL_CAN_ERROR_STF; - break; - case(CAN_ESR_LEC_1): - /* Set CAN error code to FOR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_FOR; - break; - case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): - /* Set CAN error code to ACK error */ - hcan->ErrorCode |= HAL_CAN_ERROR_ACK; - break; - case(CAN_ESR_LEC_2): - /* Set CAN error code to BR error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BR; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): - /* Set CAN error code to BD error */ - hcan->ErrorCode |= HAL_CAN_ERROR_BD; - break; - case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - hcan->ErrorCode |= HAL_CAN_ERROR_CRC; - break; - default: - break; + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); + + if ((tsrflags & CAN_TSR_TXOK0) != RESET) + { + /* Transmission Mailbox 0 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + } + else if ((tsrflags & CAN_TSR_TERR0) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + } + else + { + /* Transmission Mailbox 0 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + } + } } - /* Clear Last error code Flag */ - hcan->Instance->ESR &= ~(CAN_ESR_LEC); + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != RESET) + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + + if ((tsrflags & CAN_TSR_TXOK1) != RESET) + { + /* Transmission Mailbox 1 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + } + else if ((tsrflags & CAN_TSR_TERR1) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + } + else + { + /* Transmission Mailbox 1 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != RESET) + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + + if ((tsrflags & CAN_TSR_TXOK2) != RESET) + { + /* Transmission Mailbox 2 complete callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + } + else if ((tsrflags & CAN_TSR_TERR2) != RESET) + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + } + else + { + /* Transmission Mailbox 2 abort callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + } + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != RESET) + { + if ((rf0rflags & CAN_RF0R_FOVR0) != RESET) + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != RESET) + { + if ((rf0rflags & CAN_RF0R_FULL0) != RESET) + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + + /* Receive FIFO 0 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != RESET) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != RESET) + { + /* Receive FIFO 0 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != RESET) + { + if ((rf1rflags & CAN_RF1R_FOVR1) != RESET) + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != RESET) + { + if ((rf1rflags & CAN_RF1R_FULL1) != RESET) + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + + /* Receive FIFO 1 full Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != RESET) + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != RESET) + { + /* Receive FIFO 1 mesage pending Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != RESET) + { + if ((msrflags & CAN_MSR_SLAKI) != RESET) + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + + /* Sleep Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != RESET) + { + if ((msrflags & CAN_MSR_WKUI) != RESET) + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + + /* WakeUp Callback */ + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != RESET) + { + if ((msrflags & CAN_MSR_ERRI) != RESET) + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != RESET) && + ((esrflags & CAN_ESR_EWGF) != RESET)) + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != RESET) && + ((esrflags & CAN_ESR_EPVF) != RESET)) + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != RESET) && + ((esrflags & CAN_ESR_BOFF) != RESET)) + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != RESET) && + ((esrflags & CAN_ESR_LEC) != RESET)) + { + switch (esrflags & CAN_ESR_LEC) + { + case (CAN_ESR_LEC_0): + /* Set CAN error code to Stuff error */ + errorcode |= HAL_CAN_ERROR_STF; + break; + case (CAN_ESR_LEC_1): + /* Set CAN error code to Form error */ + errorcode |= HAL_CAN_ERROR_FOR; + break; + case (CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to Acknowledgement error */ + errorcode |= HAL_CAN_ERROR_ACK; + break; + case (CAN_ESR_LEC_2): + /* Set CAN error code to Bit recessive error */ + errorcode |= HAL_CAN_ERROR_BR; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to Bit Dominant error */ + errorcode |= HAL_CAN_ERROR_BD; + break; + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); } /* Call the Error call Back in case of Errors */ - if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + if (errorcode != HAL_CAN_ERROR_NONE) { - /* Clear ERRI bit */ - SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); - /* Set the CAN state ready to be able to start again the process */ - hcan->State = HAL_CAN_STATE_READY; + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; + /* Call Error callback function */ + /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); - } + } } /** - * @brief Transmission complete callback in non-blocking mode. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group5 Callback functions + * @brief CAN Callback functions + * +@verbatim + ============================================================================== + ##### Callback functions ##### + ============================================================================== + [..] + This subsection provides the following callback functions: + (+) HAL_CAN_TxMailbox0CompleteCallback + (+) HAL_CAN_TxMailbox1CompleteCallback + (+) HAL_CAN_TxMailbox2CompleteCallback + (+) HAL_CAN_TxMailbox0AbortCallback + (+) HAL_CAN_TxMailbox1AbortCallback + (+) HAL_CAN_TxMailbox2AbortCallback + (+) HAL_CAN_RxFifo0MsgPendingCallback + (+) HAL_CAN_RxFifo0FullCallback + (+) HAL_CAN_RxFifo1MsgPendingCallback + (+) HAL_CAN_RxFifo1FullCallback + (+) HAL_CAN_SleepCallback + (+) HAL_CAN_WakeUpFromRxMsgCallback + (+) HAL_CAN_ErrorCallback + +@endverbatim + * @{ + */ + +/** + * @brief Transmission Mailbox 0 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_CAN_TxCpltCallback could be implemented in the user file + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file */ } /** - * @brief Reception complete callback in non-blocking mode. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @brief Transmission Mailbox 1 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ -__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) { /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_CAN_RxCpltCallback could be implemented in the user file + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 complete callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 0 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 1 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Transmission Mailbox 2 Cancellation callback. + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 0 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Rx FIFO 1 message pending callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the + user file + */ +} + +/** + * @brief Rx FIFO 1 full callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + +/** + * @brief Sleep callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + +/** + * @brief WakeUp from Rx message callback. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file */ } /** * @brief Error CAN callback. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ @@ -1208,7 +1845,7 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) /* Prevent unused argument(s) compilation warning */ UNUSED(hcan); - /* NOTE : This function should not be modified, when the callback is needed, + /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_ErrorCallback could be implemented in the user file */ } @@ -1217,45 +1854,94 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions +/** @defgroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * -@verbatim +@verbatim ============================================================================== ##### Peripheral State and Error functions ##### ============================================================================== [..] This subsection provides functions allowing to : - (+) Check the CAN state. - (+) Check CAN Errors detected during interrupt process. - + (+) HAL_CAN_GetState() : Return the CAN state. + (+) HAL_CAN_GetError() : Return the CAN error codes if any. + (+) HAL_CAN_ResetError(): Reset the CAN error codes if any. + @endverbatim * @{ */ /** - * @brief Return the CAN handle state. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @brief Return the CAN state. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL state */ -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan) { - /* Return CAN handle state */ - return hcan->State; + HAL_CAN_StateTypeDef state = hcan->State; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Check sleep mode acknowledge flag */ + if ((hcan->Instance->MSR & CAN_MSR_SLAK) != RESET) + { + /* Sleep mode is active */ + state = HAL_CAN_STATE_SLEEP_ACTIVE; + } + /* Check sleep mode request flag */ + else if ((hcan->Instance->MCR & CAN_MCR_SLEEP) != RESET) + { + /* Sleep mode request is pending */ + state = HAL_CAN_STATE_SLEEP_PENDING; + } + } + + /* Return CAN state */ + return state; } /** * @brief Return the CAN error code. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval CAN Error Code */ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) { + /* Return CAN error code */ return hcan->ErrorCode; } +/** + * @brief Reset the CAN error code. + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan) +{ + HAL_StatusTypeDef status = HAL_OK; + + if ((hcan->State == HAL_CAN_STATE_READY) || + (hcan->State == HAL_CAN_STATE_LISTENING)) + { + /* Reset CAN error code */ + hcan->ErrorCode = 0U; + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + + status = HAL_ERROR; + } + + /* Return the status */ + return status; +} + /** * @} */ @@ -1264,145 +1950,14 @@ uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) * @} */ -/** @defgroup CAN_Private_Functions CAN Private Functions - * @{ - */ -/** - * @brief Initiate and transmit a CAN frame message. - * @param hcan: pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status - */ -static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) -{ - /* Disable Transmit mailbox empty Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); - - if(hcan->State == HAL_CAN_STATE_BUSY_TX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } - - if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_RX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - } - - /* Transmission complete callback */ - HAL_CAN_TxCpltCallback(hcan); - - return HAL_OK; -} - -/** - * @brief Receive a correct CAN frame. - * @param hcan: Pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @param FIFONumber: Specify the FIFO number - * @retval HAL status - */ -static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) -{ - /* Get the Id */ - hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - if (hcan->pRxMsg->IDE == CAN_ID_STD) - { - hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); - } - else - { - hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); - } - - hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; - /* Get the DLC */ - hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; - /* Get the FMI */ - hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); - /* Get the data field */ - hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; - hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); - hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); - hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); - hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; - hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); - hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); - hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); - /* Release the FIFO */ - /* Release FIFO0 */ - if (FIFONumber == CAN_FIFO0) - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); - - /* Disable FIFO 0 message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FMP0); - } - /* Release FIFO1 */ - else /* FIFONumber == CAN_FIFO1 */ - { - __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); - - /* Disable FIFO 1 message pending Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FMP1); - } - - if(hcan->State == HAL_CAN_STATE_BUSY_RX) - { - /* Disable interrupts: */ - /* - Disable Error warning Interrupt */ - /* - Disable Error passive Interrupt */ - /* - Disable Bus-off Interrupt */ - /* - Disable Last error code Interrupt */ - /* - Disable Error Interrupt */ - __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | - CAN_IT_EPV | - CAN_IT_BOF | - CAN_IT_LEC | - CAN_IT_ERR ); - } - - if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) - { - /* Disable CAN state */ - hcan->State = HAL_CAN_STATE_BUSY_TX; - } - else - { - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_READY; - } - - /* Receive complete callback */ - HAL_CAN_RxCpltCallback(hcan); - - /* Return function status */ - return HAL_OK; -} -/** - * @} - */ - #endif /* HAL_CAN_MODULE_ENABLED */ + /** * @} */ +#endif /* CAN1 */ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.h index f71bf09454..87a0fb0ba8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_can.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CAN HAL module. ****************************************************************************** * @attention @@ -36,11 +34,11 @@ */ /* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L4xx_CAN_H -#define __STM32L4xx_CAN_H +#ifndef STM32L4xx_HAL_CAN_H +#define STM32L4xx_HAL_CAN_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif /* Includes ------------------------------------------------------------------*/ @@ -50,6 +48,7 @@ * @{ */ +#if defined (CAN1) /** @addtogroup CAN * @{ */ @@ -58,63 +57,60 @@ /** @defgroup CAN_Exported_Types CAN Exported Types * @{ */ - /** * @brief HAL State structures definition */ typedef enum { - HAL_CAN_STATE_RESET = 0x00, /*!< CAN not yet initialized or disabled */ - HAL_CAN_STATE_READY = 0x01, /*!< CAN initialized and ready for use */ - HAL_CAN_STATE_BUSY = 0x02, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX = 0x12, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_RX = 0x22, /*!< CAN process is ongoing */ - HAL_CAN_STATE_BUSY_TX_RX = 0x32, /*!< CAN process is ongoing */ - HAL_CAN_STATE_TIMEOUT = 0x03, /*!< Timeout state */ - HAL_CAN_STATE_ERROR = 0x04 /*!< CAN error state */ + HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ + HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ + HAL_CAN_STATE_LISTENING = 0x02U, /*!< CAN receive process is ongoing */ + HAL_CAN_STATE_SLEEP_PENDING = 0x03U, /*!< CAN sleep request is pending */ + HAL_CAN_STATE_SLEEP_ACTIVE = 0x04U, /*!< CAN sleep mode is active */ + HAL_CAN_STATE_ERROR = 0x05U /*!< CAN error state */ -}HAL_CAN_StateTypeDef; +} HAL_CAN_StateTypeDef; /** * @brief CAN init structure definition */ typedef struct { - uint32_t Prescaler; /*!< Specifies the length of a time quantum. - This parameter must be a number between Min_Data = 1 and Max_Data = 1024 */ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024. */ - uint32_t Mode; /*!< Specifies the CAN operating mode. - This parameter can be a value of @ref CAN_operating_mode */ + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ - uint32_t SJW; /*!< Specifies the maximum number of time quanta - the CAN hardware is allowed to lengthen or - shorten a bit to perform resynchronization. - This parameter can be a value of @ref CAN_synchronisation_jump_width */ + uint32_t SyncJumpWidth; /*!< Specifies the maximum number of time quanta the CAN hardware + is allowed to lengthen or shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ - uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + uint32_t TimeSeg1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ - uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. - This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ + uint32_t TimeSeg2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ - uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. - This parameter can be set to ENABLE or DISABLE. */ + FunctionalState TimeTriggeredMode; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. - This parameter can be set to ENABLE or DISABLE */ + FunctionalState AutoBusOff; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. - This parameter can be set to ENABLE or DISABLE */ + FunctionalState AutoWakeUp; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. - This parameter can be set to ENABLE or DISABLE */ + FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t RFLM; /*!< Enable or disable the receive FIFO Locked mode. - This parameter can be set to ENABLE or DISABLE */ + FunctionalState ReceiveFifoLocked; /*!< Enable or disable the Receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE. */ - uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. - This parameter can be set to ENABLE or DISABLE */ -}CAN_InitTypeDef; + FunctionalState TransmitFifoPriority;/*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE. */ + +} CAN_InitTypeDef; /** * @brief CAN filter configuration structure definition @@ -123,27 +119,30 @@ typedef struct { uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, according to the mode (MSBs for a 32-bit configuration, first one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, according to the mode (LSBs for a 32-bit configuration, second one for a 16-bit configuration). - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ - uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter. + uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1U) which will be assigned to the filter. This parameter can be a value of @ref CAN_filter_FIFO */ - uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. - This parameter must be a number between Min_Data = 0 and Max_Data = 27 */ + uint32_t FilterBank; /*!< Specifies the filter bank which will be initialized. + For single CAN instance(14 dedicated filter banks), + this parameter must be a number between Min_Data = 0 and Max_Data = 13. + For dual CAN instances(28 filter banks shared), + this parameter must be a number between Min_Data = 0 and Max_Data = 27. */ uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. This parameter can be a value of @ref CAN_filter_mode */ @@ -152,23 +151,27 @@ typedef struct This parameter can be a value of @ref CAN_filter_scale */ uint32_t FilterActivation; /*!< Enable or disable the filter. - This parameter can be set to ENABLE or DISABLE */ + This parameter can be set to ENABLE or DISABLE. */ - uint32_t BankNumber; /*!< Select the start slave bank filter. - This parameter must be a number between Min_Data = 0 and Max_Data = 28 */ + uint32_t SlaveStartFilterBank; /*!< Select the start filter bank for the slave CAN instance. + For single CAN instances, this parameter is meaningless. + For dual CAN instances, all filter banks with lower index are assigned to master + CAN instance, whereas all filter banks with greater index are assigned to slave + CAN instance. + This parameter must be a number between Min_Data = 0 and Max_Data = 27. */ -}CAN_FilterConfTypeDef; +} CAN_FilterTypeDef; /** - * @brief CAN Tx message structure definition + * @brief CAN Tx message header structure definition */ typedef struct { uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. This parameter can be a value of @ref CAN_identifier_type */ @@ -177,70 +180,67 @@ typedef struct This parameter can be a value of @ref CAN_remote_transmission_request */ uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be transmitted. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + FunctionalState TransmitGlobalTime; /*!< Specifies whether the timestamp counter value captured on start + of frame transmission, is sent in DATA6 and DATA7 replacing pData[6] and pData[7]. + @note: Time Triggered Communication Mode must be enabled. + @note: DLC must be programmed as 8 bytes, in order these 2 bytes are sent. + This parameter can be set to ENABLE or DISABLE. */ -}CanTxMsgTypeDef; +} CAN_TxHeaderTypeDef; /** - * @brief CAN Rx message structure definition + * @brief CAN Rx message header structure definition */ typedef struct { - uint32_t StdId; /*!< Specifies the standard identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF. */ - uint32_t ExtId; /*!< Specifies the extended identifier. - This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF. */ - uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. - This parameter can be a value of @ref CAN_identifier_type */ + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ - uint32_t RTR; /*!< Specifies the type of frame for the received message. - This parameter can be a value of @ref CAN_remote_transmission_request */ + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ - uint32_t DLC; /*!< Specifies the length of the frame that will be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8. */ - uint8_t Data[8]; /*!< Contains the data to be received. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + uint32_t Timestamp; /*!< Specifies the timestamp counter value captured on start of frame reception. + @note: Time Triggered Communication Mode must be enabled. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFFFF. */ - uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. - This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + uint32_t FilterMatchIndex; /*!< Specifies the index of matching acceptance filter element. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF. */ - uint32_t FIFONumber; /*!< Specifies the receive FIFO number. - This parameter can be CAN_FIFO0 or CAN_FIFO1 */ - -}CanRxMsgTypeDef; +} CAN_RxHeaderTypeDef; /** * @brief CAN handle Structure definition */ -typedef struct +typedef struct __CAN_HandleTypeDef { - CAN_TypeDef *Instance; /*!< Register base address */ + CAN_TypeDef *Instance; /*!< Register base address */ - CAN_InitTypeDef Init; /*!< CAN required parameters */ + CAN_InitTypeDef Init; /*!< CAN required parameters */ - CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure */ + __IO uint32_t ErrorCode; /*!< CAN Error code. + This parameter can be a value of @ref CAN_Error_Code */ - __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ - - HAL_LockTypeDef Lock; /*!< CAN locking object */ - - __IO uint32_t ErrorCode; /*!< CAN Error code */ - -}CAN_HandleTypeDef; +} CAN_HandleTypeDef; /** * @} */ /* Exported constants --------------------------------------------------------*/ + /** @defgroup CAN_Exported_Constants CAN Exported Constants * @{ */ @@ -248,25 +248,39 @@ typedef struct /** @defgroup CAN_Error_Code CAN Error Code * @{ */ -#define HAL_CAN_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ -#define HAL_CAN_ERROR_EWG ((uint32_t)0x00000001) /*!< EWG error */ -#define HAL_CAN_ERROR_EPV ((uint32_t)0x00000002) /*!< EPV error */ -#define HAL_CAN_ERROR_BOF ((uint32_t)0x00000004) /*!< BOF error */ -#define HAL_CAN_ERROR_STF ((uint32_t)0x00000008) /*!< Stuff error */ -#define HAL_CAN_ERROR_FOR ((uint32_t)0x00000010) /*!< Form error */ -#define HAL_CAN_ERROR_ACK ((uint32_t)0x00000020) /*!< Acknowledgment error */ -#define HAL_CAN_ERROR_BR ((uint32_t)0x00000040) /*!< Bit recessive */ -#define HAL_CAN_ERROR_BD ((uint32_t)0x00000080) /*!< LEC dominant */ -#define HAL_CAN_ERROR_CRC ((uint32_t)0x00000100) /*!< LEC transfer error */ +#define HAL_CAN_ERROR_NONE (0x00000000U) /*!< No error */ +#define HAL_CAN_ERROR_EWG (0x00000001U) /*!< Protocol Error Warning */ +#define HAL_CAN_ERROR_EPV (0x00000002U) /*!< Error Passive */ +#define HAL_CAN_ERROR_BOF (0x00000004U) /*!< Bus-off error */ +#define HAL_CAN_ERROR_STF (0x00000008U) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR (0x00000010U) /*!< Form error */ +#define HAL_CAN_ERROR_ACK (0x00000020U) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR (0x00000040U) /*!< Bit recessive error */ +#define HAL_CAN_ERROR_BD (0x00000080U) /*!< Bit dominant error */ +#define HAL_CAN_ERROR_CRC (0x00000100U) /*!< CRC error */ +#define HAL_CAN_ERROR_RX_FOV0 (0x00000200U) /*!< Rx FIFO0 overrun error */ +#define HAL_CAN_ERROR_RX_FOV1 (0x00000400U) /*!< Rx FIFO1 overrun error */ +#define HAL_CAN_ERROR_TX_ALST0 (0x00000800U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR0 (0x00001000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST1 (0x00002000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR1 (0x00004000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TX_ALST2 (0x00008000U) /*!< TxMailbox 0 transmit failure due to arbitration lost */ +#define HAL_CAN_ERROR_TX_TERR2 (0x00010000U) /*!< TxMailbox 1 transmit failure due to tranmit error */ +#define HAL_CAN_ERROR_TIMEOUT (0x00020000U) /*!< Timeout error */ +#define HAL_CAN_ERROR_NOT_INITIALIZED (0x00040000U) /*!< Peripheral not initialized */ +#define HAL_CAN_ERROR_NOT_READY (0x00080000U) /*!< Peripheral not ready */ +#define HAL_CAN_ERROR_NOT_STARTED (0x00100000U) /*!< Peripheral not started */ +#define HAL_CAN_ERROR_PARAM (0x00200000U) /*!< Parameter error */ + /** * @} */ -/** @defgroup CAN_InitStatus CAN initialization Status +/** @defgroup CAN_InitStatus CAN InitStatus * @{ */ -#define CAN_INITSTATUS_FAILED ((uint32_t)0x00000000) /*!< CAN initialization failed */ -#define CAN_INITSTATUS_SUCCESS ((uint32_t)0x00000001) /*!< CAN initialization OK */ +#define CAN_INITSTATUS_FAILED (0x00000000U) /*!< CAN initialization failed */ +#define CAN_INITSTATUS_SUCCESS (0x00000001U) /*!< CAN initialization OK */ /** * @} */ @@ -274,7 +288,7 @@ typedef struct /** @defgroup CAN_operating_mode CAN Operating Mode * @{ */ -#define CAN_MODE_NORMAL ((uint32_t)0x00000000) /*!< Normal mode */ +#define CAN_MODE_NORMAL (0x00000000U) /*!< Normal mode */ #define CAN_MODE_LOOPBACK ((uint32_t)CAN_BTR_LBKM) /*!< Loopback mode */ #define CAN_MODE_SILENT ((uint32_t)CAN_BTR_SILM) /*!< Silent mode */ #define CAN_MODE_SILENT_LOOPBACK ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM)) /*!< Loopback combined with silent mode */ @@ -286,7 +300,7 @@ typedef struct /** @defgroup CAN_synchronisation_jump_width CAN Synchronization Jump Width * @{ */ -#define CAN_SJW_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_SJW_1TQ (0x00000000U) /*!< 1 time quantum */ #define CAN_SJW_2TQ ((uint32_t)CAN_BTR_SJW_0) /*!< 2 time quantum */ #define CAN_SJW_3TQ ((uint32_t)CAN_BTR_SJW_1) /*!< 3 time quantum */ #define CAN_SJW_4TQ ((uint32_t)CAN_BTR_SJW) /*!< 4 time quantum */ @@ -297,7 +311,7 @@ typedef struct /** @defgroup CAN_time_quantum_in_bit_segment_1 CAN Time Quantum in Bit Segment 1 * @{ */ -#define CAN_BS1_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_BS1_1TQ (0x00000000U) /*!< 1 time quantum */ #define CAN_BS1_2TQ ((uint32_t)CAN_BTR_TS1_0) /*!< 2 time quantum */ #define CAN_BS1_3TQ ((uint32_t)CAN_BTR_TS1_1) /*!< 3 time quantum */ #define CAN_BS1_4TQ ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0)) /*!< 4 time quantum */ @@ -320,7 +334,7 @@ typedef struct /** @defgroup CAN_time_quantum_in_bit_segment_2 CAN Time Quantum in Bit Segment 2 * @{ */ -#define CAN_BS2_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_BS2_1TQ (0x00000000U) /*!< 1 time quantum */ #define CAN_BS2_2TQ ((uint32_t)CAN_BTR_TS2_0) /*!< 2 time quantum */ #define CAN_BS2_3TQ ((uint32_t)CAN_BTR_TS2_1) /*!< 3 time quantum */ #define CAN_BS2_4TQ ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0)) /*!< 4 time quantum */ @@ -335,8 +349,8 @@ typedef struct /** @defgroup CAN_filter_mode CAN Filter Mode * @{ */ -#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00) /*!< Identifier mask mode */ -#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01) /*!< Identifier list mode */ +#define CAN_FILTERMODE_IDMASK (0x00000000U) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST (0x00000001U) /*!< Identifier list mode */ /** * @} */ @@ -344,8 +358,8 @@ typedef struct /** @defgroup CAN_filter_scale CAN Filter Scale * @{ */ -#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00) /*!< Two 16-bit filters */ -#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01) /*!< One 32-bit filter */ +#define CAN_FILTERSCALE_16BIT (0x00000000U) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT (0x00000001U) /*!< One 32-bit filter */ /** * @} */ @@ -353,8 +367,8 @@ typedef struct /** @defgroup CAN_filter_FIFO CAN Filter FIFO * @{ */ -#define CAN_FILTER_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */ -#define CAN_FILTER_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */ +#define CAN_FILTER_FIFO0 (0x00000000U) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 (0x00000001U) /*!< Filter FIFO 1 assignment for filter x */ /** * @} */ @@ -362,8 +376,8 @@ typedef struct /** @defgroup CAN_identifier_type CAN Identifier Type * @{ */ -#define CAN_ID_STD ((uint32_t)0x00000000) /*!< Standard Id */ -#define CAN_ID_EXT ((uint32_t)0x00000004) /*!< Extended Id */ +#define CAN_ID_STD (0x00000000U) /*!< Standard Id */ +#define CAN_ID_EXT (0x00000004U) /*!< Extended Id */ /** * @} */ @@ -371,17 +385,27 @@ typedef struct /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request * @{ */ -#define CAN_RTR_DATA ((uint32_t)0x00000000) /*!< Data frame */ -#define CAN_RTR_REMOTE ((uint32_t)0x00000002) /*!< Remote frame */ +#define CAN_RTR_DATA (0x00000000U) /*!< Data frame */ +#define CAN_RTR_REMOTE (0x00000002U) /*!< Remote frame */ /** * @} */ -/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number +/** @defgroup CAN_receive_FIFO_number CAN Receive FIFO Number * @{ */ -#define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */ -#define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */ +#define CAN_RX_FIFO0 (0x00000000U) /*!< CAN receive FIFO 0 */ +#define CAN_RX_FIFO1 (0x00000001U) /*!< CAN receive FIFO 1 */ +/** + * @} + */ + +/** @defgroup CAN_Tx_Mailboxes CAN Tx Mailboxes + * @{ + */ +#define CAN_TX_MAILBOX0 (0x00000001U) /*!< Tx Mailbox 0 */ +#define CAN_TX_MAILBOX1 (0x00000002U) /*!< Tx Mailbox 1 */ +#define CAN_TX_MAILBOX2 (0x00000004U) /*!< Tx Mailbox 2 */ /** * @} */ @@ -389,314 +413,301 @@ typedef struct /** @defgroup CAN_flags CAN Flags * @{ */ -/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() - and CAN_ClearFlag() functions. */ -/* If the flag is 0x1XXXXXXX, it means that it can only be used with - CAN_GetFlagStatus() function. */ - /* Transmit Flags */ -#define CAN_FLAG_RQCP0 ((uint32_t)0x00000500) /*!< Request MailBox0 flag */ -#define CAN_FLAG_RQCP1 ((uint32_t)0x00000508) /*!< Request MailBox1 flag */ -#define CAN_FLAG_RQCP2 ((uint32_t)0x00000510) /*!< Request MailBox2 flag */ -#define CAN_FLAG_TXOK0 ((uint32_t)0x00000501) /*!< Transmission OK MailBox0 flag */ -#define CAN_FLAG_TXOK1 ((uint32_t)0x00000509) /*!< Transmission OK MailBox1 flag */ -#define CAN_FLAG_TXOK2 ((uint32_t)0x00000511) /*!< Transmission OK MailBox2 flag */ -#define CAN_FLAG_TME0 ((uint32_t)0x0000051A) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME1 ((uint32_t)0x0000051B) /*!< Transmit mailbox 0 empty flag */ -#define CAN_FLAG_TME2 ((uint32_t)0x0000051C) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_RQCP0 (0x00000500U) /*!< Request complete MailBox 0 flag */ +#define CAN_FLAG_TXOK0 (0x00000501U) /*!< Transmission OK MailBox 0 flag */ +#define CAN_FLAG_ALST0 (0x00000502U) /*!< Arbitration Lost MailBox 0 flag */ +#define CAN_FLAG_TERR0 (0x00000503U) /*!< Transmission error MailBox 0 flag */ +#define CAN_FLAG_RQCP1 (0x00000508U) /*!< Request complete MailBox1 flag */ +#define CAN_FLAG_TXOK1 (0x00000509U) /*!< Transmission OK MailBox 1 flag */ +#define CAN_FLAG_ALST1 (0x0000050AU) /*!< Arbitration Lost MailBox 1 flag */ +#define CAN_FLAG_TERR1 (0x0000050BU) /*!< Transmission error MailBox 1 flag */ +#define CAN_FLAG_RQCP2 (0x00000510U) /*!< Request complete MailBox2 flag */ +#define CAN_FLAG_TXOK2 (0x00000511U) /*!< Transmission OK MailBox 2 flag */ +#define CAN_FLAG_ALST2 (0x00000512U) /*!< Arbitration Lost MailBox 2 flag */ +#define CAN_FLAG_TERR2 (0x00000513U) /*!< Transmission error MailBox 2 flag */ +#define CAN_FLAG_TME0 (0x0000051AU) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 (0x0000051BU) /*!< Transmit mailbox 1 empty flag */ +#define CAN_FLAG_TME2 (0x0000051CU) /*!< Transmit mailbox 2 empty flag */ +#define CAN_FLAG_LOW0 (0x0000051DU) /*!< Lowest priority mailbox 0 flag */ +#define CAN_FLAG_LOW1 (0x0000051EU) /*!< Lowest priority mailbox 1 flag */ +#define CAN_FLAG_LOW2 (0x0000051FU) /*!< Lowest priority mailbox 2 flag */ /* Receive Flags */ -#define CAN_FLAG_FF0 ((uint32_t)0x00000203) /*!< FIFO 0 Full flag */ -#define CAN_FLAG_FOV0 ((uint32_t)0x00000204) /*!< FIFO 0 Overrun flag */ - -#define CAN_FLAG_FF1 ((uint32_t)0x00000403) /*!< FIFO 1 Full flag */ -#define CAN_FLAG_FOV1 ((uint32_t)0x00000404) /*!< FIFO 1 Overrun flag */ +#define CAN_FLAG_FF0 (0x00000203U) /*!< RX FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 (0x00000204U) /*!< RX FIFO 0 Overrun flag */ +#define CAN_FLAG_FF1 (0x00000403U) /*!< RX FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 (0x00000404U) /*!< RX FIFO 1 Overrun flag */ /* Operating Mode Flags */ -#define CAN_FLAG_WKU ((uint32_t)0x00000103) /*!< Wake up flag */ -#define CAN_FLAG_SLAK ((uint32_t)0x00000101) /*!< Sleep acknowledge flag */ -#define CAN_FLAG_SLAKI ((uint32_t)0x00000104) /*!< Sleep acknowledge flag */ -/* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. - In this case the SLAK bit can be polled.*/ +#define CAN_FLAG_INAK (0x00000100U) /*!< Initialization acknowledge flag */ +#define CAN_FLAG_SLAK (0x00000101U) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_ERRI (0x00000102U) /*!< Error flag */ +#define CAN_FLAG_WKU (0x00000103U) /*!< Wake up interrupt flag */ +#define CAN_FLAG_SLAKI (0x00000104U) /*!< Sleep acknowledge interrupt flag */ /* Error Flags */ -#define CAN_FLAG_EWG ((uint32_t)0x00000300) /*!< Error warning flag */ -#define CAN_FLAG_EPV ((uint32_t)0x00000301) /*!< Error passive flag */ -#define CAN_FLAG_BOF ((uint32_t)0x00000302) /*!< Bus-Off flag */ +#define CAN_FLAG_EWG (0x00000300U) /*!< Error warning flag */ +#define CAN_FLAG_EPV (0x00000301U) /*!< Error passive flag */ +#define CAN_FLAG_BOF (0x00000302U) /*!< Bus-Off flag */ /** * @} */ -/** @defgroup CAN_interrupts CAN Interrupts + +/** @defgroup CAN_Interrupts CAN Interrupts * @{ */ -#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ +/* Transmit Interrupt */ +#define CAN_IT_TX_MAILBOX_EMPTY ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ /* Receive Interrupts */ -#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ -#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ -#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ -#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ -#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ -#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ +#define CAN_IT_RX_FIFO0_MSG_PENDING ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_RX_FIFO0_FULL ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_RX_FIFO0_OVERRUN ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_RX_FIFO1_MSG_PENDING ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_RX_FIFO1_FULL ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_RX_FIFO1_OVERRUN ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ /* Operating Mode Interrupts */ -#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ -#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ +#define CAN_IT_WAKEUP ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLEEP_ACK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ /* Error Interrupts */ -#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ -#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ -#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ -#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ -#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ - +#define CAN_IT_ERROR_WARNING ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_ERROR_PASSIVE ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BUSOFF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LAST_ERROR_CODE ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERROR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ /** * @} */ -/* Mailboxes definition */ -#define CAN_TXMAILBOX_0 ((uint8_t)0x00) -#define CAN_TXMAILBOX_1 ((uint8_t)0x01) -#define CAN_TXMAILBOX_2 ((uint8_t)0x02) - /** * @} */ /* Exported macros -----------------------------------------------------------*/ -/** @defgroup CAN_Exported_Macro CAN Exported Macros +/** @defgroup CAN_Exported_Macros CAN Exported Macros * @{ */ -/** @brief Reset CAN handle state. - * @param __HANDLE__: CAN handle. +/** @brief Reset CAN handle state + * @param __HANDLE__ CAN handle. * @retval None */ #define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET) /** - * @brief Enable the specified CAN interrupt. - * @param __HANDLE__: CAN handle. - * @param __INTERRUPT__: CAN Interrupt. + * @brief Enable the specified CAN interrupts. + * @param __HANDLE__ CAN handle. + * @param __INTERRUPT__ CAN Interrupt sources to enable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) /** - * @brief Disable the specified CAN interrupt. - * @param __HANDLE__: CAN handle. - * @param __INTERRUPT__: CAN Interrupt. + * @brief Disable the specified CAN interrupts. + * @param __HANDLE__ CAN handle. + * @param __INTERRUPT__ CAN Interrupt sources to disable. + * This parameter can be any combination of @arg CAN_Interrupts * @retval None */ #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) -/** - * @brief Return the number of pending received messages. - * @param __HANDLE__: CAN handle. - * @param __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval The number of pending message. +/** @brief Check if the specified CAN interrupt source is enabled or disabled. + * @param __HANDLE__ specifies the CAN Handle. + * @param __INTERRUPT__ specifies the CAN interrupt source to check. + * This parameter can be a value of @arg CAN_Interrupts + * @retval The state of __IT__ (TRUE or FALSE). */ -#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03))) +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) & (__INTERRUPT__)) /** @brief Check whether the specified CAN flag is set or not. - * @param __HANDLE__: specifies the CAN Handle. - * @param __FLAG__: specifies the flag to check. - * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @arg CAN_FLAG_EWG: Error Warning Flag - * @arg CAN_FLAG_EPV: Error Passive Flag - * @arg CAN_FLAG_BOF: Bus-Off Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @param __HANDLE__ specifies the CAN Handle. + * @param __FLAG__ specifies the flag to check. + * This parameter can be one of @arg CAN_flags + * @retval The state of __FLAG__ (TRUE or FALSE). */ #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + ((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 3U)? ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** @brief Clear the specified CAN pending flag. - * @param __HANDLE__: specifies the CAN Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the CAN Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg CAN_TSR_RQCP0: Request MailBox0 Flag - * @arg CAN_TSR_RQCP1: Request MailBox1 Flag - * @arg CAN_TSR_RQCP2: Request MailBox2 Flag - * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag - * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag - * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag - * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag - * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag - * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag - * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag - * @arg CAN_FLAG_FF0: FIFO 0 Full Flag - * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag - * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag - * @arg CAN_FLAG_FF1: FIFO 1 Full Flag - * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag - * @arg CAN_FLAG_WKU: Wake up Flag - * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag - * @retval The new state of __FLAG__ (TRUE or FALSE). + * @arg CAN_FLAG_RQCP0: Request complete MailBox 0 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox 0 Flag + * @arg CAN_FLAG_ALST0: Arbitration Lost MailBox 0 Flag + * @arg CAN_FLAG_TERR0: Transmission error MailBox 0 Flag + * @arg CAN_FLAG_RQCP1: Request complete MailBox 1 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox 1 Flag + * @arg CAN_FLAG_ALST1: Arbitration Lost MailBox 1 Flag + * @arg CAN_FLAG_TERR1: Transmission error MailBox 1 Flag + * @arg CAN_FLAG_RQCP2: Request complete MailBox 2 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox 2 Flag + * @arg CAN_FLAG_ALST2: Arbitration Lost MailBox 2 Flag + * @arg CAN_FLAG_TERR2: Transmission error MailBox 2 Flag + * @arg CAN_FLAG_FF0: RX FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: RX FIFO 0 Overrun Flag + * @arg CAN_FLAG_FF1: RX FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: RX FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKUI: Wake up Interrupt Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Interrupt Flag + * @retval None */ #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ -((((__FLAG__) >> 8U) == 5)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 2)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 4)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ - (((__FLAG__) >> 8U) == 1)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0) - - -/** @brief Check whether the specified CAN interrupt source is enabled or not. - * @param __HANDLE__: specifies the CAN Handle. - * @param __INTERRUPT__: specifies the CAN interrupt source to check. - * This parameter can be one of the following values: - * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable - * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enable - * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable - * @retval The new state of __IT__ (TRUE or FALSE). - */ -#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) - -/** - * @brief Check the transmission status of a CAN Frame. - * @param __HANDLE__: specifies the CAN Handle. - * @param __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission. - * @retval The new status of transmission (TRUE or FALSE). - */ -#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) :\ - ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2))) - - - -/** - * @brief Release the specified receive FIFO. - * @param __HANDLE__: CAN handle. - * @param __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. - * @retval None - */ -#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ -((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) - -/** - * @brief Cancel a transmit request. - * @param __HANDLE__: specifies the CAN Handle. - * @param __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission. - * @retval None - */ -#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ -(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ - ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ - ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) - -/** - * @brief Enable or disable the DBG Freeze for CAN. - * @param __HANDLE__: specifies the CAN Handle. - * @param __NEWSTATE__: new state of the CAN peripheral. - * This parameter can be: ENABLE (CAN reception/transmission is frozen - * during debug. Reception FIFO can still be accessed/controlled normally) - * or DISABLE (CAN is working during debug). - * @retval None - */ -#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ -((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + ((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1U)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0U) /** * @} - */ - -/* Exported functions --------------------------------------------------------*/ + */ + +/* Exported functions --------------------------------------------------------*/ /** @addtogroup CAN_Exported_Functions CAN Exported Functions * @{ */ - -/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + +/** @addtogroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions * @{ */ -/* addtogroup and de-initialization functions *****************************/ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); -HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); -void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); + +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions - * @brief I/O operation functions + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Configuration functions + * @brief Configuration functions * @{ */ -/* IO operation functions *****************************************************/ -HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); -HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); -HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); -HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); + +/* Configuration functions ****************************************************/ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Control functions + * @brief Control functions + * @{ + */ + +/* Control functions **********************************************************/ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_RequestSleep(CAN_HandleTypeDef *hcan); HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); -void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); -void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); -void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsSleepActive(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox); +HAL_StatusTypeDef HAL_CAN_AbortTxRequest(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(CAN_HandleTypeDef *hcan); +uint32_t HAL_CAN_IsTxMessagePending(CAN_HandleTypeDef *hcan, uint32_t TxMailboxes); +uint32_t HAL_CAN_GetTxTimestamp(CAN_HandleTypeDef *hcan, uint32_t TxMailbox); +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]); +uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo); + /** * @} - */ - -/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions - * @brief CAN Peripheral State functions + */ + +/** @addtogroup CAN_Exported_Functions_Group4 Interrupts management + * @brief Interrupts management + * @{ + */ +/* Interrupts management ******************************************************/ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs); +HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group5 Callback functions + * @brief Callback functions + * @{ + */ +/* Callbacks functions ********************************************************/ + +void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); + +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group6 Peripheral State and Error functions + * @brief CAN Peripheral State functions * @{ */ /* Peripheral State and Error functions ***************************************/ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan); uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); -HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); -/** - * @} - */ +HAL_StatusTypeDef HAL_CAN_ResetError(CAN_HandleTypeDef *hcan); /** * @} - */ + */ + +/** + * @} + */ /* Private types -------------------------------------------------------------*/ +/** @defgroup CAN_Private_Types CAN Private Types + * @{ + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup CAN_Private_Variables CAN Private Variables + * @{ + */ + +/** + * @} + */ + /* Private constants ---------------------------------------------------------*/ /** @defgroup CAN_Private_Constants CAN Private Constants * @{ */ -/** @defgroup CAN_transmit_constants CAN Transmit Constants - * @{ - */ -#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ -/** - * @} - */ -#define CAN_FLAG_MASK ((uint32_t)0x000000FF) - - +#define CAN_FLAG_MASK (0x000000FFU) /** * @} */ -/* Private macros ------------------------------------------------------------*/ +/* Private Macros -----------------------------------------------------------*/ /** @defgroup CAN_Private_Macros CAN Private Macros * @{ */ @@ -705,64 +716,69 @@ HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); ((MODE) == CAN_MODE_LOOPBACK)|| \ ((MODE) == CAN_MODE_SILENT) || \ ((MODE) == CAN_MODE_SILENT_LOOPBACK)) - -#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ) || \ ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) - -#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) - -#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) - -#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024)) - -#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) - +#define IS_CAN_BS1(BS1) (((BS1) == CAN_BS1_1TQ) || ((BS1) == CAN_BS1_2TQ) || \ + ((BS1) == CAN_BS1_3TQ) || ((BS1) == CAN_BS1_4TQ) || \ + ((BS1) == CAN_BS1_5TQ) || ((BS1) == CAN_BS1_6TQ) || \ + ((BS1) == CAN_BS1_7TQ) || ((BS1) == CAN_BS1_8TQ) || \ + ((BS1) == CAN_BS1_9TQ) || ((BS1) == CAN_BS1_10TQ)|| \ + ((BS1) == CAN_BS1_11TQ)|| ((BS1) == CAN_BS1_12TQ)|| \ + ((BS1) == CAN_BS1_13TQ)|| ((BS1) == CAN_BS1_14TQ)|| \ + ((BS1) == CAN_BS1_15TQ)|| ((BS1) == CAN_BS1_16TQ)) +#define IS_CAN_BS2(BS2) (((BS2) == CAN_BS2_1TQ) || ((BS2) == CAN_BS2_2TQ) || \ + ((BS2) == CAN_BS2_3TQ) || ((BS2) == CAN_BS2_4TQ) || \ + ((BS2) == CAN_BS2_5TQ) || ((BS2) == CAN_BS2_6TQ) || \ + ((BS2) == CAN_BS2_7TQ) || ((BS2) == CAN_BS2_8TQ)) +#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) +#define IS_CAN_FILTER_ID_HALFWORD(HALFWORD) ((HALFWORD) <= 0xFFFFU) +#define IS_CAN_FILTER_BANK_DUAL(BANK) ((BANK) <= 27U) +#define IS_CAN_FILTER_BANK_SINGLE(BANK) ((BANK) <= 13U) #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ ((MODE) == CAN_FILTERMODE_IDLIST)) - #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ ((SCALE) == CAN_FILTERSCALE_32BIT)) - #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ ((FIFO) == CAN_FILTER_FIFO1)) - -#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28) - -#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02)) - -#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF)) - -#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF)) - -#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) - +#define IS_CAN_TX_MAILBOX(TRANSMITMAILBOX) (((TRANSMITMAILBOX) == CAN_TX_MAILBOX0 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX1 ) || \ + ((TRANSMITMAILBOX) == CAN_TX_MAILBOX2 )) +#define IS_CAN_TX_MAILBOX_LIST(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= (CAN_TX_MAILBOX0 | CAN_TX_MAILBOX1 | CAN_TX_MAILBOX2)) +#define IS_CAN_STDID(STDID) ((STDID) <= 0x7FFU) +#define IS_CAN_EXTID(EXTID) ((EXTID) <= 0x1FFFFFFFU) +#define IS_CAN_DLC(DLC) ((DLC) <= 8U) #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ ((IDTYPE) == CAN_ID_EXT)) - #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) +#define IS_CAN_RX_FIFO(FIFO) (((FIFO) == CAN_RX_FIFO0) || ((FIFO) == CAN_RX_FIFO1)) +#define IS_CAN_IT(IT) ((IT) <= (CAN_IT_TX_MAILBOX_EMPTY | CAN_IT_RX_FIFO0_MSG_PENDING | \ + CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN | \ + CAN_IT_RX_FIFO1_MSG_PENDING | CAN_IT_RX_FIFO1_FULL | \ + CAN_IT_RX_FIFO1_OVERRUN | CAN_IT_WAKEUP | \ + CAN_IT_SLEEP_ACK | CAN_IT_ERROR_WARNING | \ + CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | \ + CAN_IT_LAST_ERROR_CODE | CAN_IT_ERROR)) -#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) +/** + * @} + */ +/* End of private macros -----------------------------------------------------*/ /** * @} */ -/* Private functions ---------------------------------------------------------*/ +#endif /* CAN1 */ /** * @} */ -/** - * @} - */ - - #ifdef __cplusplus } #endif -#endif /* __STM32L4xx_CAN_H */ +#endif /* STM32L4xx_HAL_CAN_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.h new file mode 100644 index 0000000000..08fd1017dc --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.h @@ -0,0 +1,769 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_can_legacy.h + * @author MCD Application Team + * @brief Header file of CAN HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_CAN_LEGACY_H +#define __STM32L4xx_CAN_LEGACY_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined(CAN1) +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup CAN + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup CAN_Exported_Types CAN Exported Types + * @{ + */ + +/** + * @brief HAL State structures definition + */ +typedef enum +{ + HAL_CAN_STATE_RESET = 0x00, /*!< CAN not yet initialized or disabled */ + HAL_CAN_STATE_READY = 0x01, /*!< CAN initialized and ready for use */ + HAL_CAN_STATE_BUSY = 0x02, /*!< CAN process is ongoing */ + HAL_CAN_STATE_BUSY_TX = 0x12, /*!< CAN process is ongoing */ + HAL_CAN_STATE_BUSY_RX = 0x22, /*!< CAN process is ongoing */ + HAL_CAN_STATE_BUSY_TX_RX = 0x32, /*!< CAN process is ongoing */ + HAL_CAN_STATE_TIMEOUT = 0x03, /*!< Timeout state */ + HAL_CAN_STATE_ERROR = 0x04 /*!< CAN error state */ + +}HAL_CAN_StateTypeDef; + +/** + * @brief CAN init structure definition + */ +typedef struct +{ + uint32_t Prescaler; /*!< Specifies the length of a time quantum. + This parameter must be a number between Min_Data = 1 and Max_Data = 1024 */ + + uint32_t Mode; /*!< Specifies the CAN operating mode. + This parameter can be a value of @ref CAN_operating_mode */ + + uint32_t SJW; /*!< Specifies the maximum number of time quanta + the CAN hardware is allowed to lengthen or + shorten a bit to perform resynchronization. + This parameter can be a value of @ref CAN_synchronisation_jump_width */ + + uint32_t BS1; /*!< Specifies the number of time quanta in Bit Segment 1. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */ + + uint32_t BS2; /*!< Specifies the number of time quanta in Bit Segment 2. + This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */ + + uint32_t TTCM; /*!< Enable or disable the time triggered communication mode. + This parameter can be set to ENABLE or DISABLE. */ + + uint32_t ABOM; /*!< Enable or disable the automatic bus-off management. + This parameter can be set to ENABLE or DISABLE */ + + uint32_t AWUM; /*!< Enable or disable the automatic wake-up mode. + This parameter can be set to ENABLE or DISABLE */ + + uint32_t NART; /*!< Enable or disable the non-automatic retransmission mode. + This parameter can be set to ENABLE or DISABLE */ + + uint32_t RFLM; /*!< Enable or disable the receive FIFO Locked mode. + This parameter can be set to ENABLE or DISABLE */ + + uint32_t TXFP; /*!< Enable or disable the transmit FIFO priority. + This parameter can be set to ENABLE or DISABLE */ +}CAN_InitTypeDef; + +/** + * @brief CAN filter configuration structure definition + */ +typedef struct +{ + uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit + configuration, first one for a 16-bit configuration). + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit + configuration, second one for a 16-bit configuration). + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, + according to the mode (MSBs for a 32-bit configuration, + first one for a 16-bit configuration). + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, + according to the mode (LSBs for a 32-bit configuration, + second one for a 16-bit configuration). + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ + + uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter. + This parameter can be a value of @ref CAN_filter_FIFO */ + + uint32_t FilterNumber; /*!< Specifies the filter which will be initialized. + This parameter must be a number between Min_Data = 0 and Max_Data = 27 */ + + uint32_t FilterMode; /*!< Specifies the filter mode to be initialized. + This parameter can be a value of @ref CAN_filter_mode */ + + uint32_t FilterScale; /*!< Specifies the filter scale. + This parameter can be a value of @ref CAN_filter_scale */ + + uint32_t FilterActivation; /*!< Enable or disable the filter. + This parameter can be set to ENABLE or DISABLE */ + + uint32_t BankNumber; /*!< Select the start slave bank filter. + This parameter must be a number between Min_Data = 0 and Max_Data = 28 */ + +}CAN_FilterConfTypeDef; + +/** + * @brief CAN Tx message structure definition + */ +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ + + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. + This parameter can be a value of @ref CAN_identifier_type */ + + uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. + This parameter can be a value of @ref CAN_remote_transmission_request */ + + uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ + + uint8_t Data[8]; /*!< Contains the data to be transmitted. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + +}CanTxMsgTypeDef; + +/** + * @brief CAN Rx message structure definition + */ +typedef struct +{ + uint32_t StdId; /*!< Specifies the standard identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ + + uint32_t ExtId; /*!< Specifies the extended identifier. + This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ + + uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. + This parameter can be a value of @ref CAN_identifier_type */ + + uint32_t RTR; /*!< Specifies the type of frame for the received message. + This parameter can be a value of @ref CAN_remote_transmission_request */ + + uint32_t DLC; /*!< Specifies the length of the frame that will be received. + This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ + + uint8_t Data[8]; /*!< Contains the data to be received. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + + uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. + This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ + + uint32_t FIFONumber; /*!< Specifies the receive FIFO number. + This parameter can be CAN_FIFO0 or CAN_FIFO1 */ + +}CanRxMsgTypeDef; + +/** + * @brief CAN handle Structure definition + */ +typedef struct +{ + CAN_TypeDef *Instance; /*!< Register base address */ + + CAN_InitTypeDef Init; /*!< CAN required parameters */ + + CanTxMsgTypeDef* pTxMsg; /*!< Pointer to transmit structure */ + + CanRxMsgTypeDef* pRxMsg; /*!< Pointer to reception structure */ + + __IO HAL_CAN_StateTypeDef State; /*!< CAN communication state */ + + HAL_LockTypeDef Lock; /*!< CAN locking object */ + + __IO uint32_t ErrorCode; /*!< CAN Error code */ + +}CAN_HandleTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup CAN_Exported_Constants CAN Exported Constants + * @{ + */ + +/** @defgroup CAN_Error_Code CAN Error Code + * @{ + */ +#define HAL_CAN_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ +#define HAL_CAN_ERROR_EWG ((uint32_t)0x00000001) /*!< EWG error */ +#define HAL_CAN_ERROR_EPV ((uint32_t)0x00000002) /*!< EPV error */ +#define HAL_CAN_ERROR_BOF ((uint32_t)0x00000004) /*!< BOF error */ +#define HAL_CAN_ERROR_STF ((uint32_t)0x00000008) /*!< Stuff error */ +#define HAL_CAN_ERROR_FOR ((uint32_t)0x00000010) /*!< Form error */ +#define HAL_CAN_ERROR_ACK ((uint32_t)0x00000020) /*!< Acknowledgment error */ +#define HAL_CAN_ERROR_BR ((uint32_t)0x00000040) /*!< Bit recessive */ +#define HAL_CAN_ERROR_BD ((uint32_t)0x00000080) /*!< LEC dominant */ +#define HAL_CAN_ERROR_CRC ((uint32_t)0x00000100) /*!< LEC transfer error */ +#define HAL_CAN_ERROR_FOV0 ((uint32_t)0x00000200) /*!< FIFO0 overrun error */ +#define HAL_CAN_ERROR_FOV1 ((uint32_t)0x00000400) /*!< FIFO1 overrun error */ +/** + * @} + */ + +/** @defgroup CAN_InitStatus CAN initialization Status + * @{ + */ +#define CAN_INITSTATUS_FAILED ((uint32_t)0x00000000) /*!< CAN initialization failed */ +#define CAN_INITSTATUS_SUCCESS ((uint32_t)0x00000001) /*!< CAN initialization OK */ +/** + * @} + */ + +/** @defgroup CAN_operating_mode CAN Operating Mode + * @{ + */ +#define CAN_MODE_NORMAL ((uint32_t)0x00000000) /*!< Normal mode */ +#define CAN_MODE_LOOPBACK ((uint32_t)CAN_BTR_LBKM) /*!< Loopback mode */ +#define CAN_MODE_SILENT ((uint32_t)CAN_BTR_SILM) /*!< Silent mode */ +#define CAN_MODE_SILENT_LOOPBACK ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM)) /*!< Loopback combined with silent mode */ +/** + * @} + */ + + +/** @defgroup CAN_synchronisation_jump_width CAN Synchronization Jump Width + * @{ + */ +#define CAN_SJW_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_SJW_2TQ ((uint32_t)CAN_BTR_SJW_0) /*!< 2 time quantum */ +#define CAN_SJW_3TQ ((uint32_t)CAN_BTR_SJW_1) /*!< 3 time quantum */ +#define CAN_SJW_4TQ ((uint32_t)CAN_BTR_SJW) /*!< 4 time quantum */ +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_1 CAN Time Quantum in Bit Segment 1 + * @{ + */ +#define CAN_BS1_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_BS1_2TQ ((uint32_t)CAN_BTR_TS1_0) /*!< 2 time quantum */ +#define CAN_BS1_3TQ ((uint32_t)CAN_BTR_TS1_1) /*!< 3 time quantum */ +#define CAN_BS1_4TQ ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0)) /*!< 4 time quantum */ +#define CAN_BS1_5TQ ((uint32_t)CAN_BTR_TS1_2) /*!< 5 time quantum */ +#define CAN_BS1_6TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_0)) /*!< 6 time quantum */ +#define CAN_BS1_7TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1)) /*!< 7 time quantum */ +#define CAN_BS1_8TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0)) /*!< 8 time quantum */ +#define CAN_BS1_9TQ ((uint32_t)CAN_BTR_TS1_3) /*!< 9 time quantum */ +#define CAN_BS1_10TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_0)) /*!< 10 time quantum */ +#define CAN_BS1_11TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1)) /*!< 11 time quantum */ +#define CAN_BS1_12TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0)) /*!< 12 time quantum */ +#define CAN_BS1_13TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2)) /*!< 13 time quantum */ +#define CAN_BS1_14TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_0)) /*!< 14 time quantum */ +#define CAN_BS1_15TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_1)) /*!< 15 time quantum */ +#define CAN_BS1_16TQ ((uint32_t)CAN_BTR_TS1) /*!< 16 time quantum */ +/** + * @} + */ + +/** @defgroup CAN_time_quantum_in_bit_segment_2 CAN Time Quantum in Bit Segment 2 + * @{ + */ +#define CAN_BS2_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ +#define CAN_BS2_2TQ ((uint32_t)CAN_BTR_TS2_0) /*!< 2 time quantum */ +#define CAN_BS2_3TQ ((uint32_t)CAN_BTR_TS2_1) /*!< 3 time quantum */ +#define CAN_BS2_4TQ ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0)) /*!< 4 time quantum */ +#define CAN_BS2_5TQ ((uint32_t)CAN_BTR_TS2_2) /*!< 5 time quantum */ +#define CAN_BS2_6TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_0)) /*!< 6 time quantum */ +#define CAN_BS2_7TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_1)) /*!< 7 time quantum */ +#define CAN_BS2_8TQ ((uint32_t)CAN_BTR_TS2) /*!< 8 time quantum */ +/** + * @} + */ + +/** @defgroup CAN_filter_mode CAN Filter Mode + * @{ + */ +#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00) /*!< Identifier mask mode */ +#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01) /*!< Identifier list mode */ +/** + * @} + */ + +/** @defgroup CAN_filter_scale CAN Filter Scale + * @{ + */ +#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00) /*!< Two 16-bit filters */ +#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01) /*!< One 32-bit filter */ +/** + * @} + */ + +/** @defgroup CAN_filter_FIFO CAN Filter FIFO + * @{ + */ +#define CAN_FILTER_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */ +#define CAN_FILTER_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */ +/** + * @} + */ + +/** @defgroup CAN_identifier_type CAN Identifier Type + * @{ + */ +#define CAN_ID_STD ((uint32_t)0x00000000) /*!< Standard Id */ +#define CAN_ID_EXT ((uint32_t)0x00000004) /*!< Extended Id */ +/** + * @} + */ + +/** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request + * @{ + */ +#define CAN_RTR_DATA ((uint32_t)0x00000000) /*!< Data frame */ +#define CAN_RTR_REMOTE ((uint32_t)0x00000002) /*!< Remote frame */ +/** + * @} + */ + +/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number + * @{ + */ +#define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */ +#define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */ +/** + * @} + */ + +/** @defgroup CAN_flags CAN Flags + * @{ + */ +/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() + and CAN_ClearFlag() functions. */ +/* If the flag is 0x1XXXXXXX, it means that it can only be used with + CAN_GetFlagStatus() function. */ + +/* Transmit Flags */ +#define CAN_FLAG_RQCP0 ((uint32_t)0x00000500) /*!< Request MailBox0 flag */ +#define CAN_FLAG_RQCP1 ((uint32_t)0x00000508) /*!< Request MailBox1 flag */ +#define CAN_FLAG_RQCP2 ((uint32_t)0x00000510) /*!< Request MailBox2 flag */ +#define CAN_FLAG_TXOK0 ((uint32_t)0x00000501) /*!< Transmission OK MailBox0 flag */ +#define CAN_FLAG_TXOK1 ((uint32_t)0x00000509) /*!< Transmission OK MailBox1 flag */ +#define CAN_FLAG_TXOK2 ((uint32_t)0x00000511) /*!< Transmission OK MailBox2 flag */ +#define CAN_FLAG_TME0 ((uint32_t)0x0000051A) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME1 ((uint32_t)0x0000051B) /*!< Transmit mailbox 0 empty flag */ +#define CAN_FLAG_TME2 ((uint32_t)0x0000051C) /*!< Transmit mailbox 0 empty flag */ + +/* Receive Flags */ +#define CAN_FLAG_FF0 ((uint32_t)0x00000203) /*!< FIFO 0 Full flag */ +#define CAN_FLAG_FOV0 ((uint32_t)0x00000204) /*!< FIFO 0 Overrun flag */ + +#define CAN_FLAG_FF1 ((uint32_t)0x00000403) /*!< FIFO 1 Full flag */ +#define CAN_FLAG_FOV1 ((uint32_t)0x00000404) /*!< FIFO 1 Overrun flag */ + +/* Operating Mode Flags */ +#define CAN_FLAG_WKU ((uint32_t)0x00000103) /*!< Wake up flag */ +#define CAN_FLAG_SLAK ((uint32_t)0x00000101) /*!< Sleep acknowledge flag */ +#define CAN_FLAG_SLAKI ((uint32_t)0x00000104) /*!< Sleep acknowledge flag */ +/* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. + In this case the SLAK bit can be polled.*/ + +/* Error Flags */ +#define CAN_FLAG_EWG ((uint32_t)0x00000300) /*!< Error warning flag */ +#define CAN_FLAG_EPV ((uint32_t)0x00000301) /*!< Error passive flag */ +#define CAN_FLAG_BOF ((uint32_t)0x00000302) /*!< Bus-Off flag */ +/** + * @} + */ + +/** @defgroup CAN_interrupts CAN Interrupts + * @{ + */ +#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ + +/* Receive Interrupts */ +#define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0) /*!< FIFO 0 message pending interrupt */ +#define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0) /*!< FIFO 0 full interrupt */ +#define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0) /*!< FIFO 0 overrun interrupt */ +#define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1) /*!< FIFO 1 message pending interrupt */ +#define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1) /*!< FIFO 1 full interrupt */ +#define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1) /*!< FIFO 1 overrun interrupt */ + +/* Operating Mode Interrupts */ +#define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE) /*!< Wake-up interrupt */ +#define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE) /*!< Sleep acknowledge interrupt */ + +/* Error Interrupts */ +#define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt */ +#define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt */ +#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ +#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ +#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ + +/** + * @} + */ + +/* Mailboxes definition */ +#define CAN_TXMAILBOX_0 ((uint8_t)0x00) +#define CAN_TXMAILBOX_1 ((uint8_t)0x01) +#define CAN_TXMAILBOX_2 ((uint8_t)0x02) + +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup CAN_Exported_Macro CAN Exported Macros + * @{ + */ + +/** @brief Reset CAN handle state. + * @param __HANDLE__: CAN handle. + * @retval None + */ +#define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET) + +/** + * @brief Enable the specified CAN interrupt. + * @param __HANDLE__: CAN handle. + * @param __INTERRUPT__: CAN Interrupt. + * @retval None + */ +#define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__)) + +/** + * @brief Disable the specified CAN interrupt. + * @param __HANDLE__: CAN handle. + * @param __INTERRUPT__: CAN Interrupt. + * @retval None + */ +#define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__)) + +/** + * @brief Return the number of pending received messages. + * @param __HANDLE__: CAN handle. + * @param __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @retval The number of pending message. + */ +#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ +((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03))) + +/** @brief Check whether the specified CAN flag is set or not. + * @param __HANDLE__: specifies the CAN Handle. + * @param __FLAG__: specifies the flag to check. + * This parameter can be one of the following values: + * @arg CAN_TSR_RQCP0: Request MailBox0 Flag + * @arg CAN_TSR_RQCP1: Request MailBox1 Flag + * @arg CAN_TSR_RQCP2: Request MailBox2 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag + * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag + * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag + * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag + * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag + * @arg CAN_FLAG_FF0: FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag + * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag + * @arg CAN_FLAG_FF1: FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKU: Wake up Flag + * @arg CAN_FLAG_SLAK: Sleep acknowledge Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag + * @arg CAN_FLAG_EWG: Error Warning Flag + * @arg CAN_FLAG_EPV: Error Passive Flag + * @arg CAN_FLAG_BOF: Bus-Off Flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ +((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + ((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) + +/** @brief Clear the specified CAN pending flag. + * @param __HANDLE__: specifies the CAN Handle. + * @param __FLAG__: specifies the flag to check. + * This parameter can be one of the following values: + * @arg CAN_TSR_RQCP0: Request MailBox0 Flag + * @arg CAN_TSR_RQCP1: Request MailBox1 Flag + * @arg CAN_TSR_RQCP2: Request MailBox2 Flag + * @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag + * @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag + * @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag + * @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag + * @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag + * @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag + * @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag + * @arg CAN_FLAG_FF0: FIFO 0 Full Flag + * @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag + * @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag + * @arg CAN_FLAG_FF1: FIFO 1 Full Flag + * @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag + * @arg CAN_FLAG_WKU: Wake up Flag + * @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag + * @retval The new state of __FLAG__ (TRUE or FALSE). + */ +#define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ +((((__FLAG__) >> 8U) == 5)? (((__HANDLE__)->Instance->TSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 2)? (((__HANDLE__)->Instance->RF0R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 4)? (((__HANDLE__)->Instance->RF1R) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ + (((__FLAG__) >> 8U) == 1)? (((__HANDLE__)->Instance->MSR) = (1U << ((__FLAG__) & CAN_FLAG_MASK))): 0) + + +/** @brief Check whether the specified CAN interrupt source is enabled or not. + * @param __HANDLE__: specifies the CAN Handle. + * @param __INTERRUPT__: specifies the CAN interrupt source to check. + * This parameter can be one of the following values: + * @arg CAN_IT_TME: Transmit mailbox empty interrupt enable + * @arg CAN_IT_FMP0: FIFO0 message pending interrupt enable + * @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable + * @retval The new state of __IT__ (TRUE or FALSE). + */ +#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) + +/** + * @brief Check the transmission status of a CAN Frame. + * @param __HANDLE__: specifies the CAN Handle. + * @param __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission. + * @retval The new status of transmission (TRUE or FALSE). + */ +#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\ +(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) :\ + ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) :\ + ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2))) + + + +/** + * @brief Release the specified receive FIFO. + * @param __HANDLE__: CAN handle. + * @param __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1. + * @retval None + */ +#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ +((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) + +/** + * @brief Cancel a transmit request. + * @param __HANDLE__: specifies the CAN Handle. + * @param __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission. + * @retval None + */ +#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ +(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ + ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ + ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) + +/** + * @brief Enable or disable the DBG Freeze for CAN. + * @param __HANDLE__: specifies the CAN Handle. + * @param __NEWSTATE__: new state of the CAN peripheral. + * This parameter can be: ENABLE (CAN reception/transmission is frozen + * during debug. Reception FIFO can still be accessed/controlled normally) + * or DISABLE (CAN is working during debug). + * @retval None + */ +#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ +((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup CAN_Exported_Functions CAN Exported Functions + * @{ + */ + +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * @{ + */ +/* addtogroup and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); +void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); +void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group2 Input and Output operation functions + * @brief I/O operation functions + * @{ + */ +/* IO operation functions *****************************************************/ +HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); +HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout); +HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); +HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); +void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); +void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); +void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); +void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); +/** + * @} + */ + +/** @addtogroup CAN_Exported_Functions_Group3 Peripheral State and Error functions + * @brief CAN Peripheral State functions + * @{ + */ +/* Peripheral State and Error functions ***************************************/ +uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup CAN_Private_Constants CAN Private Constants + * @{ + */ +/** @defgroup CAN_transmit_constants CAN Transmit Constants + * @{ + */ +#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ +/** + * @} + */ +#define CAN_FLAG_MASK ((uint32_t)0x000000FF) + + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup CAN_Private_Macros CAN Private Macros + * @{ + */ + +#define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \ + ((MODE) == CAN_MODE_LOOPBACK)|| \ + ((MODE) == CAN_MODE_SILENT) || \ + ((MODE) == CAN_MODE_SILENT_LOOPBACK)) + +#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ + ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) + +#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) + +#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) + +#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024)) + +#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) + +#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ + ((MODE) == CAN_FILTERMODE_IDLIST)) + +#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ + ((SCALE) == CAN_FILTERSCALE_32BIT)) + +#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ + ((FIFO) == CAN_FILTER_FIFO1)) + +#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28) + +#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02)) + +#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF)) + +#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF)) + +#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) + +#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ + ((IDTYPE) == CAN_ID_EXT)) + +#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) + +#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ +#endif /* CAN1 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_CAN_LEGACY_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.c index aea11067d4..a6d00340ee 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_comp.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief COMP HAL module driver. * This file provides firmware functions to manage the following * functionalities of the COMP peripheral: @@ -17,36 +15,34 @@ ================================================================================ ##### COMP Peripheral features ##### ================================================================================ - - [..] - The STM32L4xx device family integrates two analog comparators instances - COMP1 and COMP2: - (#) The COMP input minus (inverting input) and input plus (non inverting input) + + [..] + The STM32L4xx device family integrates two analog comparators instances: + COMP1, COMP2. + (#) Comparators input minus (inverting input) and input plus (non inverting input) can be set to internal references or to GPIO pins (refer to GPIO list in reference manual). - - (#) The COMP output level is available using HAL_COMP_GetOutputLevel() + + (#) Comparators output level is available using HAL_COMP_GetOutputLevel() and can be redirected to other peripherals: GPIO pins (in mode alternate functions for comparator), timers. (refer to GPIO list in reference manual). - + + (#) The comparators have interrupt capability through the EXTI controller + with wake-up from sleep and stop modes. + (#) Pairs of comparators instances can be combined in window mode (2 consecutive instances odd and even COMP and COMP). - - (#) The comparators have interrupt capability through the EXTI controller - with wake-up from sleep and stop modes: - (++) COMP1 is internally connected to EXTI Line 21 - (++) COMP2 is internally connected to EXTI Line 22 - + From the corresponding IRQ handler, the right interrupt source can be retrieved - using macro __HAL_COMP_COMP1_EXTI_GET_FLAG() and __HAL_COMP_COMP2_EXTI_GET_FLAG(). + using macro __HAL_COMP_COMPx_EXTI_GET_FLAG(). ##### How to use this driver ##### ================================================================================ [..] This driver provides functions to configure and program the comparator instances of STM32L4xx devices. - + To use the comparator, perform the following steps: (#) Initialize the COMP low level resources by implementing the HAL_COMP_MspInit(): @@ -63,7 +59,7 @@ (++) Select the input plus (non-inverting input) (++) Select the hysteresis (++) Select the blanking source - (++) Select the output polarity + (++) Select the output polarity (++) Select the power mode (++) Select the window mode @@ -153,6 +149,10 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal.h" +#ifdef HAL_COMP_MODULE_ENABLED + +#if defined (COMP1) || defined (COMP2) + /** @addtogroup STM32L4xx_HAL_Driver * @{ */ @@ -162,8 +162,6 @@ * @{ */ -#ifdef HAL_COMP_MODULE_ENABLED - /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /** @addtogroup COMP_Private_Constants @@ -175,15 +173,15 @@ /* Literal set to maximum value (refer to device datasheet, */ /* parameter "tSTART"). */ /* Unit: us */ -#define COMP_DELAY_STARTUP_US ((uint32_t) 80U) /*!< Delay for COMP startup time */ +#define COMP_DELAY_STARTUP_US (80U) /*!< Delay for COMP startup time */ /* Delay for COMP voltage scaler stabilization time. */ /* Literal set to maximum value (refer to device datasheet, */ /* parameter "tSTART_SCALER"). */ /* Unit: us */ -#define COMP_DELAY_VOLTAGE_SCALER_STAB_US ((uint32_t) 200U) /*!< Delay for COMP voltage scaler stabilization time */ +#define COMP_DELAY_VOLTAGE_SCALER_STAB_US (200U) /*!< Delay for COMP voltage scaler stabilization time */ -#define COMP_OUTPUT_LEVEL_BITOFFSET_POS ((uint32_t) 30U) +#define COMP_OUTPUT_LEVEL_BITOFFSET_POS (30U) /** * @} @@ -221,10 +219,10 @@ */ HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp) { - uint32_t tmp_csr = 0; - uint32_t exti_line = 0; - uint32_t comp_voltage_scaler_not_initialized = 0; - __IO uint32_t wait_loop_index = 0; + uint32_t tmp_csr = 0U; + uint32_t exti_line = 0U; + uint32_t comp_voltage_scaler_not_initialized = 0U; + __IO uint32_t wait_loop_index = 0U; HAL_StatusTypeDef status = HAL_OK; /* Check the COMP handle allocation and lock status */ @@ -269,15 +267,16 @@ HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp) comp_voltage_scaler_not_initialized = (READ_BIT(hcomp->Instance->CSR, COMP_CSR_SCALEN) == 0); /* Set COMP parameters */ - tmp_csr = (hcomp->Init.InvertingInput | - hcomp->Init.NonInvertingInput | - hcomp->Init.BlankingSrce | - hcomp->Init.Hysteresis | - hcomp->Init.OutputPol | - hcomp->Init.Mode ); + tmp_csr = ( hcomp->Init.NonInvertingInput + | hcomp->Init.InvertingInput + | hcomp->Init.BlankingSrce + | hcomp->Init.Hysteresis + | hcomp->Init.OutputPol + | hcomp->Init.Mode + ); /* Set parameters in COMP register */ - /* Note: Update all bits except read-only, lock and enable bits */ + /* Note: Update all bits except read-only, lock and enable bits */ #if defined (COMP_CSR_INMESEL) MODIFY_REG(hcomp->Instance->CSR, COMP_CSR_PWRMODE | COMP_CSR_INMSEL | COMP_CSR_INPSEL | @@ -309,14 +308,14 @@ HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp) /* Delay for COMP scaler bridge voltage stabilization */ /* Apply the delay if voltage scaler bridge is enabled for the first time */ - if ((READ_BIT(hcomp->Instance->CSR, COMP_CSR_SCALEN) != 0) && - (comp_voltage_scaler_not_initialized != 0) ) + if ((READ_BIT(hcomp->Instance->CSR, COMP_CSR_SCALEN) != 0U) && + (comp_voltage_scaler_not_initialized != 0U) ) { /* Wait loop initialization and execution */ /* Note: Variable divided by 2 to compensate partially */ /* CPU processing cycles. */ - wait_loop_index = (COMP_DELAY_VOLTAGE_SCALER_STAB_US * (SystemCoreClock / (1000000 * 2))); - while(wait_loop_index != 0) + wait_loop_index = (COMP_DELAY_VOLTAGE_SCALER_STAB_US * (SystemCoreClock / (1000000 * 2U))); + while(wait_loop_index != 0U) { wait_loop_index--; } @@ -331,53 +330,53 @@ HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp) /* Configure EXTI rising edge */ if((hcomp->Init.TriggerMode & COMP_EXTI_RISING) != RESET) { - SET_BIT(EXTI->RTSR1, exti_line); + LL_EXTI_EnableRisingTrig_0_31(exti_line); } else { - CLEAR_BIT(EXTI->RTSR1, exti_line); + LL_EXTI_DisableRisingTrig_0_31(exti_line); } /* Configure EXTI falling edge */ if((hcomp->Init.TriggerMode & COMP_EXTI_FALLING) != RESET) { - SET_BIT(EXTI->FTSR1, exti_line); + LL_EXTI_EnableFallingTrig_0_31(exti_line); } else { - CLEAR_BIT(EXTI->FTSR1, exti_line); + LL_EXTI_DisableFallingTrig_0_31(exti_line); } /* Clear COMP EXTI pending bit (if any) */ - WRITE_REG(EXTI->PR1, exti_line); + LL_EXTI_ClearFlag_0_31(exti_line); /* Configure EXTI event mode */ if((hcomp->Init.TriggerMode & COMP_EXTI_EVENT) != RESET) { - SET_BIT(EXTI->EMR1, exti_line); + LL_EXTI_EnableEvent_0_31(exti_line); } else { - CLEAR_BIT(EXTI->EMR1, exti_line); + LL_EXTI_DisableEvent_0_31(exti_line); } /* Configure EXTI interrupt mode */ if((hcomp->Init.TriggerMode & COMP_EXTI_IT) != RESET) { - SET_BIT(EXTI->IMR1, exti_line); + LL_EXTI_EnableIT_0_31(exti_line); } else { - CLEAR_BIT(EXTI->IMR1, exti_line); + LL_EXTI_DisableIT_0_31(exti_line); } } else { /* Disable EXTI event mode */ - CLEAR_BIT(EXTI->EMR1, exti_line); + LL_EXTI_DisableEvent_0_31(exti_line); /* Disable EXTI interrupt mode */ - CLEAR_BIT(EXTI->IMR1, exti_line); + LL_EXTI_DisableIT_0_31(exti_line); } /* Set HAL COMP handle state */ @@ -414,7 +413,7 @@ HAL_StatusTypeDef HAL_COMP_DeInit(COMP_HandleTypeDef *hcomp) assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance)); /* Set COMP_CSR register to reset value */ - WRITE_REG(hcomp->Instance->CSR, 0x00000000); + WRITE_REG(hcomp->Instance->CSR, 0x00000000U); /* DeInit the low level hardware: SYSCFG, GPIO, CLOCK and NVIC */ HAL_COMP_MspDeInit(hcomp); @@ -485,7 +484,7 @@ __weak void HAL_COMP_MspDeInit(COMP_HandleTypeDef *hcomp) */ HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp) { - __IO uint32_t wait_loop_index = 0; + __IO uint32_t wait_loop_index = 0U; HAL_StatusTypeDef status = HAL_OK; /* Check the COMP handle allocation and lock status */ @@ -510,8 +509,8 @@ HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp) /* Wait loop initialization and execution */ /* Note: Variable divided by 2 to compensate partially */ /* CPU processing cycles. */ - wait_loop_index = (COMP_DELAY_STARTUP_US * (SystemCoreClock / (1000000 * 2))); - while(wait_loop_index != 0) + wait_loop_index = (COMP_DELAY_STARTUP_US * (SystemCoreClock / (1000000U * 2U))); + while(wait_loop_index != 0U) { wait_loop_index--; } @@ -573,7 +572,7 @@ void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp) uint32_t exti_line = COMP_GET_EXTI_LINE(hcomp->Instance); /* Check COMP EXTI flag */ - if(READ_BIT(EXTI->PR1, exti_line) != RESET) + if(LL_EXTI_IsActiveFlag_0_31(exti_line) != RESET) { /* Check whether comparator is in independent or window mode */ if(READ_BIT(COMP12_COMMON->CSR, COMP_CSR_WINMODE) != RESET) @@ -585,12 +584,12 @@ void HAL_COMP_IRQHandler(COMP_HandleTypeDef *hcomp) /* (low or high ) to the other "out of window" area (high or low).*/ /* Both flags must be cleared to call comparator trigger */ /* callback is called once. */ - WRITE_REG(EXTI->PR1, (COMP_EXTI_LINE_COMP1 | COMP_EXTI_LINE_COMP2)); + LL_EXTI_ClearFlag_0_31((COMP_EXTI_LINE_COMP1 | COMP_EXTI_LINE_COMP2)); } else { /* Clear COMP EXTI line pending bit */ - WRITE_REG(EXTI->PR1, exti_line); + LL_EXTI_ClearFlag_0_31(exti_line); } /* COMP trigger user callback */ @@ -666,8 +665,8 @@ HAL_StatusTypeDef HAL_COMP_Lock(COMP_HandleTypeDef *hcomp) * voltage than the input minus * @param hcomp COMP handle * @retval Returns the selected comparator output level: - * @arg @ref COMP_OUTPUT_LEVEL_LOW - * @arg @ref COMP_OUTPUT_LEVEL_HIGH + * @arg COMP_OUTPUT_LEVEL_LOW + * @arg COMP_OUTPUT_LEVEL_HIGH * */ uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp) @@ -741,7 +740,6 @@ HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp) * @} */ -#endif /* HAL_COMP_MODULE_ENABLED */ /** * @} */ @@ -750,4 +748,8 @@ HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp) * @} */ +#endif /* COMP1 || COMP2 */ + +#endif /* HAL_COMP_MODULE_ENABLED */ + /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.h index 2787ba4572..142639e679 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_comp.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_comp.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of COMP HAL module. ****************************************************************************** * @attention @@ -43,8 +41,11 @@ extern "C" { #endif +#if defined (COMP1) || defined (COMP2) + /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" +#include "stm32l4xx_ll_exti.h" /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -98,14 +99,14 @@ typedef struct /** * @brief HAL COMP state machine: HAL COMP states definition */ -#define COMP_STATE_BITFIELD_LOCK ((uint32_t)0x10) +#define COMP_STATE_BITFIELD_LOCK (0x10U) typedef enum { - HAL_COMP_STATE_RESET = 0x00, /*!< COMP not yet initialized */ + HAL_COMP_STATE_RESET = 0x00U, /*!< COMP not yet initialized */ HAL_COMP_STATE_RESET_LOCKED = (HAL_COMP_STATE_RESET | COMP_STATE_BITFIELD_LOCK), /*!< COMP not yet initialized and configuration is locked */ - HAL_COMP_STATE_READY = 0x01, /*!< COMP initialized and ready for use */ + HAL_COMP_STATE_READY = 0x01U, /*!< COMP initialized and ready for use */ HAL_COMP_STATE_READY_LOCKED = (HAL_COMP_STATE_READY | COMP_STATE_BITFIELD_LOCK), /*!< COMP initialized but configuration is locked */ - HAL_COMP_STATE_BUSY = 0x02, /*!< COMP is running */ + HAL_COMP_STATE_BUSY = 0x02U, /*!< COMP is running */ HAL_COMP_STATE_BUSY_LOCKED = (HAL_COMP_STATE_BUSY | COMP_STATE_BITFIELD_LOCK) /*!< COMP is running and configuration is locked */ }HAL_COMP_StateTypeDef; @@ -132,9 +133,8 @@ typedef struct /** @defgroup COMP_WindowMode COMP Window Mode * @{ */ -#define COMP_WINDOWMODE_DISABLE ((uint32_t)0x00000000) /*!< Window mode disable: Comparators instances pair COMP1 and COMP2 are independent */ +#define COMP_WINDOWMODE_DISABLE (0x00000000U) /*!< Window mode disable: Comparators instances pair COMP1 and COMP2 are independent */ #define COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON (COMP_CSR_WINMODE) /*!< Window mode enable: Comparators instances pair COMP1 and COMP2 have their input plus connected together. The common input is COMP1 input plus (COMP2 input plus is no more accessible). */ - /** * @} */ @@ -145,7 +145,7 @@ typedef struct /* Note: For the characteritics of comparator power modes */ /* (propagation delay and power consumption), */ /* refer to device datasheet. */ -#define COMP_POWERMODE_HIGHSPEED ((uint32_t)0x00000000) /*!< High Speed */ +#define COMP_POWERMODE_HIGHSPEED (0x00000000U) /*!< High Speed */ #define COMP_POWERMODE_MEDIUMSPEED (COMP_CSR_PWRMODE_0) /*!< Medium Speed */ #define COMP_POWERMODE_ULTRALOWPOWER (COMP_CSR_PWRMODE) /*!< Ultra-low power mode */ /** @@ -155,7 +155,7 @@ typedef struct /** @defgroup COMP_InputPlus COMP input plus (non-inverting input) * @{ */ -#define COMP_INPUT_PLUS_IO1 ((uint32_t)0x00000000) /*!< Comparator input plus connected to IO1 (pin PC5 for COMP1, pin PB4 for COMP2) */ +#define COMP_INPUT_PLUS_IO1 (0x00000000U) /*!< Comparator input plus connected to IO1 (pin PC5 for COMP1, pin PB4 for COMP2) */ #define COMP_INPUT_PLUS_IO2 (COMP_CSR_INPSEL_0) /*!< Comparator input plus connected to IO2 (pin PB2 for COMP1, pin PB6 for COMP2) */ #if defined(COMP_CSR_INPSEL_1) #define COMP_INPUT_PLUS_IO3 (COMP_CSR_INPSEL_1) /*!< Comparator input plus connected to IO3 (pin PA1 for COMP1, pin PA3 for COMP2) */ @@ -175,7 +175,7 @@ typedef struct #if defined(DAC_CHANNEL2_SUPPORT) #define COMP_INPUT_MINUS_DAC1_CH2 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_0) /*!< Comparator input minus connected to DAC1 channel 2 (DAC_OUT2) */ #endif -#define COMP_INPUT_MINUS_IO1 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 ) /*!< Comparator input minus connected to IO1 (pin PB1 for COMP1, pin PB3 for COMP2) */ +#define COMP_INPUT_MINUS_IO1 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 ) /*!< Comparator input minus connected to IO1 (pin PB1 for COMP1, pin PB3 for COMP2) */ #define COMP_INPUT_MINUS_IO2 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 | COMP_CSR_INMSEL_0) /*!< Comparator input minus connected to IO2 (pin PC4 for COMP1, pin PB7 for COMP2) */ #if defined(COMP_CSR_INMESEL_1) #define COMP_INPUT_MINUS_IO3 ( COMP_CSR_INMESEL_0 | COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 | COMP_CSR_INMSEL_0) /*!< Comparator input minus connected to IO3 (pin PA0 for COMP1, pin PA2 for COMP2) */ @@ -189,10 +189,10 @@ typedef struct /** @defgroup COMP_Hysteresis COMP hysteresis * @{ */ -#define COMP_HYSTERESIS_NONE ((uint32_t)0x00000000) /*!< No hysteresis */ -#define COMP_HYSTERESIS_LOW (COMP_CSR_HYST_0) /*!< Hysteresis level low */ -#define COMP_HYSTERESIS_MEDIUM (COMP_CSR_HYST_1) /*!< Hysteresis level medium */ -#define COMP_HYSTERESIS_HIGH (COMP_CSR_HYST) /*!< Hysteresis level high */ +#define COMP_HYSTERESIS_NONE (0x00000000U) /*!< No hysteresis */ +#define COMP_HYSTERESIS_LOW ( COMP_CSR_HYST_0) /*!< Hysteresis level low */ +#define COMP_HYSTERESIS_MEDIUM (COMP_CSR_HYST_1 ) /*!< Hysteresis level medium */ +#define COMP_HYSTERESIS_HIGH (COMP_CSR_HYST_1 | COMP_CSR_HYST_0) /*!< Hysteresis level high */ /** * @} */ @@ -200,7 +200,7 @@ typedef struct /** @defgroup COMP_OutputPolarity COMP output Polarity * @{ */ -#define COMP_OUTPUTPOL_NONINVERTED ((uint32_t)0x00000000) /*!< COMP output level is not inverted (comparator output is high when the input plus is at a higher voltage than the input minus) */ +#define COMP_OUTPUTPOL_NONINVERTED (0x00000000U) /*!< COMP output level is not inverted (comparator output is high when the input plus is at a higher voltage than the input minus) */ #define COMP_OUTPUTPOL_INVERTED (COMP_CSR_POLARITY) /*!< COMP output level is inverted (comparator output is low when the input plus is at a higher voltage than the input minus) */ /** * @} @@ -209,35 +209,13 @@ typedef struct /** @defgroup COMP_BlankingSrce COMP blanking source * @{ */ -/* Note: Some blanking sources are not available depending on timer */ -/* availability or devices specificities */ -/* (STM32L43xx, STM32L44xx, STM32L45xx, STM32L46xx) */ -#define COMP_BLANKINGSRC_NONE ((uint32_t)0x00000000) /*!< No blanking source */ -/* Blanking sources for COMP instance: COMP1 */ -#define COMP_BLANKINGSRC_TIM1_OC5_COMP1 (COMP_CSR_BLANKING_0) /*!< Blanking source for COMP1: TIM1 OC5 selected as blanking source for comparator */ -#define COMP_BLANKINGSRC_TIM2_OC3_COMP1 (COMP_CSR_BLANKING_1) /*!< Blanking source for COMP1: TIM2 OC3 selected as blanking source for comparator */ -#if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) -#define COMP_BLANKINGSRC_TIM3_OC3_COMP1 (COMP_CSR_BLANKING_2) /*!< Blanking source for COMP1: TIM3 OC3 selected as blanking source for comparator */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx */ - /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ - -/* Blanking sources for COMP instance: COMP2 */ -#if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) -#define COMP_BLANKINGSRC_TIM3_OC4_COMP2 (COMP_CSR_BLANKING_0) /*!< Blanking source for COMP2: TIM3 OC4 selected as blanking source for comparator */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx */ - /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ -#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) -#define COMP_BLANKINGSRC_TIM8_OC5_COMP2 (COMP_CSR_BLANKING_1) /*!< Blanking source for COMP2: TIM8 OC5 selected as blanking source for comparator */ -#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ -#define COMP_BLANKINGSRC_TIM15_OC1_COMP2 (COMP_CSR_BLANKING_2) /*!< Blanking source for COMP2: TIM15 OC1 selected as blanking source for comparator */ +#define COMP_BLANKINGSRC_NONE (0x00000000U) /*!RTSR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() LL_EXTI_EnableRisingTrig_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Disable the COMP1 EXTI line rising edge trigger. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() LL_EXTI_DisableRisingTrig_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Enable the COMP1 EXTI line falling edge trigger. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() LL_EXTI_EnableFallingTrig_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Disable the COMP1 EXTI line falling edge trigger. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() LL_EXTI_DisableFallingTrig_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Enable the COMP1 EXTI line rising & falling edge trigger. * @retval None */ #define __HAL_COMP_COMP1_EXTI_ENABLE_RISING_FALLING_EDGE() do { \ - __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE(); \ - __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE(); \ + LL_EXTI_EnableRisingTrig_0_31(COMP_EXTI_LINE_COMP1); \ + LL_EXTI_EnableFallingTrig_0_31(COMP_EXTI_LINE_COMP1); \ } while(0) /** @@ -370,135 +348,135 @@ typedef struct * @retval None */ #define __HAL_COMP_COMP1_EXTI_DISABLE_RISING_FALLING_EDGE() do { \ - __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE(); \ - __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE(); \ + LL_EXTI_DisableRisingTrig_0_31(COMP_EXTI_LINE_COMP1); \ + LL_EXTI_DisableFallingTrig_0_31(COMP_EXTI_LINE_COMP1); \ } while(0) /** * @brief Enable the COMP1 EXTI line in interrupt mode. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_ENABLE_IT() LL_EXTI_EnableIT_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Disable the COMP1 EXTI line in interrupt mode. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_DISABLE_IT() LL_EXTI_DisableIT_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Generate a software interrupt on the COMP1 EXTI line. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_GENERATE_SWIT() LL_EXTI_GenerateSWI_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Enable the COMP1 EXTI line in event mode. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_ENABLE_EVENT() LL_EXTI_EnableEvent_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Disable the COMP1 EXTI line in event mode. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_DISABLE_EVENT() LL_EXTI_DisableEvent_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Check whether the COMP1 EXTI line flag is set. * @retval RESET or SET */ -#define __HAL_COMP_COMP1_EXTI_GET_FLAG() READ_BIT(EXTI->PR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_GET_FLAG() LL_EXTI_IsActiveFlag_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Clear the COMP1 EXTI flag. * @retval None */ -#define __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR1, COMP_EXTI_LINE_COMP1) +#define __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() LL_EXTI_ClearFlag_0_31(COMP_EXTI_LINE_COMP1) /** * @brief Enable the COMP2 EXTI line rising edge trigger. * @retval None - */ -#define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP2) + */ +#define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() LL_EXTI_EnableRisingTrig_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Disable the COMP2 EXTI line rising edge trigger. * @retval None - */ -#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR1, COMP_EXTI_LINE_COMP2) + */ +#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() LL_EXTI_DisableRisingTrig_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Enable the COMP2 EXTI line falling edge trigger. * @retval None - */ -#define __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP2) + */ +#define __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() LL_EXTI_EnableFallingTrig_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Disable the COMP2 EXTI line falling edge trigger. * @retval None - */ -#define __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR1, COMP_EXTI_LINE_COMP2) + */ +#define __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() LL_EXTI_DisableFallingTrig_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Enable the COMP2 EXTI line rising & falling edge trigger. * @retval None - */ + */ #define __HAL_COMP_COMP2_EXTI_ENABLE_RISING_FALLING_EDGE() do { \ - __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE(); \ - __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE(); \ + LL_EXTI_EnableRisingTrig_0_31(COMP_EXTI_LINE_COMP2); \ + LL_EXTI_EnableFallingTrig_0_31(COMP_EXTI_LINE_COMP2); \ } while(0) /** * @brief Disable the COMP2 EXTI line rising & falling edge trigger. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_FALLING_EDGE() do { \ - __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE(); \ - __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE(); \ +#define __HAL_COMP_COMP2_EXTI_DISABLE_RISING_FALLING_EDGE() do { \ + LL_EXTI_DisableRisingTrig_0_31(COMP_EXTI_LINE_COMP2); \ + LL_EXTI_DisableFallingTrig_0_31(COMP_EXTI_LINE_COMP2); \ } while(0) /** * @brief Enable the COMP2 EXTI line in interrupt mode. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_ENABLE_IT() LL_EXTI_EnableIT_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Disable the COMP2 EXTI line in interrupt mode. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_DISABLE_IT() LL_EXTI_DisableIT_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Generate a software interrupt on the COMP2 EXTI line. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_GENERATE_SWIT() LL_EXTI_GenerateSWI_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Enable the COMP2 EXTI line in event mode. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_ENABLE_EVENT() LL_EXTI_EnableEvent_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Disable the COMP2 EXTI line in event mode. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_DISABLE_EVENT() LL_EXTI_DisableEvent_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Check whether the COMP2 EXTI line flag is set. * @retval RESET or SET */ -#define __HAL_COMP_COMP2_EXTI_GET_FLAG() READ_BIT(EXTI->PR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_GET_FLAG() LL_EXTI_IsActiveFlag_0_31(COMP_EXTI_LINE_COMP2) /** * @brief Clear the COMP2 EXTI flag. * @retval None */ -#define __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() WRITE_REG(EXTI->PR1, COMP_EXTI_LINE_COMP2) +#define __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() LL_EXTI_ClearFlag_0_31(COMP_EXTI_LINE_COMP2) /** * @} @@ -514,11 +492,12 @@ typedef struct /** @defgroup COMP_Private_Constants COMP Private Constants * @{ */ + /** @defgroup COMP_ExtiLine COMP EXTI Lines * @{ */ -#define COMP_EXTI_LINE_COMP1 (EXTI_IMR1_IM21) /*!< EXTI line 21 connected to COMP1 output */ -#define COMP_EXTI_LINE_COMP2 (EXTI_IMR1_IM22) /*!< EXTI line 22 connected to COMP2 output */ +#define COMP_EXTI_LINE_COMP1 (LL_EXTI_LINE_21) /*!< EXTI line 21 connected to COMP1 output */ +#define COMP_EXTI_LINE_COMP2 (LL_EXTI_LINE_22) /*!< EXTI line 22 connected to COMP2 output */ /** * @} */ @@ -526,10 +505,10 @@ typedef struct /** @defgroup COMP_ExtiLine COMP EXTI Lines * @{ */ -#define COMP_EXTI_IT ((uint32_t) 0x01) /*!< EXTI line event with interruption */ -#define COMP_EXTI_EVENT ((uint32_t) 0x02) /*!< EXTI line event only (without interruption) */ -#define COMP_EXTI_RISING ((uint32_t) 0x10) /*!< EXTI line event on rising edge */ -#define COMP_EXTI_FALLING ((uint32_t) 0x20) /*!< EXTI line event on falling edge */ +#define COMP_EXTI_IT (0x01U) /*!< EXTI line event with interruption */ +#define COMP_EXTI_EVENT (0x02U) /*!< EXTI line event only (without interruption) */ +#define COMP_EXTI_RISING (0x10U) /*!< EXTI line event on rising edge */ +#define COMP_EXTI_FALLING (0x20U) /*!< EXTI line event on falling edge */ /** * @} */ @@ -551,8 +530,8 @@ typedef struct * @param __INSTANCE__ specifies the COMP instance. * @retval value of @ref COMP_ExtiLine */ -#define COMP_GET_EXTI_LINE(__INSTANCE__) (((__INSTANCE__) == COMP1) ? \ - COMP_EXTI_LINE_COMP1 : COMP_EXTI_LINE_COMP2) +#define COMP_GET_EXTI_LINE(__INSTANCE__) (((__INSTANCE__) == COMP1) ? COMP_EXTI_LINE_COMP1 \ + : COMP_EXTI_LINE_COMP2) /** * @} */ @@ -576,7 +555,7 @@ typedef struct ((__INPUT_PLUS__) == COMP_INPUT_PLUS_IO2)) #endif -/* Note: On this STM32 family, comparator input minus parameters are */ +/* Note: On this STM32 serie, comparator input minus parameters are */ /* the same on all COMP instances. */ /* However, comparator instance kept as macro parameter for */ /* compatibility with other STM32 families. */ @@ -630,74 +609,29 @@ typedef struct #define IS_COMP_OUTPUTPOL(__POL__) (((__POL__) == COMP_OUTPUTPOL_NONINVERTED) || \ ((__POL__) == COMP_OUTPUTPOL_INVERTED)) -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) +#define IS_COMP_BLANKINGSRCE(__OUTPUT_BLANKING_SOURCE__) \ + ( ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_NONE) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM8_OC5_COMP2) \ + || ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2) \ + ) -#define IS_COMP_BLANKINGSRCE(__SOURCE__) (((__SOURCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)) +#define IS_COMP_BLANKINGSRC_INSTANCE(__INSTANCE__, __OUTPUT_BLANKING_SOURCE__) \ + ((((__INSTANCE__) == COMP1) && \ + (((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_NONE) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1))) \ + || \ + (((__INSTANCE__) == COMP2) && \ + (((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_NONE) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM8_OC5_COMP2) || \ + ((__OUTPUT_BLANKING_SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)))) -#define IS_COMP_BLANKINGSRC_INSTANCE(__INSTANCE__, __BLANKINGSRCE__) \ - ((((__INSTANCE__) == COMP1) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1))) \ - || \ - (((__INSTANCE__) == COMP2) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)))) - -#endif /* STM32L431xx || STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx */ - -#if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) - -#define IS_COMP_BLANKINGSRCE(__SOURCE__) (((__SOURCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)) - -#define IS_COMP_BLANKINGSRC_INSTANCE(__INSTANCE__, __BLANKINGSRCE__) \ - ((((__INSTANCE__) == COMP1) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1))) \ - || \ - (((__INSTANCE__) == COMP2) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)))) - -#endif /* STM32L451xx || STM32L452xx || STM32L462xx */ - -#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) - -#define IS_COMP_BLANKINGSRCE(__SOURCE__) (((__SOURCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM8_OC5_COMP2) || \ - ((__SOURCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)) - -#define IS_COMP_BLANKINGSRC_INSTANCE(__INSTANCE__, __BLANKINGSRCE__) \ - ((((__INSTANCE__) == COMP1) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM1_OC5_COMP1) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM2_OC3_COMP1) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM3_OC3_COMP1))) \ - || \ - (((__INSTANCE__) == COMP2) && \ - (((__BLANKINGSRCE__) == COMP_BLANKINGSRC_NONE) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM3_OC4_COMP2) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM8_OC5_COMP2) || \ - ((__BLANKINGSRCE__) == COMP_BLANKINGSRC_TIM15_OC1_COMP2)))) - -#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ #define IS_COMP_TRIGGERMODE(__MODE__) (((__MODE__) == COMP_TRIGGERMODE_NONE) || \ ((__MODE__) == COMP_TRIGGERMODE_IT_RISING) || \ @@ -785,6 +719,8 @@ HAL_COMP_StateTypeDef HAL_COMP_GetState(COMP_HandleTypeDef *hcomp); } #endif +#endif /* COMP1 || COMP2 */ + #endif /* __STM32L4xx_HAL_COMP_H */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h index d0a45d7df2..cb4789fe3c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h @@ -2,9 +2,9 @@ ****************************************************************************** * @file stm32l4xx_hal_conf.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 - * @brief HAL configuration file. + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32l4xx_hal_conf.h. ****************************************************************************** * @attention * @@ -53,6 +53,7 @@ #define HAL_MODULE_ENABLED #define HAL_ADC_MODULE_ENABLED #define HAL_CAN_MODULE_ENABLED +/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ #define HAL_COMP_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED #define HAL_CRC_MODULE_ENABLED @@ -62,8 +63,10 @@ #define HAL_DFSDM_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_DMA2D_MODULE_ENABLED +#define HAL_DSI_MODULE_ENABLED #define HAL_FIREWALL_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED +#define HAL_GFXMMU_MODULE_ENABLED #define HAL_HASH_MODULE_ENABLED #define HAL_HCD_MODULE_ENABLED #define HAL_NAND_MODULE_ENABLED @@ -75,7 +78,9 @@ #define HAL_IWDG_MODULE_ENABLED #define HAL_LCD_MODULE_ENABLED #define HAL_LPTIM_MODULE_ENABLED +#define HAL_LTDC_MODULE_ENABLED #define HAL_OPAMP_MODULE_ENABLED +#define HAL_OSPI_MODULE_ENABLED #define HAL_PCD_MODULE_ENABLED #define HAL_PWR_MODULE_ENABLED #define HAL_QSPI_MODULE_ENABLED @@ -239,6 +244,10 @@ #include "stm32l4xx_hal_can.h" #endif /* HAL_CAN_MODULE_ENABLED */ +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED + #include "Legacy/stm32l4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + #ifdef HAL_COMP_MODULE_ENABLED #include "stm32l4xx_hal_comp.h" #endif /* HAL_COMP_MODULE_ENABLED */ @@ -263,6 +272,10 @@ #include "stm32l4xx_hal_dma2d.h" #endif /* HAL_DMA2D_MODULE_ENABLED */ +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32l4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + #ifdef HAL_FIREWALL_MODULE_ENABLED #include "stm32l4xx_hal_firewall.h" #endif /* HAL_FIREWALL_MODULE_ENABLED */ @@ -303,10 +316,18 @@ #include "stm32l4xx_hal_lptim.h" #endif /* HAL_LPTIM_MODULE_ENABLED */ +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32l4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + #ifdef HAL_OPAMP_MODULE_ENABLED #include "stm32l4xx_hal_opamp.h" #endif /* HAL_OPAMP_MODULE_ENABLED */ +#ifdef HAL_OSPI_MODULE_ENABLED + #include "stm32l4xx_hal_ospi.h" +#endif /* HAL_OSPI_MODULE_ENABLED */ + #ifdef HAL_PWR_MODULE_ENABLED #include "stm32l4xx_hal_pwr.h" #endif /* HAL_PWR_MODULE_ENABLED */ @@ -379,6 +400,10 @@ #include "stm32l4xx_hal_hcd.h" #endif /* HAL_HCD_MODULE_ENABLED */ +#ifdef HAL_GFXMMU_MODULE_ENABLED + #include "stm32l4xx_hal_gfxmmu.h" +#endif /* HAL_GFXMMU_MODULE_ENABLED */ + /* Exported macro ------------------------------------------------------------*/ #ifdef USE_FULL_ASSERT /* ALL MBED targets use same stm32_assert.h */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.c index c39d7c6d14..99afff61e4 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cortex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief CORTEX HAL module driver. * This file provides firmware functions to manage the following * functionalities of the CORTEX: @@ -337,6 +335,9 @@ void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPre */ void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) { + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + /* Set interrupt pending */ NVIC_SetPendingIRQ(IRQn); } @@ -352,6 +353,9 @@ void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) */ uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) { + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + /* Return 1 if pending else 0 */ return NVIC_GetPendingIRQ(IRQn); } @@ -365,6 +369,9 @@ uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) */ void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) { + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + /* Clear pending interrupt */ NVIC_ClearPendingIRQ(IRQn); } @@ -426,6 +433,46 @@ __weak void HAL_SYSTICK_Callback(void) } #if (__MPU_PRESENT == 1) +/** + * @brief Disable the MPU. + * @retval None + */ +void HAL_MPU_Disable(void) +{ + /* Make sure outstanding transfers are done */ + __DMB(); + + /* Disable fault exceptions */ + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; + + /* Disable the MPU and clear the control register*/ + MPU->CTRL = 0U; +} + +/** + * @brief Enable the MPU. + * @param MPU_Control: Specifies the control mode of the MPU during hard fault, + * NMI, FAULTMASK and privileged accessto the default memory + * This parameter can be one of the following values: + * @arg MPU_HFNMI_PRIVDEF_NONE + * @arg MPU_HARDFAULT_NMI + * @arg MPU_PRIVILEGED_DEFAULT + * @arg MPU_HFNMI_PRIVDEF + * @retval None + */ +void HAL_MPU_Enable(uint32_t MPU_Control) +{ + /* Enable the MPU */ + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; + + /* Enable fault exceptions */ + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; + + /* Ensure MPU settings take effects */ + __DSB(); + __ISB(); +} + /** * @brief Initialize and configure the Region and the memory to be protected. * @param MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.h index 037c29e472..f3eea8a70c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cortex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cortex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CORTEX HAL module. ****************************************************************************** * @attention @@ -289,40 +287,6 @@ void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); void HAL_NVIC_SystemReset(void); uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb); -#if (__MPU_PRESENT == 1) -/** - * @brief Disable the MPU. - * @retval None - */ -__STATIC_INLINE void HAL_MPU_Disable(void) -{ - /* Disable fault exceptions */ - SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; - - /* Disable the MPU */ - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; -} - -/** - * @brief Enable the MPU. - * @param MPU_Control: Specifies the control mode of the MPU during hard fault, - * NMI, FAULTMASK and privileged accessto the default memory - * This parameter can be one of the following values: - * @arg MPU_HFNMI_PRIVDEF_NONE - * @arg MPU_HARDFAULT_NMI - * @arg MPU_PRIVILEGED_DEFAULT - * @arg MPU_HFNMI_PRIVDEF - * @retval None - */ -__STATIC_INLINE void HAL_MPU_Enable(uint32_t MPU_Control) -{ - /* Enable the MPU */ - MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; - - /* Enable fault exceptions */ - SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -} -#endif /* __MPU_PRESENT */ /** * @} */ @@ -343,6 +307,8 @@ void HAL_SYSTICK_IRQHandler(void); void HAL_SYSTICK_Callback(void); #if (__MPU_PRESENT == 1) +void HAL_MPU_Enable(uint32_t MPU_Control); +void HAL_MPU_Disable(void); void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); #endif /* __MPU_PRESENT */ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.c index 5e1d25a24a..ffa5acb034 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.c @@ -2,15 +2,13 @@ ****************************************************************************** * @file stm32l4xx_hal_crc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 - * @brief CRC HAL module driver. - * This file provides firmware functions to manage the following + * @brief CRC HAL module driver. + * This file provides firmware functions to manage the following * functionalities of the CRC peripheral: * + Initialization and de-initialization functions - * + Peripheral Control functions + * + Peripheral Control functions * + Peripheral State functions - * + * @verbatim =============================================================================== ##### How to use this driver ##### @@ -22,11 +20,11 @@ (++) specify initialization value (IP default or non-default one) (++) specify input data format (++) specify input or output data inversion mode if any - (+) Use HAL_CRC_Accumulate() function to compute the CRC value of the - input data buffer starting with the previously computed CRC as + (+) Use HAL_CRC_Accumulate() function to compute the CRC value of the + input data buffer starting with the previously computed CRC as initialization value - (+) Use HAL_CRC_Calculate() function to compute the CRC value of the - input data buffer starting with the defined initialization value + (+) Use HAL_CRC_Calculate() function to compute the CRC value of the + input data buffer starting with the defined initialization value (default or non-default) to initiate CRC calculation @endverbatim @@ -94,20 +92,20 @@ static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint3 * @{ */ -/** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions. +/** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions. * -@verbatim +@verbatim =============================================================================== ##### Initialization and de-initialization functions ##### =============================================================================== [..] This section provides functions allowing to: - (+) Initialize the CRC according to the specified parameters + (+) Initialize the CRC according to the specified parameters in the CRC_InitTypeDef and create the associated handle (+) DeInitialize the CRC peripheral (+) Initialize the CRC MSP (MCU Specific Package) (+) DeInitialize the CRC MSP - + @endverbatim * @{ */ @@ -125,28 +123,28 @@ HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) { return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); if(hcrc->State == HAL_CRC_STATE_RESET) - { + { /* Allocate lock resource and initialize it */ hcrc->Lock = HAL_UNLOCKED; /* Init the low level hardware */ HAL_CRC_MspInit(hcrc); } - - hcrc->State = HAL_CRC_STATE_BUSY; - - /* check whether or not non-default generating polynomial has been + + hcrc->State = HAL_CRC_STATE_BUSY; + + /* check whether or not non-default generating polynomial has been * picked up by user */ - assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse)); + assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse)); if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE) { /* initialize IP with default generating polynomial */ - WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY); + WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY); MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B); } else @@ -157,67 +155,67 @@ HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) return HAL_ERROR; } } - - /* check whether or not non-default CRC initial value has been + + /* check whether or not non-default CRC initial value has been * picked up by user */ assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse)); if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE) { - WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE); + WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE); } else { WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue); } - + /* set input data inversion mode */ - assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode)); - MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode); - + assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode)); + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode); + /* set output data inversion mode */ - assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode)); - MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode); - + assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode)); + MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode); + /* makes sure the input data format (bytes, halfwords or words stream) * is properly specified by user */ assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat)); /* Change CRC peripheral state */ hcrc->State = HAL_CRC_STATE_READY; - + /* Return function status */ return HAL_OK; } /** - * @brief DeInitialize the CRC peripheral. + * @brief DeInitialize the CRC peripheral. * @param hcrc: CRC handle * @retval HAL status */ HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc) -{ +{ /* Check the CRC handle allocation */ if(hcrc == NULL) { return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); - + /* Check the CRC peripheral state */ if(hcrc->State == HAL_CRC_STATE_BUSY) { return HAL_BUSY; } - + /* Change CRC peripheral state */ hcrc->State = HAL_CRC_STATE_BUSY; - + /* Reset CRC calculation unit */ __HAL_CRC_DR_RESET(hcrc); - + /* Reset IDR register content */ CLEAR_BIT(hcrc->Instance->IDR, CRC_IDR_IDR) ; @@ -268,19 +266,19 @@ __weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc) * @} */ -/** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions - * @brief management functions. +/** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions + * @brief management functions. * -@verbatim +@verbatim =============================================================================== ##### Peripheral Control functions ##### - =============================================================================== + =============================================================================== [..] This section provides functions allowing to: (+) compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer using the combination of the previous CRC value and the new one - + [..] or - + (+) compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer independently of the previous CRC value. @@ -288,35 +286,35 @@ __weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc) * @{ */ -/** +/** * @brief Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer * starting with the previously computed CRC as initialization value. * @param hcrc: CRC handle * @param pBuffer: pointer to the input data buffer, exact input data format is - * provided by hcrc->InputDataFormat. + * provided by hcrc->InputDataFormat. * @param BufferLength: input data buffer length (number of bytes if pBuffer * type is * uint8_t, number of half-words if pBuffer type is * uint16_t, * number of words if pBuffer type is * uint32_t). * @note By default, the API expects a uint32_t pointer as input buffer parameter. * Input buffer pointers with other types simply need to be cast in uint32_t - * and the API will internally adjust its input data processing based on the - * handle field hcrc->InputDataFormat. + * and the API will internally adjust its input data processing based on the + * handle field hcrc->InputDataFormat. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits) */ uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength) { uint32_t index = 0; /* CRC input data buffer index */ uint32_t temp = 0; /* CRC output (read from hcrc->Instance->DR register) */ - + /* Process locked */ - __HAL_LOCK(hcrc); - - /* Change CRC peripheral state */ + __HAL_LOCK(hcrc); + + /* Change CRC peripheral state */ hcrc->State = HAL_CRC_STATE_BUSY; - + switch (hcrc->InputDataFormat) { - case CRC_INPUTDATA_FORMAT_WORDS: + case CRC_INPUTDATA_FORMAT_WORDS: /* Enter Data to the CRC calculator */ for(index = 0; index < BufferLength; index++) { @@ -324,63 +322,63 @@ uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_ } temp = hcrc->Instance->DR; break; - - case CRC_INPUTDATA_FORMAT_BYTES: + + case CRC_INPUTDATA_FORMAT_BYTES: temp = CRC_Handle_8(hcrc, (uint8_t*)pBuffer, BufferLength); break; - - case CRC_INPUTDATA_FORMAT_HALFWORDS: + + case CRC_INPUTDATA_FORMAT_HALFWORDS: temp = CRC_Handle_16(hcrc, (uint16_t*)pBuffer, BufferLength); break; - + default: - break; + break; } - - /* Change CRC peripheral state */ - hcrc->State = HAL_CRC_STATE_READY; - + + /* Change CRC peripheral state */ + hcrc->State = HAL_CRC_STATE_READY; + /* Process unlocked */ __HAL_UNLOCK(hcrc); - - /* Return the CRC computed value */ + + /* Return the CRC computed value */ return temp; } -/** +/** * @brief Compute the 7, 8, 16 or 32-bit CRC value of an 8, 16 or 32-bit data buffer * starting with hcrc->Instance->INIT as initialization value. * @param hcrc: CRC handle * @param pBuffer: pointer to the input data buffer, exact input data format is - * provided by hcrc->InputDataFormat. + * provided by hcrc->InputDataFormat. * @param BufferLength: input data buffer length (number of bytes if pBuffer * type is * uint8_t, number of half-words if pBuffer type is * uint16_t, * number of words if pBuffer type is * uint32_t). * @note By default, the API expects a uint32_t pointer as input buffer parameter. * Input buffer pointers with other types simply need to be cast in uint32_t - * and the API will internally adjust its input data processing based on the - * handle field hcrc->InputDataFormat. + * and the API will internally adjust its input data processing based on the + * handle field hcrc->InputDataFormat. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits) - */ + */ uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength) { uint32_t index = 0; /* CRC input data buffer index */ uint32_t temp = 0; /* CRC output (read from hcrc->Instance->DR register) */ - + /* Process locked */ - __HAL_LOCK(hcrc); - - /* Change CRC peripheral state */ + __HAL_LOCK(hcrc); + + /* Change CRC peripheral state */ hcrc->State = HAL_CRC_STATE_BUSY; - - /* Reset CRC Calculation Unit (hcrc->Instance->INIT is + + /* Reset CRC Calculation Unit (hcrc->Instance->INIT is * written in hcrc->Instance->DR) */ __HAL_CRC_DR_RESET(hcrc); - + switch (hcrc->InputDataFormat) { - case CRC_INPUTDATA_FORMAT_WORDS: + case CRC_INPUTDATA_FORMAT_WORDS: /* Enter 32-bit input data to the CRC calculator */ for(index = 0; index < BufferLength; index++) { @@ -388,28 +386,28 @@ uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t } temp = hcrc->Instance->DR; break; - - case CRC_INPUTDATA_FORMAT_BYTES: + + case CRC_INPUTDATA_FORMAT_BYTES: /* Specific 8-bit input data handling */ temp = CRC_Handle_8(hcrc, (uint8_t*)pBuffer, BufferLength); break; - - case CRC_INPUTDATA_FORMAT_HALFWORDS: + + case CRC_INPUTDATA_FORMAT_HALFWORDS: /* Specific 16-bit input data handling */ temp = CRC_Handle_16(hcrc, (uint16_t*)pBuffer, BufferLength); break; - + default: - break; + break; } - /* Change CRC peripheral state */ - hcrc->State = HAL_CRC_STATE_READY; - + /* Change CRC peripheral state */ + hcrc->State = HAL_CRC_STATE_READY; + /* Process unlocked */ __HAL_UNLOCK(hcrc); - - /* Return the CRC computed value */ + + /* Return the CRC computed value */ return temp; } @@ -418,12 +416,12 @@ uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t */ /** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions - * @brief Peripheral State functions. + * @brief Peripheral State functions. * -@verbatim +@verbatim =============================================================================== ##### Peripheral State functions ##### - =============================================================================== + =============================================================================== [..] This subsection permits to get in run-time the status of the peripheral. @@ -454,9 +452,9 @@ HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc) * @{ */ -/** +/** * @brief Enter 8-bit input data to the CRC calculator. - * Specific data handling to optimize processing time. + * Specific data handling to optimize processing time. * @param hcrc: CRC handle * @param pBuffer: pointer to the input data buffer * @param BufferLength: input data buffer length @@ -465,63 +463,72 @@ HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc) static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength) { uint32_t i = 0; /* input data buffer index */ - + uint16_t data; + __IO uint16_t *pReg; + /* Processing time optimization: 4 bytes are entered in a row with a single word write, * last bytes must be carefully fed to the CRC calculator to ensure a correct type * handling by the IP */ for(i = 0; i < (BufferLength/4); i++) { - hcrc->Instance->DR = ((uint32_t)pBuffer[4*i]<<24) | ((uint32_t)pBuffer[4*i+1]<<16) | ((uint32_t)pBuffer[4*i+2]<<8) | (uint32_t)pBuffer[4*i+3]; + hcrc->Instance->DR = ((uint32_t)pBuffer[4*i]<<24) | ((uint32_t)pBuffer[4*i+1]<<16) | ((uint32_t)pBuffer[4*i+2]<<8) | (uint32_t)pBuffer[4*i+3]; } /* last bytes specific handling */ if ((BufferLength%4) != 0) { if (BufferLength%4 == 1) { - *(uint8_t volatile*) (&hcrc->Instance->DR) = pBuffer[4*i]; + *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4*i]; } if (BufferLength%4 == 2) { - *(uint16_t volatile*) (&hcrc->Instance->DR) = ((uint32_t)pBuffer[4*i]<<8) | (uint32_t)pBuffer[4*i+1]; + data = (uint16_t)(pBuffer[4*i]<<8) | (uint16_t)pBuffer[4*i+1]; + pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); + *pReg = data; } if (BufferLength%4 == 3) { - *(uint16_t volatile*) (&hcrc->Instance->DR) = ((uint32_t)pBuffer[4*i]<<8) | (uint32_t)pBuffer[4*i+1]; - *(uint8_t volatile*) (&hcrc->Instance->DR) = pBuffer[4*i+2]; + data = (uint16_t)(pBuffer[4*i]<<8) | (uint16_t)pBuffer[4*i+1]; + pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); + *pReg = data; + + *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4*i+2]; } } - - /* Return the CRC computed value */ + + /* Return the CRC computed value */ return hcrc->Instance->DR; } -/** +/** * @brief Enter 16-bit input data to the CRC calculator. - * Specific data handling to optimize processing time. + * Specific data handling to optimize processing time. * @param hcrc: CRC handle * @param pBuffer: pointer to the input data buffer * @param BufferLength: input data buffer length * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits) - */ + */ static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength) { uint32_t i = 0; /* input data buffer index */ - + __IO uint16_t *pReg; + /* Processing time optimization: 2 HalfWords are entered in a row with a single word write, - * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure + * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure * a correct type handling by the IP */ for(i = 0; i < (BufferLength/2); i++) { - hcrc->Instance->DR = ((uint32_t)pBuffer[2*i]<<16) | (uint32_t)pBuffer[2*i+1]; + hcrc->Instance->DR = ((uint32_t)pBuffer[2*i]<<16) | (uint32_t)pBuffer[2*i+1]; } if ((BufferLength%2) != 0) { - *(uint16_t volatile*) (&hcrc->Instance->DR) = pBuffer[2*i]; + pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); + *pReg = pBuffer[2*i]; } - - /* Return the CRC computed value */ + + /* Return the CRC computed value */ return hcrc->Instance->DR; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.h index 6bbae9f187..035242c9dc 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_crc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CRC HAL module. ****************************************************************************** * @attention @@ -156,7 +154,7 @@ typedef struct /** @defgroup CRC_Default_Polynomial_Value Default CRC generating polynomial * @{ */ -#define DEFAULT_CRC32_POLY 0x04C11DB7 /*!< X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2+ X +1 */ +#define DEFAULT_CRC32_POLY 0x04C11DB7U /*!< X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2+ X +1 */ /** * @} */ @@ -164,7 +162,7 @@ typedef struct /** @defgroup CRC_Default_InitValue Default CRC computation initialization value * @{ */ -#define DEFAULT_CRC_INITVALUE 0xFFFFFFFF /*!< Initial CRC default value */ +#define DEFAULT_CRC_INITVALUE 0xFFFFFFFFU /*!< Initial CRC default value */ /** * @} */ @@ -172,8 +170,8 @@ typedef struct /** @defgroup CRC_Default_Polynomial Indicates whether or not default polynomial is used * @{ */ -#define DEFAULT_POLYNOMIAL_ENABLE ((uint8_t)0x00) /*!< Enable default generating polynomial 0x04C11DB7 */ -#define DEFAULT_POLYNOMIAL_DISABLE ((uint8_t)0x01) /*!< Disable default generating polynomial 0x04C11DB7 */ +#define DEFAULT_POLYNOMIAL_ENABLE ((uint8_t)0x00U) /*!< Enable default generating polynomial 0x04C11DB7 */ +#define DEFAULT_POLYNOMIAL_DISABLE ((uint8_t)0x01U) /*!< Disable default generating polynomial 0x04C11DB7 */ /** * @} */ @@ -181,8 +179,8 @@ typedef struct /** @defgroup CRC_Default_InitValue_Use Indicates whether or not default init value is used * @{ */ -#define DEFAULT_INIT_VALUE_ENABLE ((uint8_t)0x00) /*!< Enable initial CRC default value */ -#define DEFAULT_INIT_VALUE_DISABLE ((uint8_t)0x01) /*!< Disable initial CRC default value */ +#define DEFAULT_INIT_VALUE_ENABLE ((uint8_t)0x00U) /*!< Enable initial CRC default value */ +#define DEFAULT_INIT_VALUE_DISABLE ((uint8_t)0x01U) /*!< Disable initial CRC default value */ /** * @} */ @@ -190,10 +188,10 @@ typedef struct /** @defgroup CRC_Polynomial_Sizes Polynomial sizes to configure the IP * @{ */ -#define CRC_POLYLENGTH_32B ((uint32_t)0x00000000) /*!< Resort to a 32-bit long generating polynomial */ -#define CRC_POLYLENGTH_16B ((uint32_t)CRC_CR_POLYSIZE_0) /*!< Resort to a 16-bit long generating polynomial */ -#define CRC_POLYLENGTH_8B ((uint32_t)CRC_CR_POLYSIZE_1) /*!< Resort to a 8-bit long generating polynomial */ -#define CRC_POLYLENGTH_7B ((uint32_t)CRC_CR_POLYSIZE) /*!< Resort to a 7-bit long generating polynomial */ +#define CRC_POLYLENGTH_32B (0x00000000U) /*!< Resort to a 32-bit long generating polynomial */ +#define CRC_POLYLENGTH_16B (CRC_CR_POLYSIZE_0) /*!< Resort to a 16-bit long generating polynomial */ +#define CRC_POLYLENGTH_8B (CRC_CR_POLYSIZE_1) /*!< Resort to a 8-bit long generating polynomial */ +#define CRC_POLYLENGTH_7B (CRC_CR_POLYSIZE) /*!< Resort to a 7-bit long generating polynomial */ /** * @} */ @@ -201,10 +199,10 @@ typedef struct /** @defgroup CRC_Polynomial_Size_Definitions CRC polynomial possible sizes actual definitions * @{ */ -#define HAL_CRC_LENGTH_32B 32 /*!< 32-bit long CRC */ -#define HAL_CRC_LENGTH_16B 16 /*!< 16-bit long CRC */ -#define HAL_CRC_LENGTH_8B 8 /*!< 8-bit long CRC */ -#define HAL_CRC_LENGTH_7B 7 /*!< 7-bit long CRC */ +#define HAL_CRC_LENGTH_32B 32U /*!< 32-bit long CRC */ +#define HAL_CRC_LENGTH_16B 16U /*!< 16-bit long CRC */ +#define HAL_CRC_LENGTH_8B 8U /*!< 8-bit long CRC */ +#define HAL_CRC_LENGTH_7B 7U /*!< 7-bit long CRC */ /** * @} */ @@ -216,10 +214,10 @@ typedef struct * an error is triggered in HAL_CRC_Init() if InputDataFormat field is set * to CRC_INPUT_FORMAT_UNDEFINED: the format MUST be defined by the user for * the CRC APIs to provide a correct result */ -#define CRC_INPUTDATA_FORMAT_UNDEFINED ((uint32_t)0x00000000) /*!< Undefined input data format */ -#define CRC_INPUTDATA_FORMAT_BYTES ((uint32_t)0x00000001) /*!< Input data in byte format */ -#define CRC_INPUTDATA_FORMAT_HALFWORDS ((uint32_t)0x00000002) /*!< Input data in half-word format */ -#define CRC_INPUTDATA_FORMAT_WORDS ((uint32_t)0x00000003) /*!< Input data in word format */ +#define CRC_INPUTDATA_FORMAT_UNDEFINED 0x00000000U /*!< Undefined input data format */ +#define CRC_INPUTDATA_FORMAT_BYTES 0x00000001U /*!< Input data in byte format */ +#define CRC_INPUTDATA_FORMAT_HALFWORDS 0x00000002U /*!< Input data in half-word format */ +#define CRC_INPUTDATA_FORMAT_WORDS 0x00000003U /*!< Input data in word format */ /** * @} */ @@ -265,17 +263,19 @@ typedef struct #define __HAL_CRC_INITIALCRCVALUE_CONFIG(__HANDLE__, __INIT__) ((__HANDLE__)->Instance->INIT = (__INIT__)) /** - * @brief Store a 8-bit data in the Independent Data(ID) register. + * @brief Store data in the Independent Data (ID) register. * @param __HANDLE__: CRC handle - * @param __VALUE__: 8-bit value to be stored in the ID register + * @param __VALUE__: Value to be stored in the ID register + * @note Refer to the Reference Manual to get the authorized __VALUE__ length in bits * @retval None */ -#define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (WRITE_REG((__HANDLE__)->Instance->IDR, (__VALUE__))) +#define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (MODIFY_REG((__HANDLE__)->Instance->IDR, CRC_IDR_IDR, (__VALUE__))) /** - * @brief Return the 8-bit data stored in the Independent Data(ID) register. + * @brief Return the data stored in the Independent Data (ID) register. * @param __HANDLE__: CRC handle - * @retval 8-bit value of the ID register + * @note Refer to the Reference Manual to get the authorized __VALUE__ length in bits + * @retval Value of the ID register */ #define __HAL_CRC_GET_IDR(__HANDLE__) (((__HANDLE__)->Instance->IDR) & CRC_IDR_IDR) /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.c index e1ce5df19e..cc30ffe074 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_crc_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended CRC HAL module driver. * This file provides firmware functions to manage the extended * functionalities of the CRC peripheral. @@ -144,7 +142,7 @@ HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol /* no polynomial definition vs. polynomial length issue possible */ break; default: - break; + return HAL_ERROR; } /* set generating polynomial */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.h index 7f6907df65..4e20acf7f8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_crc_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_crc_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CRC HAL extended module. ****************************************************************************** * @attention @@ -63,10 +61,10 @@ /** @defgroup CRCEx_Input_Data_Inversion Input Data Inversion Modes * @{ */ -#define CRC_INPUTDATA_INVERSION_NONE ((uint32_t)0x00000000) /*!< No input data inversion */ -#define CRC_INPUTDATA_INVERSION_BYTE ((uint32_t)CRC_CR_REV_IN_0) /*!< Byte-wise input data inversion */ -#define CRC_INPUTDATA_INVERSION_HALFWORD ((uint32_t)CRC_CR_REV_IN_1) /*!< HalfWord-wise input data inversion */ -#define CRC_INPUTDATA_INVERSION_WORD ((uint32_t)CRC_CR_REV_IN) /*!< Word-wise input data inversion */ +#define CRC_INPUTDATA_INVERSION_NONE (0x00000000U) /*!< No input data inversion */ +#define CRC_INPUTDATA_INVERSION_BYTE (CRC_CR_REV_IN_0) /*!< Byte-wise input data inversion */ +#define CRC_INPUTDATA_INVERSION_HALFWORD (CRC_CR_REV_IN_1) /*!< HalfWord-wise input data inversion */ +#define CRC_INPUTDATA_INVERSION_WORD (CRC_CR_REV_IN) /*!< Word-wise input data inversion */ /** * @} */ @@ -74,8 +72,8 @@ /** @defgroup CRCEx_Output_Data_Inversion Output Data Inversion Modes * @{ */ -#define CRC_OUTPUTDATA_INVERSION_DISABLE ((uint32_t)0x00000000) /*!< No output data inversion */ -#define CRC_OUTPUTDATA_INVERSION_ENABLE ((uint32_t)CRC_CR_REV_OUT) /*!< Bit-wise output data inversion */ +#define CRC_OUTPUTDATA_INVERSION_DISABLE (0x00000000U) /*!< No output data inversion */ +#define CRC_OUTPUTDATA_INVERSION_ENABLE (CRC_CR_REV_OUT) /*!< Bit-wise output data inversion */ /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.c index 833873cbdc..0be7c96a57 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cryp.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief CRYP HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Cryptography (CRYP) peripheral: @@ -92,7 +90,7 @@ #ifdef HAL_CRYP_MODULE_ENABLED -#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) +#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -1450,7 +1448,7 @@ static HAL_StatusTypeDef CRYP_AES_IT(CRYP_HandleTypeDef *hcryp) * @} */ -#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) */ +#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) */ #endif /* HAL_CRYP_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.h index 315f76c8bb..dcb2f5d66a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cryp.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CRYP HAL module. ****************************************************************************** * @attention @@ -43,7 +41,7 @@ extern "C" { #endif -#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) +#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -457,7 +455,7 @@ typedef struct /** - * @brief Enable the CRYP interrupt. + * @brief Enable the CRYP interrupt. * @param __HANDLE__: specifies the CRYP handle. * @param __INTERRUPT__: CRYP Interrupt. * This parameter can be one of the following values: @@ -687,7 +685,7 @@ uint32_t HAL_CRYP_GetError(CRYP_HandleTypeDef *hcryp); * @} */ -#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) */ +#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.c index 11340c0826..586dd48ed2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cryp_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief CRYPEx HAL module driver. * This file provides firmware functions to manage the extended * functionalities of the Cryptography (CRYP) peripheral. @@ -43,7 +41,7 @@ #ifdef HAL_CRYP_MODULE_ENABLED -#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) +#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -484,7 +482,9 @@ HAL_StatusTypeDef HAL_CRYPEx_AES_Auth(CRYP_HandleTypeDef *hcryp, uint8_t *pInput } else if (hcryp->Init.GCMCMACPhase == CRYP_PAYLOAD_PHASE) { - if ((pInputData == NULL) || (pOutputData == NULL) || (Size == 0)) + if (((pInputData == NULL) && (Size != 0)) || \ + ((pInputData != NULL) && (Size == 0)) || \ + ((pInputData != NULL) && (Size != 0) && (pOutputData == NULL))) { return HAL_ERROR; } @@ -950,7 +950,11 @@ HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pIn uint32_t addhoc_process = 0; uint32_t difflength = 0; uint32_t difflengthmod4 = 0; - uint32_t mask[3] = {0x0FF, 0x0FFFF, 0x0FFFFFF}; + uint32_t mask[4][3] = { {0xFF000000, 0xFFFF0000, 0xFFFFFF00}, /* 32-bit data */ + {0x0000FF00, 0x0000FFFF, 0xFF00FFFF}, /* 16-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}, /* 8-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}}; /* Bit data */ + uint32_t mask_index = hcryp->Init.DataType >> AES_CR_DATATYPE_Pos; if (hcryp->State == HAL_CRYP_STATE_READY) @@ -1141,7 +1145,7 @@ HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pIn (case of header length not a multiple of 32-bits) */ if (difflengthmod4 != 0) { - hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[difflengthmod4-1]); + hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1]); } /* Pad with zero-words to reach 128-bit long block and wrap-up header feeding to the IP */ for(index=0; index < (4 - ((difflength+3)/4)); index ++) @@ -1230,7 +1234,7 @@ HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pIn /* If required, manage input data size not multiple of 32 bits */ if (difflengthmod4 != 0) { - hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[difflengthmod4-1]); + hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1]); } /* Wrap-up in padding with zero-words if applicable */ for(index=0; index < (4 - ((difflength+3)/4)); index ++) @@ -1404,15 +1408,22 @@ HAL_StatusTypeDef HAL_CRYPEx_AES_Auth_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pI } #if defined(AES_CR_NPBLB) if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CCM) + { + /* In case of CMAC or CCM header phase resumption, we can have pInputData = NULL and Size = 0 */ + if (((pInputData != NULL) && (Size == 0)) || ((pInputData == NULL) && (Size != 0))) + { + return HAL_ERROR; + } + } #else - if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC) -#endif + if (hcryp->Init.ChainingMode == CRYP_CHAINMODE_AES_CMAC) { if ((pInputData == NULL) || (Size == 0)) { return HAL_ERROR; } - } + } +#endif } else if (hcryp->Init.GCMCMACPhase == CRYP_PAYLOAD_PHASE) { @@ -2186,7 +2197,11 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) uint32_t addhoc_process = 0; uint32_t difflength = 0; uint32_t difflengthmod4 = 0; - uint32_t mask[3] = {0x0FF, 0x0FFFF, 0x0FFFFFF}; + uint32_t mask[4][3] = { {0xFF000000, 0xFFFF0000, 0xFFFFFF00}, /* 32-bit data */ + {0x0000FF00, 0x0000FFFF, 0xFF00FFFF}, /* 16-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}, /* 8-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}}; /* Bit data */ + uint32_t mask_index = hcryp->Init.DataType >> AES_CR_DATATYPE_Pos; uint32_t intermediate_data[4] = {0}; if(hcryp->State == HAL_CRYP_STATE_BUSY) @@ -2249,7 +2264,7 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE); /* Change the CRYP state */ hcryp->State = HAL_CRYP_STATE_SUSPENDED; - /* Mark that the header phase is over */ + /* Mark that the header phase is suspended */ hcryp->Phase = HAL_CRYP_PHASE_HEADER_SUSPENDED; /* Process Unlocked */ @@ -2318,7 +2333,7 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) (case of header length not a multiple of 32-bits) */ if (difflengthmod4 != 0) { - hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[difflengthmod4-1]); + hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1]); } /* Pad with zero-words to reach 128-bit long block and wrap-up header feeding to the IP */ for(index=0; index < (4 - ((difflength+3)/4)); index ++) @@ -2372,7 +2387,7 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) applied to the last block of payload */ if (difflengthmod4 != 0) { - intermediate_data[difflength/4] &= mask[difflengthmod4-1]; + intermediate_data[difflength/4] &= mask[mask_index][difflengthmod4-1]; *(uint32_t*)(outputaddr) = intermediate_data[difflength/4]; } @@ -2484,8 +2499,8 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) __HAL_CRYP_DISABLE_IT(hcryp, CRYP_IT_CCFIE|CRYP_IT_ERRIE); /* Change the CRYP state */ hcryp->State = HAL_CRYP_STATE_SUSPENDED; - /* Mark that the header phase is over */ - hcryp->Phase = HAL_CRYP_PHASE_HEADER_SUSPENDED; + /* Mark that the payload phase is suspended */ + hcryp->Phase = HAL_CRYP_PHASE_PAYLOAD_SUSPENDED; /* Process Unlocked */ __HAL_UNLOCK(hcryp); @@ -2539,7 +2554,7 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp) /* If required, manage input data size not multiple of 32 bits */ if (difflengthmod4 != 0) { - hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[difflengthmod4-1]); + hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1]); } /* Wrap-up in padding with zero-words if applicable */ for(index=0; index < (4 - ((difflength+3)/4)); index ++) @@ -2964,7 +2979,12 @@ static void CRYP_Padding(CRYP_HandleTypeDef *hcryp, uint32_t difflength, uint32_ uint32_t difflengthmod4 = difflength%4; uint32_t inputaddr = (uint32_t)hcryp->pCrypInBuffPtr; uint32_t outputaddr = (uint32_t)hcryp->pCrypOutBuffPtr; - uint32_t mask[3] = {0x0FF, 0x0FFFF, 0x0FFFFFF}; + uint32_t mask[4][3] = { {0xFF000000, 0xFFFF0000, 0xFFFFFF00}, /* 32-bit data */ + {0x0000FF00, 0x0000FFFF, 0xFF00FFFF}, /* 16-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}, /* 8-bit data */ + {0x000000FF, 0x0000FFFF, 0x00FFFFFF}}; /* Bit data */ + uint32_t mask_index = hcryp->Init.DataType >> AES_CR_DATATYPE_Pos; + uint32_t intermediate_data[4] = {0}; #if defined(AES_CR_NPBLB) @@ -3004,7 +3024,7 @@ static void CRYP_Padding(CRYP_HandleTypeDef *hcryp, uint32_t difflength, uint32_ (case of header length not a multiple of 32-bits) */ if (difflengthmod4 != 0) { - hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[difflengthmod4-1]); + hcryp->Instance->DINR = ((*(uint32_t*)(inputaddr)) & mask[mask_index][difflengthmod4-1]); } /* Pad with zero-words to reach 128-bit long block and wrap-up header feeding to the IP */ for(index=0; index < (4 - ((difflength+3)/4)); index ++) @@ -3047,7 +3067,7 @@ static void CRYP_Padding(CRYP_HandleTypeDef *hcryp, uint32_t difflength, uint32_ applied to the last block of payload */ if (difflengthmod4 != 0) { - intermediate_data[difflength/4] &= mask[difflengthmod4-1]; + intermediate_data[difflength/4] &= mask[mask_index][difflengthmod4-1]; *(uint32_t*)(outputaddr) = intermediate_data[difflength/4]; } @@ -3109,7 +3129,7 @@ static void CRYP_Padding(CRYP_HandleTypeDef *hcryp, uint32_t difflength, uint32_ * @} */ -#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) */ +#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) */ #endif /* HAL_CRYP_MODULE_ENABLED */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.h index d82497ae06..19f83a6519 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_cryp_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_cryp_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CRYPEx HAL module. ****************************************************************************** * @attention @@ -43,7 +41,7 @@ extern "C" { #endif -#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) +#if defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ @@ -137,7 +135,7 @@ HAL_StatusTypeDef CRYP_AES_Auth_IT(CRYP_HandleTypeDef *hcryp); * @} */ -#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) */ +#endif /* defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L462xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L4A6xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.c index fe5e15f5ef..e9b7187443 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dac.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DAC HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Digital to Analog Converter (DAC) peripheral: @@ -26,6 +24,7 @@ 1 channel : STM32L451xx STM32L452xx STM32L462xx 2 channels: STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx + STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx When 2 channels are available, the 2 converters (i.e. channel1 & channel2) can be used independently or simultaneously (dual mode): @@ -474,6 +473,28 @@ HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel) /* Enable the Peripheral */ __HAL_DAC_ENABLE(hdac, Channel); +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) + if(Channel == DAC_CHANNEL_1) + { + /* Check if software trigger enabled */ + if(((DAC_CR_TEN1 & ~(DAC_CR_TSEL1)) == (hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)))) + { + /* Enable the selected DAC software conversion */ + SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1); + } + } + else + { + /* Check if software trigger enabled */ + if(((DAC_CR_TEN2 & ~(DAC_CR_TSEL2)) == (hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)))) + { + /* Enable the selected DAC software conversion*/ + SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2); + } + } + +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ + #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) if(Channel == DAC_CHANNEL_1) @@ -622,7 +643,8 @@ HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, u #endif /* STM32L451xx STM32L452xx STM32L462xx */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /** * @brief Enables DAC and starts conversion of channel. @@ -751,6 +773,7 @@ HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, u } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @brief Disables DAC and stop conversion of channel. @@ -777,7 +800,8 @@ HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel) /* Disable the DMA channel */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /* Channel1 is used */ if (Channel == DAC_CHANNEL_1) { @@ -797,8 +821,9 @@ HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel) } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) /* Disable the DMA channel */ status = HAL_DMA_Abort(hdac->DMA_Handle1); @@ -858,7 +883,8 @@ void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac) } } #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) if(__HAL_DAC_GET_IT_SOURCE(hdac, DAC_IT_DMAUDR2)) { /* Check underrun flag of DAC channel 1 */ @@ -882,6 +908,7 @@ void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac) } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ } /** @@ -1025,12 +1052,13 @@ uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel) assert_param(IS_DAC_CHANNEL(Channel)); /* Returns the DAC channel data output register value */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) return hdac->Instance->DOR1; #endif /* STM32L451xx STM32L452xx STM32L462xx */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) if(Channel == DAC_CHANNEL_1) { return hdac->Instance->DOR1; @@ -1041,6 +1069,7 @@ uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel) } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ } /** @@ -1058,9 +1087,14 @@ HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConf { uint32_t tmpreg1 = 0, tmpreg2 = 0; uint32_t tickstart = 0; +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t hclkfreq = 0; +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ - /* Check the DAC parameters */ - + /* Check the DAC parameters */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) + assert_param(IS_DAC_HIGH_FREQUENCY_MODE(sConfig->DAC_HighFrequency)); +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ assert_param(IS_DAC_TRIGGER(sConfig->DAC_Trigger)); assert_param(IS_DAC_OUTPUT_BUFFER_STATE(sConfig->DAC_OutputBuffer)); assert_param(IS_DAC_CHIP_CONNECTION(sConfig->DAC_ConnectOnChipPeripheral)); @@ -1181,6 +1215,34 @@ HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConf tmpreg2 = (sConfig->DAC_Trigger); /* Calculate CR register value depending on DAC_Channel */ tmpreg1 |= tmpreg2 << Channel; +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) + if(DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ == sConfig->DAC_HighFrequency) + { + tmpreg1 |= DAC_CR_HFSEL; + } + else + { + if (DAC_HIGH_FREQUENCY_INTERFACE_MODE_DISABLE == sConfig->DAC_HighFrequency) + { + tmpreg1 &= ~(DAC_CR_HFSEL); + } + else /* Automatic selection */ + { + hclkfreq = HAL_RCC_GetHCLKFreq(); + if (hclkfreq > HFSEL_ENABLE_THRESHOLD_80MHZ) + { + /* High frequency enable when HCLK frequency higher than 80 */ + tmpreg1 |= DAC_CR_HFSEL; + } + else + { + /* High frequency disable when HCLK frequency higher than 80 */ + tmpreg1 &= ~(DAC_CR_HFSEL); + } + } + } + +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /* Write to DAC CR */ hdac->Instance->CR = tmpreg1; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.h index 8ea78f220b..f19d72be8e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac.h @@ -2,13 +2,11 @@ ****************************************************************************** * @file stm32l4xx_hal_dac.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DAC HAL module. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2017 STMicroelectronics

+ *

© COPYRIGHT(c) 2016 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -117,6 +115,11 @@ DAC_SampleAndHoldConfTypeDef; */ typedef struct { +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t DAC_HighFrequency; /*!< Specifies the frequency interface mode + This parameter can be a value of @ref DAC_HighFrequency */ +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ + uint32_t DAC_SampleAndHold; /*!< Specifies whether the DAC mode. This parameter can be a value of @ref DAC_SampleAndHold */ @@ -176,15 +179,15 @@ typedef struct #define DAC_TRIGGER_EXT_IT9 ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ #define DAC_TRIGGER_SOFTWARE ((uint32_t)(DAC_CR_TSEL1 | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */ #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ - -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) + +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define DAC_TRIGGER_NONE ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC_DHRxxxx register has been loaded, and not by external trigger */ #define DAC_TRIGGER_T2_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ #define DAC_TRIGGER_T6_TRGO ((uint32_t)DAC_CR_TEN1) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ #define DAC_TRIGGER_EXT_IT9 ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ #define DAC_TRIGGER_SOFTWARE ((uint32_t)(DAC_CR_TSEL1 | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */ -#endif /* STM32L451xx STM32L452xx STM32L462xx */ +#endif /* STM32L451xx STM32L452xx STM32L462xx */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) #define DAC_TRIGGER_NONE ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC_DHRxxxx register @@ -200,7 +203,25 @@ typedef struct #endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx*/ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) +#define DAC_TRIGGER_NONE ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC_DHRxxxx register + has been loaded, and not by external trigger */ +#define DAC_TRIGGER_T1_TRGO ((uint32_t) (DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM1 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T2_TRGO ((uint32_t) (DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T4_TRGO ((uint32_t) (DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM1 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T5_TRGO ((uint32_t) (DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T6_TRGO ((uint32_t) (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T7_TRGO ((uint32_t) (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T8_TRGO ((uint32_t) (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_T15_TRGO ((uint32_t) (DAC_CR_TSEL1_3 | DAC_CR_TEN1)) /*!< TIM15 TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_LPTIM1_OUT ((uint32_t) (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< LPTIM1 OUT TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_LPTIM2_OUT ((uint32_t) (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< LPTIM2 OUT TRGO selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_EXT_IT9 ((uint32_t) (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ +#define DAC_TRIGGER_SOFTWARE ((uint32_t) (DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */ +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ + + /** * @} */ @@ -220,10 +241,12 @@ typedef struct */ #define DAC_CHANNEL_1 ((uint32_t)0x00000000) #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) #define DAC_CHANNEL_2 ((uint32_t)0x00000010) #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @} @@ -290,6 +313,18 @@ typedef struct /** * @} */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup DAC_HighFrequency DAC high frequency interface mode + * @{ + */ +#define DAC_HIGH_FREQUENCY_INTERFACE_MODE_DISABLE ((uint32_t)0x00000000) /*!< High frequency interface mode disabled */ +#define DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ ((uint32_t)DAC_CR_HFSEL) /*!< High frequency interface mode enabled */ +#define DAC_HIGH_FREQUENCY_INTERFACE_MODE_AUTOMATIC ((uint32_t)0x00000002) /*!< High frequency interface mode automatic */ + +/** + * @} + */ +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @} @@ -404,13 +439,15 @@ typedef struct ((STATE) == DAC_OUTPUTBUFFER_DISABLE)) #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) #define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \ ((CHANNEL) == DAC_CHANNEL_2)) #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define IS_DAC_CHANNEL(CHANNEL) ((CHANNEL) == DAC_CHANNEL_1) #endif /* STM32L451xx STM32L452xx STM32L462xx */ @@ -420,7 +457,7 @@ typedef struct #define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) -#define IS_DAC_REFRESHTIME(TIME) ((TIME) <= 0x0000000FF) +#define IS_DAC_REFRESHTIME(TIME) ((TIME) <= 0x000000FF) /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.c index 49abcae0bf..d139620350 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dac_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DAC HAL module driver. * This file provides firmware functions to manage the extended * functionalities of the DAC peripheral. @@ -199,7 +197,8 @@ HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t } #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /** * @brief Set the specified data holding register value for dual DAC channel. @@ -310,6 +309,7 @@ __weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac) } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @brief Run the self calibration of one DAC channel. @@ -363,7 +363,8 @@ HAL_StatusTypeDef HAL_DACEx_SelfCalibrate (DAC_HandleTypeDef* hdac, DAC_ChannelC tmp = (uint32_t)hdac->Instance; #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) if(Channel == DAC_CHANNEL_1) { tmp += DAC_DHR12R1_ALIGNMENT(DAC_ALIGN_12B_R); @@ -374,6 +375,7 @@ HAL_StatusTypeDef HAL_DACEx_SelfCalibrate (DAC_HandleTypeDef* hdac, DAC_ChannelC } #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) tmp += DAC_DHR12R1_ALIGNMENT(DAC_ALIGN_12B_R); #endif /* STM32L451xx STM32L452xx STM32L462xx */ @@ -524,7 +526,8 @@ uint32_t HAL_DACEx_GetTrimOffset (DAC_HandleTypeDef *hdac, uint32_t Channel) */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /** @defgroup DACEx_Exported_Functions_Group3 Peripheral Control functions * @brief Extended Peripheral Control functions @@ -563,15 +566,17 @@ uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac) * @} */ -#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ +#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @} */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /* Private functions ---------------------------------------------------------*/ /** @defgroup DACEx_Private_Functions DACEx private functions @@ -630,6 +635,7 @@ void DAC_DMAErrorCh2(DMA_HandleTypeDef *hdma) */ #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ #endif /* HAL_DAC_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.h index 4b0cbb12c8..f9c82155ee 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dac_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dac_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DAC HAL Extended module. ****************************************************************************** * @attention @@ -139,9 +137,30 @@ ((TRIGGER) == DAC_TRIGGER_SOFTWARE)) #endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ -#define IS_DAC_SAMPLETIME(TIME) ((TIME) <= 0x0000003FF) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_TRIGGER_NONE) || \ + ((TRIGGER) == DAC_TRIGGER_T1_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T2_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T4_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T5_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T6_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T7_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T8_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_T15_TRGO) || \ + ((TRIGGER) == DAC_TRIGGER_LPTIM1_OUT) || \ + ((TRIGGER) == DAC_TRIGGER_LPTIM2_OUT) || \ + ((TRIGGER) == DAC_TRIGGER_EXT_IT9) || \ + ((TRIGGER) == DAC_TRIGGER_SOFTWARE)) -#define IS_DAC_HOLDTIME(TIME) ((TIME) <= 0x0000003FF) +#define IS_DAC_HIGH_FREQUENCY_MODE(MODE) (((MODE) == DAC_HIGH_FREQUENCY_INTERFACE_MODE_DISABLE) || \ + ((MODE) == DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ) || \ + ((MODE) == DAC_HIGH_FREQUENCY_INTERFACE_MODE_AUTOMATIC)) + +#endif /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ + +#define IS_DAC_SAMPLETIME(TIME) ((TIME) <= 0x000003FF) + +#define IS_DAC_HOLDTIME(TIME) ((TIME) <= 0x000003FF) #define IS_DAC_SAMPLEANDHOLD(MODE) (((MODE) == DAC_SAMPLEANDHOLD_DISABLE) || \ ((MODE) == DAC_SAMPLEANDHOLD_ENABLE)) @@ -204,18 +223,22 @@ HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32 HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude); #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Alignment, uint32_t Data1, uint32_t Data2); #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac); void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac); void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef* hdac); void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef* hdac); #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ HAL_StatusTypeDef HAL_DACEx_SelfCalibrate (DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel); HAL_StatusTypeDef HAL_DACEx_SetUserTrimming (DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel, uint32_t NewTrimmingValue); @@ -230,10 +253,12 @@ HAL_StatusTypeDef HAL_DACEx_SetUserTrimming (DAC_HandleTypeDef* hdac, DAC_Channe /* Peripheral Control functions ***********************************************/ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac); -#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ +#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ uint32_t HAL_DACEx_GetTrimOffset (DAC_HandleTypeDef *hdac, uint32_t Channel); @@ -246,7 +271,8 @@ uint32_t HAL_DACEx_GetTrimOffset (DAC_HandleTypeDef *hdac, uint32_t Channel); */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup DACEx_Private_Functions * @{ @@ -263,6 +289,7 @@ void DAC_DMAHalfConvCpltCh2(DMA_HandleTypeDef *hdma); */ #endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.c index f62ffe45d4..caa181294f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dcmi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DCMI HAL module driver * This file provides firmware functions to manage the following * functionalities of the Digital Camera Interface (DCMI) peripheral: @@ -51,12 +49,10 @@ be large enough to ensure the capture of a frame. (#) If the frame size is larger than the maximum DMA transfer length (i.e. 65535), - (++) resort to a user-defined work buffer and associate it to the DCMI handle with - the function HAL_DCMIEx_WorkBuffer_Associate(), (++) the DMA must be configured in circular mode, either for snapshot or continuous capture mode, (++) during capture, the driver copies the image data samples from DCMI DR register - to the work buffer, + at the end of the final destination buffer used as a work buffer, (++) at each DMA half (respectively complete) transfer interrupt, the first (resp. second) half of the work buffer is copied to the final destination thru a second DMA channel. @@ -134,7 +130,8 @@ #ifdef HAL_DCMI_MODULE_ENABLED -#if defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -417,9 +414,8 @@ __weak void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi) * @param pData: The destination memory buffer address. * @param Length: The length of capture to be transferred (in 32-bit words). * @note In case of length larger than 65535 (0xFFFF is the DMA maximum transfer length), - * user must beforehand associate a work buffer to the DCMI handle thru the API - * HAL_DCMIEx_WorkBuffer_Associate(). Then, HAL_DCMI_Start_DMA() - * initiates a circular DMA transfer from DCMI DR to the work buffer and each + * the API uses the end of the destination buffer as a work area: HAL_DCMI_Start_DMA() + * initiates a circular DMA transfer from DCMI DR to the ad-hoc work buffer and each * half and complete transfer interrupt triggers a copy from the work buffer to * the final destination pData thru a second DMA channel. * @note Following HAL_DCMI_Init() call, all interruptions are enabled (line end, @@ -1264,7 +1260,8 @@ static uint32_t DCMI_TransferSize(uint32_t InputSize) * @} */ -#endif /* STM32L496xx || STM32L4A6xx */ +#endif /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* HAL_DCMI_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.h index 7243fc837a..278566e144 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dcmi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dcmi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DCMI HAL module. ****************************************************************************** * @attention @@ -43,7 +41,9 @@ extern "C" { #endif -#if defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -645,7 +645,8 @@ uint32_t HAL_DCMI_GetError(DCMI_HandleTypeDef *hdcmi); * @} */ -#endif /* STM32L496xx || STM32L4A6xx */ +#endif /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h index 9dde4bccd2..28d8e4f906 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_def.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file contains HAL common defines, enumeration, macros and * structures definitions. ****************************************************************************** @@ -147,7 +145,7 @@ static inline void atomic_clr_u32(volatile uint32_t *ptr, uint32_t mask) } while (__STREXW(newValue, ptr)); } -#if defined ( __GNUC__ ) && !defined ( __CC_ARM ) +#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ #ifndef __weak #define __weak __attribute__((weak)) #endif /* __weak */ @@ -158,7 +156,7 @@ static inline void atomic_clr_u32(volatile uint32_t *ptr, uint32_t mask) /* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */ -#if defined (__GNUC__) /* GNU Compiler */ +#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */ #ifndef __ALIGN_END #define __ALIGN_END __attribute__ ((aligned (4))) #endif /* __ALIGN_END */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.c index 8cd6cc6534..3de4618edc 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dfsdm.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file provides firmware functions to manage the following * functionalities of the Digital Filter for Sigma-Delta Modulators * (DFSDM) peripherals: @@ -198,7 +196,9 @@ #if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /** @defgroup DFSDM DFSDM * @brief DFSDM HAL driver module * @{ @@ -209,30 +209,10 @@ /** @defgroup DFSDM_Private_Define DFSDM Private Define * @{ */ -#define DFSDM_CHCFGR1_CLK_DIV_OFFSET POSITION_VAL(DFSDM_CHCFGR1_CKOUTDIV) -#define DFSDM_CHAWSCDR_BKSCD_OFFSET POSITION_VAL(DFSDM_CHAWSCDR_BKSCD) -#define DFSDM_CHAWSCDR_FOSR_OFFSET POSITION_VAL(DFSDM_CHAWSCDR_AWFOSR) -#define DFSDM_CHCFGR2_OFFSET_OFFSET POSITION_VAL(DFSDM_CHCFGR2_OFFSET) -#define DFSDM_CHCFGR2_DTRBS_OFFSET POSITION_VAL(DFSDM_CHCFGR2_DTRBS) -#define DFSDM_FLTFCR_FOSR_OFFSET POSITION_VAL(DFSDM_FLTFCR_FOSR) #define DFSDM_FLTCR1_MSB_RCH_OFFSET 8 -#define DFSDM_FLTCR2_EXCH_OFFSET POSITION_VAL(DFSDM_FLTCR2_EXCH) -#define DFSDM_FLTCR2_AWDCH_OFFSET POSITION_VAL(DFSDM_FLTCR2_AWDCH) -#define DFSDM_FLTISR_CKABF_OFFSET POSITION_VAL(DFSDM_FLTISR_CKABF) -#define DFSDM_FLTISR_SCDF_OFFSET POSITION_VAL(DFSDM_FLTISR_SCDF) -#define DFSDM_FLTICR_CLRCKABF_OFFSET POSITION_VAL(DFSDM_FLTICR_CLRCKABF) -#define DFSDM_FLTICR_CLRSCDF_OFFSET POSITION_VAL(DFSDM_FLTICR_CLRSCSDF) -#define DFSDM_FLTRDATAR_DATA_OFFSET POSITION_VAL(DFSDM_FLTRDATAR_RDATA) -#define DFSDM_FLTJDATAR_DATA_OFFSET POSITION_VAL(DFSDM_FLTJDATAR_JDATA) -#define DFSDM_FLTAWHTR_THRESHOLD_OFFSET POSITION_VAL(DFSDM_FLTAWHTR_AWHT) -#define DFSDM_FLTAWLTR_THRESHOLD_OFFSET POSITION_VAL(DFSDM_FLTAWLTR_AWLT) -#define DFSDM_FLTEXMAX_DATA_OFFSET POSITION_VAL(DFSDM_FLTEXMAX_EXMAX) -#define DFSDM_FLTEXMIN_DATA_OFFSET POSITION_VAL(DFSDM_FLTEXMIN_EXMIN) -#define DFSDM_FLTCNVTIMR_DATA_OFFSET POSITION_VAL(DFSDM_FLTCNVTIMR_CNVCNT) -#define DFSDM_FLTAWSR_HIGH_OFFSET POSITION_VAL(DFSDM_FLTAWSR_AWHTF) -#define DFSDM_MSB_MASK 0xFFFF0000U -#define DFSDM_LSB_MASK 0x0000FFFFU -#define DFSDM_CKAB_TIMEOUT 5000U +#define DFSDM_MSB_MASK 0xFFFF0000U +#define DFSDM_LSB_MASK 0x0000FFFFU +#define DFSDM_CKAB_TIMEOUT 5000U #if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) #define DFSDM1_CHANNEL_NUMBER 4U #else /* STM32L451xx || STM32L452xx || STM32L462xx */ @@ -294,7 +274,7 @@ static void DFSDM_DMAError(DMA_HandleTypeDef *hdma); /** * @brief Initialize the DFSDM channel according to the specified parameters * in the DFSDM_ChannelInitTypeDef structure and initialize the associated handle. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_DFSDM_ChannelInit(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -345,7 +325,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelInit(DFSDM_Channel_HandleTypeDef *hdfsdm_chan assert_param(IS_DFSDM_CHANNEL_OUTPUT_CLOCK_DIVIDER(hdfsdm_channel->Init.OutputClock.Divider)); /* Set the output clock divider */ DFSDM1_Channel0->CHCFGR1 |= (uint32_t) ((hdfsdm_channel->Init.OutputClock.Divider - 1) << - DFSDM_CHCFGR1_CLK_DIV_OFFSET); + DFSDM_CHCFGR1_CKOUTDIV_Pos); } /* enable the DFSDM global interface */ @@ -367,12 +347,12 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelInit(DFSDM_Channel_HandleTypeDef *hdfsdm_chan /* Set analog watchdog parameters */ hdfsdm_channel->Instance->CHAWSCDR &= ~(DFSDM_CHAWSCDR_AWFORD | DFSDM_CHAWSCDR_AWFOSR); hdfsdm_channel->Instance->CHAWSCDR |= (hdfsdm_channel->Init.Awd.FilterOrder | - ((hdfsdm_channel->Init.Awd.Oversampling - 1) << DFSDM_CHAWSCDR_FOSR_OFFSET)); + ((hdfsdm_channel->Init.Awd.Oversampling - 1) << DFSDM_CHAWSCDR_AWFOSR_Pos)); /* Set channel offset and right bit shift */ hdfsdm_channel->Instance->CHCFGR2 &= ~(DFSDM_CHCFGR2_OFFSET | DFSDM_CHCFGR2_DTRBS); - hdfsdm_channel->Instance->CHCFGR2 |= (((uint32_t) hdfsdm_channel->Init.Offset << DFSDM_CHCFGR2_OFFSET_OFFSET) | - (hdfsdm_channel->Init.RightBitShift << DFSDM_CHCFGR2_DTRBS_OFFSET)); + hdfsdm_channel->Instance->CHCFGR2 |= (((uint32_t) hdfsdm_channel->Init.Offset << DFSDM_CHCFGR2_OFFSET_Pos) | + (hdfsdm_channel->Init.RightBitShift << DFSDM_CHCFGR2_DTRBS_Pos)); /* Enable DFSDM channel */ hdfsdm_channel->Instance->CHCFGR1 |= DFSDM_CHCFGR1_CHEN; @@ -388,7 +368,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelInit(DFSDM_Channel_HandleTypeDef *hdfsdm_chan /** * @brief De-initialize the DFSDM channel. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_DFSDM_ChannelDeInit(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -434,7 +414,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelDeInit(DFSDM_Channel_HandleTypeDef *hdfsdm_ch /** * @brief Initialize the DFSDM channel MSP. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval None */ __weak void HAL_DFSDM_ChannelMspInit(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -449,7 +429,7 @@ __weak void HAL_DFSDM_ChannelMspInit(DFSDM_Channel_HandleTypeDef *hdfsdm_channel /** * @brief De-initialize the DFSDM channel MSP. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval None */ __weak void HAL_DFSDM_ChannelMspDeInit(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -488,7 +468,7 @@ __weak void HAL_DFSDM_ChannelMspDeInit(DFSDM_Channel_HandleTypeDef *hdfsdm_chann * @note If clock is not available on this channel during 5 seconds, * clock absence detection will not be activated and function * will return HAL_TIMEOUT error. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -515,9 +495,9 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart(DFSDM_Channel_HandleTypeDef *hdfsdm tickstart = HAL_GetTick(); /* Clear clock absence flag */ - while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_OFFSET + channel)) & 1) != 0) + while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_Pos + channel)) & 1) != 0) { - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); /* Check the Timeout */ if((HAL_GetTick()-tickstart) > DFSDM_CKAB_TIMEOUT) @@ -540,8 +520,8 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart(DFSDM_Channel_HandleTypeDef *hdfsdm /** * @brief This function allows to poll for the clock absence detection. - * @param hdfsdm_channel : DFSDM channel handle. - * @param Timeout : Timeout value in milliseconds. + * @param hdfsdm_channel DFSDM channel handle. + * @param Timeout Timeout value in milliseconds. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForCkab(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, @@ -568,7 +548,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForCkab(DFSDM_Channel_HandleTypeDef *hdfs tickstart = HAL_GetTick(); /* Wait clock absence detection */ - while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_OFFSET + channel)) & 1) == 0) + while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_Pos + channel)) & 1) == 0) { /* Check the Timeout */ if(Timeout != HAL_MAX_DELAY) @@ -582,7 +562,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForCkab(DFSDM_Channel_HandleTypeDef *hdfs } /* Clear clock absence detection flag */ - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); /* Return function status */ return HAL_OK; @@ -591,7 +571,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForCkab(DFSDM_Channel_HandleTypeDef *hdfs /** * @brief This function allows to stop clock absence detection in polling mode. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -615,7 +595,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop(DFSDM_Channel_HandleTypeDef *hdfsdm_ /* Clear clock absence flag */ channel = DFSDM_GetChannelFromInstance(hdfsdm_channel->Instance); - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); } /* Return function status */ return status; @@ -627,7 +607,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop(DFSDM_Channel_HandleTypeDef *hdfsdm_ * @note If clock is not available on this channel during 5 seconds, * clock absence detection will not be activated and function * will return HAL_TIMEOUT error. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart_IT(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -654,9 +634,9 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart_IT(DFSDM_Channel_HandleTypeDef *hdf tickstart = HAL_GetTick(); /* Clear clock absence flag */ - while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_OFFSET + channel)) & 1) != 0) + while((((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_CKABF) >> (DFSDM_FLTISR_CKABF_Pos + channel)) & 1) != 0) { - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); /* Check the Timeout */ if((HAL_GetTick()-tickstart) > DFSDM_CKAB_TIMEOUT) @@ -682,7 +662,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStart_IT(DFSDM_Channel_HandleTypeDef *hdf /** * @brief Clock absence detection callback. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval None */ __weak void HAL_DFSDM_ChannelCkabCallback(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -698,7 +678,7 @@ __weak void HAL_DFSDM_ChannelCkabCallback(DFSDM_Channel_HandleTypeDef *hdfsdm_ch /** * @brief This function allows to stop clock absence detection in interrupt mode. * @note Interrupt will be disabled for all channels - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop_IT(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -722,7 +702,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop_IT(DFSDM_Channel_HandleTypeDef *hdfs /* Clear clock absence flag */ channel = DFSDM_GetChannelFromInstance(hdfsdm_channel->Instance); - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); /* Disable clock absence detection interrupt */ DFSDM1_Filter0->FLTCR2 &= ~(DFSDM_FLTCR2_CKABIE); @@ -734,10 +714,10 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelCkabStop_IT(DFSDM_Channel_HandleTypeDef *hdfs /** * @brief This function allows to start short circuit detection in polling mode. * @note Same mode has to be used for all channels - * @param hdfsdm_channel : DFSDM channel handle. - * @param Threshold : Short circuit detector threshold. + * @param hdfsdm_channel DFSDM channel handle. + * @param Threshold Short circuit detector threshold. * This parameter must be a number between Min_Data = 0 and Max_Data = 255. - * @param BreakSignal : Break signals assigned to short circuit event. + * @param BreakSignal Break signals assigned to short circuit event. * This parameter can be a values combination of @ref DFSDM_BreakSignals. * @retval HAL status */ @@ -762,7 +742,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStart(DFSDM_Channel_HandleTypeDef *hdfsdm_ { /* Configure threshold and break signals */ hdfsdm_channel->Instance->CHAWSCDR &= ~(DFSDM_CHAWSCDR_BKSCD | DFSDM_CHAWSCDR_SCDT); - hdfsdm_channel->Instance->CHAWSCDR |= ((BreakSignal << DFSDM_CHAWSCDR_BKSCD_OFFSET) | \ + hdfsdm_channel->Instance->CHAWSCDR |= ((BreakSignal << DFSDM_CHAWSCDR_BKSCD_Pos) | \ Threshold); /* Start short circuit detection */ @@ -774,8 +754,8 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStart(DFSDM_Channel_HandleTypeDef *hdfsdm_ /** * @brief This function allows to poll for the short circuit detection. - * @param hdfsdm_channel : DFSDM channel handle. - * @param Timeout : Timeout value in milliseconds. + * @param hdfsdm_channel DFSDM channel handle. + * @param Timeout Timeout value in milliseconds. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForScd(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, @@ -802,7 +782,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForScd(DFSDM_Channel_HandleTypeDef *hdfsd tickstart = HAL_GetTick(); /* Wait short circuit detection */ - while(((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_SCDF) >> (DFSDM_FLTISR_SCDF_OFFSET + channel)) == 0) + while(((DFSDM1_Filter0->FLTISR & DFSDM_FLTISR_SCDF) >> (DFSDM_FLTISR_SCDF_Pos + channel)) == 0) { /* Check the Timeout */ if(Timeout != HAL_MAX_DELAY) @@ -816,7 +796,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForScd(DFSDM_Channel_HandleTypeDef *hdfsd } /* Clear short circuit detection flag */ - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCDF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCSDF_Pos + channel)); /* Return function status */ return HAL_OK; @@ -825,7 +805,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelPollForScd(DFSDM_Channel_HandleTypeDef *hdfsd /** * @brief This function allows to stop short circuit detection in polling mode. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -849,7 +829,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop(DFSDM_Channel_HandleTypeDef *hdfsdm_c /* Clear short circuit detection flag */ channel = DFSDM_GetChannelFromInstance(hdfsdm_channel->Instance); - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCDF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCSDF_Pos + channel)); } /* Return function status */ return status; @@ -858,10 +838,10 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop(DFSDM_Channel_HandleTypeDef *hdfsdm_c /** * @brief This function allows to start short circuit detection in interrupt mode. * @note Same mode has to be used for all channels - * @param hdfsdm_channel : DFSDM channel handle. - * @param Threshold : Short circuit detector threshold. + * @param hdfsdm_channel DFSDM channel handle. + * @param Threshold Short circuit detector threshold. * This parameter must be a number between Min_Data = 0 and Max_Data = 255. - * @param BreakSignal : Break signals assigned to short circuit event. + * @param BreakSignal Break signals assigned to short circuit event. * This parameter can be a values combination of @ref DFSDM_BreakSignals. * @retval HAL status */ @@ -889,7 +869,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStart_IT(DFSDM_Channel_HandleTypeDef *hdfs /* Configure threshold and break signals */ hdfsdm_channel->Instance->CHAWSCDR &= ~(DFSDM_CHAWSCDR_BKSCD | DFSDM_CHAWSCDR_SCDT); - hdfsdm_channel->Instance->CHAWSCDR |= ((BreakSignal << DFSDM_CHAWSCDR_BKSCD_OFFSET) | \ + hdfsdm_channel->Instance->CHAWSCDR |= ((BreakSignal << DFSDM_CHAWSCDR_BKSCD_Pos) | \ Threshold); /* Start short circuit detection */ @@ -901,7 +881,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStart_IT(DFSDM_Channel_HandleTypeDef *hdfs /** * @brief Short circuit detection callback. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval None */ __weak void HAL_DFSDM_ChannelScdCallback(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -917,7 +897,7 @@ __weak void HAL_DFSDM_ChannelScdCallback(DFSDM_Channel_HandleTypeDef *hdfsdm_cha /** * @brief This function allows to stop short circuit detection in interrupt mode. * @note Interrupt will be disabled for all channels - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop_IT(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -941,7 +921,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop_IT(DFSDM_Channel_HandleTypeDef *hdfsd /* Clear short circuit detection flag */ channel = DFSDM_GetChannelFromInstance(hdfsdm_channel->Instance); - DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCDF_OFFSET + channel)); + DFSDM1_Filter0->FLTICR = (1 << (DFSDM_FLTICR_CLRSCSDF_Pos + channel)); /* Disable short circuit detection interrupt */ DFSDM1_Filter0->FLTCR2 &= ~(DFSDM_FLTCR2_SCDIE); @@ -952,7 +932,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelScdStop_IT(DFSDM_Channel_HandleTypeDef *hdfsd /** * @brief This function allows to get channel analog watchdog value. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval Channel analog watchdog value. */ int16_t HAL_DFSDM_ChannelGetAwdValue(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -962,8 +942,8 @@ int16_t HAL_DFSDM_ChannelGetAwdValue(DFSDM_Channel_HandleTypeDef *hdfsdm_channel /** * @brief This function allows to modify channel offset value. - * @param hdfsdm_channel : DFSDM channel handle. - * @param Offset : DFSDM channel offset. + * @param hdfsdm_channel DFSDM channel handle. + * @param Offset DFSDM channel offset. * This parameter must be a number between Min_Data = -8388608 and Max_Data = 8388607. * @retval HAL status. */ @@ -986,7 +966,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelModifyOffset(DFSDM_Channel_HandleTypeDef *hdf { /* Modify channel offset */ hdfsdm_channel->Instance->CHCFGR2 &= ~(DFSDM_CHCFGR2_OFFSET); - hdfsdm_channel->Instance->CHCFGR2 |= ((uint32_t) Offset << DFSDM_CHCFGR2_OFFSET_OFFSET); + hdfsdm_channel->Instance->CHCFGR2 |= ((uint32_t) Offset << DFSDM_CHCFGR2_OFFSET_Pos); } /* Return function status */ return status; @@ -1011,7 +991,7 @@ HAL_StatusTypeDef HAL_DFSDM_ChannelModifyOffset(DFSDM_Channel_HandleTypeDef *hdf /** * @brief This function allows to get the current DFSDM channel handle state. - * @param hdfsdm_channel : DFSDM channel handle. + * @param hdfsdm_channel DFSDM channel handle. * @retval DFSDM channel state. */ HAL_DFSDM_Channel_StateTypeDef HAL_DFSDM_ChannelGetState(DFSDM_Channel_HandleTypeDef *hdfsdm_channel) @@ -1041,7 +1021,7 @@ HAL_DFSDM_Channel_StateTypeDef HAL_DFSDM_ChannelGetState(DFSDM_Channel_HandleTyp /** * @brief Initialize the DFSDM filter according to the specified parameters * in the DFSDM_FilterInitTypeDef structure and initialize the associated handle. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_DFSDM_FilterInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1131,7 +1111,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /* Set filter parameters */ hdfsdm_filter->Instance->FLTFCR &= ~(DFSDM_FLTFCR_FORD | DFSDM_FLTFCR_FOSR | DFSDM_FLTFCR_IOSR); hdfsdm_filter->Instance->FLTFCR |= (hdfsdm_filter->Init.FilterParam.SincOrder | - ((hdfsdm_filter->Init.FilterParam.Oversampling - 1) << DFSDM_FLTFCR_FOSR_OFFSET) | + ((hdfsdm_filter->Init.FilterParam.Oversampling - 1) << DFSDM_FLTFCR_FOSR_Pos) | (hdfsdm_filter->Init.FilterParam.IntOversampling - 1)); /* Store regular and injected triggers and injected scan mode*/ @@ -1151,7 +1131,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /** * @brief De-initializes the DFSDM filter. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_DFSDM_FilterDeInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1179,7 +1159,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterDeInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filt /** * @brief Initializes the DFSDM filter MSP. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterMspInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1194,7 +1174,7 @@ __weak void HAL_DFSDM_FilterMspInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) /** * @brief De-initializes the DFSDM filter MSP. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterMspDeInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1228,10 +1208,10 @@ __weak void HAL_DFSDM_FilterMspDeInit(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) /** * @brief This function allows to select channel and to enable/disable * continuous mode for regular conversion. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Channel for regular conversion. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Channel for regular conversion. * This parameter can be a value of @ref DFSDM_Channel_Selection. - * @param ContinuousMode : Enable/disable continuous mode for regular conversion. + * @param ContinuousMode Enable/disable continuous mode for regular conversion. * This parameter can be a value of @ref DFSDM_ContinuousMode. * @retval HAL status */ @@ -1275,8 +1255,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterConfigRegChannel(DFSDM_Filter_HandleTypeDef *h /** * @brief This function allows to select channels for injected conversion. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Channels for injected conversion. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Channels for injected conversion. * This parameter can be a values combination of @ref DFSDM_Channel_Selection. * @retval HAL status */ @@ -1347,7 +1327,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterConfigInjChannel(DFSDM_Filter_HandleTypeDef *h * @brief This function allows to start regular conversion in polling mode. * @note This function should be called only when DFSDM filter instance is * in idle state or if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1375,8 +1355,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart(DFSDM_Filter_HandleTypeDef *hdfsd /** * @brief This function allows to poll for the end of regular conversion. * @note This function should be called only if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Timeout : Timeout value in milliseconds. + * @param hdfsdm_filter DFSDM filter handle. + * @param Timeout Timeout value in milliseconds. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterPollForRegConversion(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -1437,7 +1417,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterPollForRegConversion(DFSDM_Filter_HandleTypeDe /** * @brief This function allows to stop regular conversion in polling mode. * @note This function should be called only if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1467,7 +1447,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop(DFSDM_Filter_HandleTypeDef *hdfsdm * @brief This function allows to start regular conversion in interrupt mode. * @note This function should be called only when DFSDM filter instance is * in idle state or if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1498,7 +1478,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart_IT(DFSDM_Filter_HandleTypeDef *hd /** * @brief This function allows to stop regular conversion in interrupt mode. * @note This function should be called only if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1534,9 +1514,9 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop_IT(DFSDM_Filter_HandleTypeDef *hdf * Please note that data on buffer will contain signed regular conversion * value on 24 most significant bits and corresponding channel on 3 least * significant bits. - * @param hdfsdm_filter : DFSDM filter handle. - * @param pData : The destination buffer address. - * @param Length : The length of data to be transferred from DFSDM filter to memory. + * @param hdfsdm_filter DFSDM filter handle. + * @param pData The destination buffer address. + * @param Length The length of data to be transferred from DFSDM filter to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -1611,9 +1591,9 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStart_DMA(DFSDM_Filter_HandleTypeDef *h * in idle state or if injected conversion is ongoing. * Please note that data on buffer will contain signed 16 most significant * bits of regular conversion. - * @param hdfsdm_filter : DFSDM filter handle. - * @param pData : The destination buffer address. - * @param Length : The length of data to be transferred from DFSDM filter to memory. + * @param hdfsdm_filter DFSDM filter handle. + * @param pData The destination buffer address. + * @param Length The length of data to be transferred from DFSDM filter to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularMsbStart_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -1684,7 +1664,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularMsbStart_DMA(DFSDM_Filter_HandleTypeDef /** * @brief This function allows to stop regular conversion in DMA mode. * @note This function should be called only if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1722,8 +1702,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterRegularStop_DMA(DFSDM_Filter_HandleTypeDef *hd /** * @brief This function allows to get regular conversion value. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Corresponding channel of regular conversion. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Corresponding channel of regular conversion. * @retval Regular conversion value */ int32_t HAL_DFSDM_FilterGetRegularValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -1741,7 +1721,7 @@ int32_t HAL_DFSDM_FilterGetRegularValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filte /* Extract channel and regular conversion value */ *Channel = (reg & DFSDM_FLTRDATAR_RDATACH); - value = ((int32_t)(reg & DFSDM_FLTRDATAR_RDATA) >> DFSDM_FLTRDATAR_DATA_OFFSET); + value = ((int32_t)(reg & DFSDM_FLTRDATAR_RDATA) >> DFSDM_FLTRDATAR_RDATA_Pos); /* return regular conversion value */ return value; @@ -1751,7 +1731,7 @@ int32_t HAL_DFSDM_FilterGetRegularValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filte * @brief This function allows to start injected conversion in polling mode. * @note This function should be called only when DFSDM filter instance is * in idle state or if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1779,8 +1759,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart(DFSDM_Filter_HandleTypeDef *hdfs /** * @brief This function allows to poll for the end of injected conversion. * @note This function should be called only if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Timeout : Timeout value in milliseconds. + * @param hdfsdm_filter DFSDM filter handle. + * @param Timeout Timeout value in milliseconds. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterPollForInjConversion(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -1851,7 +1831,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterPollForInjConversion(DFSDM_Filter_HandleTypeDe /** * @brief This function allows to stop injected conversion in polling mode. * @note This function should be called only if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1881,7 +1861,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop(DFSDM_Filter_HandleTypeDef *hdfsd * @brief This function allows to start injected conversion in interrupt mode. * @note This function should be called only when DFSDM filter instance is * in idle state or if regular conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1912,7 +1892,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart_IT(DFSDM_Filter_HandleTypeDef *h /** * @brief This function allows to stop injected conversion in interrupt mode. * @note This function should be called only if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -1948,9 +1928,9 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop_IT(DFSDM_Filter_HandleTypeDef *hd * Please note that data on buffer will contain signed injected conversion * value on 24 most significant bits and corresponding channel on 3 least * significant bits. - * @param hdfsdm_filter : DFSDM filter handle. - * @param pData : The destination buffer address. - * @param Length : The length of data to be transferred from DFSDM filter to memory. + * @param hdfsdm_filter DFSDM filter handle. + * @param pData The destination buffer address. + * @param Length The length of data to be transferred from DFSDM filter to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -2023,9 +2003,9 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStart_DMA(DFSDM_Filter_HandleTypeDef * * in idle state or if regular conversion is ongoing. * Please note that data on buffer will contain signed 16 most significant * bits of injected conversion. - * @param hdfsdm_filter : DFSDM filter handle. - * @param pData : The destination buffer address. - * @param Length : The length of data to be transferred from DFSDM filter to memory. + * @param hdfsdm_filter DFSDM filter handle. + * @param pData The destination buffer address. + * @param Length The length of data to be transferred from DFSDM filter to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedMsbStart_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -2094,7 +2074,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedMsbStart_DMA(DFSDM_Filter_HandleTypeDe /** * @brief This function allows to stop injected conversion in DMA mode. * @note This function should be called only if injected conversion is ongoing. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop_DMA(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2132,8 +2112,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterInjectedStop_DMA(DFSDM_Filter_HandleTypeDef *h /** * @brief This function allows to get injected conversion value. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Corresponding channel of injected conversion. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Corresponding channel of injected conversion. * @retval Injected conversion value */ int32_t HAL_DFSDM_FilterGetInjectedValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -2151,7 +2131,7 @@ int32_t HAL_DFSDM_FilterGetInjectedValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filt /* Extract channel and injected conversion value */ *Channel = (reg & DFSDM_FLTJDATAR_JDATACH); - value = ((int32_t)(reg & DFSDM_FLTJDATAR_JDATA) >> DFSDM_FLTJDATAR_DATA_OFFSET); + value = ((int32_t)(reg & DFSDM_FLTJDATAR_JDATA) >> DFSDM_FLTJDATAR_JDATA_Pos); /* return regular conversion value */ return value; @@ -2159,8 +2139,8 @@ int32_t HAL_DFSDM_FilterGetInjectedValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filt /** * @brief This function allows to start filter analog watchdog in interrupt mode. - * @param hdfsdm_filter : DFSDM filter handle. - * @param awdParam : DFSDM filter analog watchdog parameters. + * @param hdfsdm_filter DFSDM filter handle. + * @param awdParam DFSDM filter analog watchdog parameters. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterAwdStart_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -2192,15 +2172,15 @@ HAL_StatusTypeDef HAL_DFSDM_FilterAwdStart_IT(DFSDM_Filter_HandleTypeDef *hdfs /* Set thresholds and break signals */ hdfsdm_filter->Instance->FLTAWHTR &= ~(DFSDM_FLTAWHTR_AWHT | DFSDM_FLTAWHTR_BKAWH); - hdfsdm_filter->Instance->FLTAWHTR |= (((uint32_t) awdParam->HighThreshold << DFSDM_FLTAWHTR_THRESHOLD_OFFSET) | \ + hdfsdm_filter->Instance->FLTAWHTR |= (((uint32_t) awdParam->HighThreshold << DFSDM_FLTAWHTR_AWHT_Pos) | \ awdParam->HighBreakSignal); hdfsdm_filter->Instance->FLTAWLTR &= ~(DFSDM_FLTAWLTR_AWLT | DFSDM_FLTAWLTR_BKAWL); - hdfsdm_filter->Instance->FLTAWLTR |= (((uint32_t) awdParam->LowThreshold << DFSDM_FLTAWLTR_THRESHOLD_OFFSET) | \ + hdfsdm_filter->Instance->FLTAWLTR |= (((uint32_t) awdParam->LowThreshold << DFSDM_FLTAWLTR_AWLT_Pos) | \ awdParam->LowBreakSignal); /* Set channels and interrupt for analog watchdog */ hdfsdm_filter->Instance->FLTCR2 &= ~(DFSDM_FLTCR2_AWDCH); - hdfsdm_filter->Instance->FLTCR2 |= (((awdParam->Channel & DFSDM_LSB_MASK) << DFSDM_FLTCR2_AWDCH_OFFSET) | \ + hdfsdm_filter->Instance->FLTCR2 |= (((awdParam->Channel & DFSDM_LSB_MASK) << DFSDM_FLTCR2_AWDCH_Pos) | \ DFSDM_FLTCR2_AWDIE); } /* Return function status */ @@ -2209,7 +2189,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterAwdStart_IT(DFSDM_Filter_HandleTypeDef *hdfs /** * @brief This function allows to stop filter analog watchdog in interrupt mode. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterAwdStop_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2247,8 +2227,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterAwdStop_IT(DFSDM_Filter_HandleTypeDef *hdfsdm_ /** * @brief This function allows to start extreme detector feature. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Channels where extreme detector is enabled. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Channels where extreme detector is enabled. * This parameter can be a values combination of @ref DFSDM_Channel_Selection. * @retval HAL status */ @@ -2272,7 +2252,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterExdStart(DFSDM_Filter_HandleTypeDef *hdfsdm_fi { /* Set channels for extreme detector */ hdfsdm_filter->Instance->FLTCR2 &= ~(DFSDM_FLTCR2_EXCH); - hdfsdm_filter->Instance->FLTCR2 |= ((Channel & DFSDM_LSB_MASK) << DFSDM_FLTCR2_EXCH_OFFSET); + hdfsdm_filter->Instance->FLTCR2 |= ((Channel & DFSDM_LSB_MASK) << DFSDM_FLTCR2_EXCH_Pos); } /* Return function status */ return status; @@ -2280,7 +2260,7 @@ HAL_StatusTypeDef HAL_DFSDM_FilterExdStart(DFSDM_Filter_HandleTypeDef *hdfsdm_fi /** * @brief This function allows to stop extreme detector feature. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval HAL status */ HAL_StatusTypeDef HAL_DFSDM_FilterExdStop(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2316,8 +2296,8 @@ HAL_StatusTypeDef HAL_DFSDM_FilterExdStop(DFSDM_Filter_HandleTypeDef *hdfsdm_fil /** * @brief This function allows to get extreme detector maximum value. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Corresponding channel. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Corresponding channel. * @retval Extreme detector maximum value * This value is between Min_Data = -8388608 and Max_Data = 8388607. */ @@ -2336,7 +2316,7 @@ int32_t HAL_DFSDM_FilterGetExdMaxValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /* Extract channel and extreme detector maximum value */ *Channel = (reg & DFSDM_FLTEXMAX_EXMAXCH); - value = ((int32_t)(reg & DFSDM_FLTEXMAX_EXMAX) >> DFSDM_FLTEXMAX_DATA_OFFSET); + value = ((int32_t)(reg & DFSDM_FLTEXMAX_EXMAX) >> DFSDM_FLTEXMAX_EXMAX_Pos); /* return extreme detector maximum value */ return value; @@ -2344,8 +2324,8 @@ int32_t HAL_DFSDM_FilterGetExdMaxValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /** * @brief This function allows to get extreme detector minimum value. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Corresponding channel. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Corresponding channel. * @retval Extreme detector minimum value * This value is between Min_Data = -8388608 and Max_Data = 8388607. */ @@ -2364,7 +2344,7 @@ int32_t HAL_DFSDM_FilterGetExdMinValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /* Extract channel and extreme detector minimum value */ *Channel = (reg & DFSDM_FLTEXMIN_EXMINCH); - value = ((int32_t)(reg & DFSDM_FLTEXMIN_EXMIN) >> DFSDM_FLTEXMIN_DATA_OFFSET); + value = ((int32_t)(reg & DFSDM_FLTEXMIN_EXMIN) >> DFSDM_FLTEXMIN_EXMIN_Pos); /* return extreme detector minimum value */ return value; @@ -2372,7 +2352,7 @@ int32_t HAL_DFSDM_FilterGetExdMinValue(DFSDM_Filter_HandleTypeDef *hdfsdm_filter /** * @brief This function allows to get conversion time value. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval Conversion time value * @note To get time in second, this value has to be divided by DFSDM clock frequency. */ @@ -2388,7 +2368,7 @@ uint32_t HAL_DFSDM_FilterGetConvTimeValue(DFSDM_Filter_HandleTypeDef *hdfsdm_fil reg = hdfsdm_filter->Instance->FLTCNVTIMR; /* Extract conversion time value */ - value = ((reg & DFSDM_FLTCNVTIMR_CNVCNT) >> DFSDM_FLTCNVTIMR_DATA_OFFSET); + value = ((reg & DFSDM_FLTCNVTIMR_CNVCNT) >> DFSDM_FLTCNVTIMR_CNVCNT_Pos); /* return extreme detector minimum value */ return value; @@ -2396,7 +2376,7 @@ uint32_t HAL_DFSDM_FilterGetConvTimeValue(DFSDM_Filter_HandleTypeDef *hdfsdm_fil /** * @brief This function handles the DFSDM interrupts. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2485,7 +2465,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) threshold = ((reg & DFSDM_FLTAWSR_AWLTF) != 0) ? DFSDM_AWD_LOW_THRESHOLD : DFSDM_AWD_HIGH_THRESHOLD; if(threshold == DFSDM_AWD_HIGH_THRESHOLD) { - reg = reg >> DFSDM_FLTAWSR_HIGH_OFFSET; + reg = reg >> DFSDM_FLTAWSR_AWHTF_Pos; } while((reg & 1) == 0) { @@ -2494,7 +2474,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) } /* Clear analog watchdog flag */ hdfsdm_filter->Instance->FLTAWCFR = (threshold == DFSDM_AWD_HIGH_THRESHOLD) ? \ - (1 << (DFSDM_FLTAWSR_HIGH_OFFSET + channel)) : \ + (1 << (DFSDM_FLTAWSR_AWHTF_Pos + channel)) : \ (1 << channel); /* Call analog watchdog callback */ @@ -2508,7 +2488,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) uint32_t reg = 0; uint32_t channel = 0; - reg = ((hdfsdm_filter->Instance->FLTISR & DFSDM_FLTISR_CKABF) >> DFSDM_FLTISR_CKABF_OFFSET); + reg = ((hdfsdm_filter->Instance->FLTISR & DFSDM_FLTISR_CKABF) >> DFSDM_FLTISR_CKABF_Pos); while(channel < DFSDM1_CHANNEL_NUMBER) { @@ -2519,7 +2499,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) if((a_dfsdm1ChannelHandle[channel]->Instance->CHCFGR1 & DFSDM_CHCFGR1_CKABEN) != 0) { /* Clear clock absence flag */ - hdfsdm_filter->Instance->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_OFFSET + channel)); + hdfsdm_filter->Instance->FLTICR = (1 << (DFSDM_FLTICR_CLRCKABF_Pos + channel)); /* Call clock absence callback */ HAL_DFSDM_ChannelCkabCallback(a_dfsdm1ChannelHandle[channel]); @@ -2538,7 +2518,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) uint32_t channel = 0; /* Get channel */ - reg = ((hdfsdm_filter->Instance->FLTISR & DFSDM_FLTISR_SCDF) >> DFSDM_FLTISR_SCDF_OFFSET); + reg = ((hdfsdm_filter->Instance->FLTISR & DFSDM_FLTISR_SCDF) >> DFSDM_FLTISR_SCDF_Pos); while((reg & 1) == 0) { channel++; @@ -2546,7 +2526,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) } /* Clear short circuit detection flag */ - hdfsdm_filter->Instance->FLTICR = (1 << (DFSDM_FLTICR_CLRSCDF_OFFSET + channel)); + hdfsdm_filter->Instance->FLTICR = (1 << (DFSDM_FLTICR_CLRSCSDF_Pos + channel)); /* Call short circuit detection callback */ HAL_DFSDM_ChannelScdCallback(a_dfsdm1ChannelHandle[channel]); @@ -2557,7 +2537,7 @@ void HAL_DFSDM_IRQHandler(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) * @brief Regular conversion complete callback. * @note In interrupt mode, user has to read conversion value in this function * using HAL_DFSDM_FilterGetRegularValue. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2572,7 +2552,7 @@ __weak void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfs /** * @brief Half regular conversion complete callback. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2589,7 +2569,7 @@ __weak void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef * * @brief Injected conversion complete callback. * @note In interrupt mode, user has to read conversion value in this function * using HAL_DFSDM_FilterGetInjectedValue. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterInjConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2604,7 +2584,7 @@ __weak void HAL_DFSDM_FilterInjConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfs /** * @brief Half injected conversion complete callback. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterInjConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2619,9 +2599,9 @@ __weak void HAL_DFSDM_FilterInjConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef * /** * @brief Filter analog watchdog callback. - * @param hdfsdm_filter : DFSDM filter handle. - * @param Channel : Corresponding channel. - * @param Threshold : Low or high threshold has been reached. + * @param hdfsdm_filter DFSDM filter handle. + * @param Channel Corresponding channel. + * @param Threshold Low or high threshold has been reached. * @retval None */ __weak void HAL_DFSDM_FilterAwdCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, @@ -2639,7 +2619,7 @@ __weak void HAL_DFSDM_FilterAwdCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filte /** * @brief Error callback. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ __weak void HAL_DFSDM_FilterErrorCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2672,7 +2652,7 @@ __weak void HAL_DFSDM_FilterErrorCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_fil /** * @brief This function allows to get the current DFSDM filter handle state. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval DFSDM filter state. */ HAL_DFSDM_Filter_StateTypeDef HAL_DFSDM_FilterGetState(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2683,7 +2663,7 @@ HAL_DFSDM_Filter_StateTypeDef HAL_DFSDM_FilterGetState(DFSDM_Filter_HandleTypeDe /** * @brief This function allows to get the current DFSDM filter error. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval DFSDM filter error code. */ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) @@ -2707,7 +2687,7 @@ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDef *hdfsdm_filter) /** * @brief DMA half transfer complete callback for regular conversion. - * @param hdma : DMA handle. + * @param hdma DMA handle. * @retval None */ static void DFSDM_DMARegularHalfConvCplt(DMA_HandleTypeDef *hdma) @@ -2721,7 +2701,7 @@ static void DFSDM_DMARegularHalfConvCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA transfer complete callback for regular conversion. - * @param hdma : DMA handle. + * @param hdma DMA handle. * @retval None */ static void DFSDM_DMARegularConvCplt(DMA_HandleTypeDef *hdma) @@ -2735,7 +2715,7 @@ static void DFSDM_DMARegularConvCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA half transfer complete callback for injected conversion. - * @param hdma : DMA handle. + * @param hdma DMA handle. * @retval None */ static void DFSDM_DMAInjectedHalfConvCplt(DMA_HandleTypeDef *hdma) @@ -2749,7 +2729,7 @@ static void DFSDM_DMAInjectedHalfConvCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA transfer complete callback for injected conversion. - * @param hdma : DMA handle. + * @param hdma DMA handle. * @retval None */ static void DFSDM_DMAInjectedConvCplt(DMA_HandleTypeDef *hdma) @@ -2763,7 +2743,7 @@ static void DFSDM_DMAInjectedConvCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA error callback. - * @param hdma : DMA handle. + * @param hdma DMA handle. * @retval None */ static void DFSDM_DMAError(DMA_HandleTypeDef *hdma) @@ -2780,7 +2760,7 @@ static void DFSDM_DMAError(DMA_HandleTypeDef *hdma) /** * @brief This function allows to get the number of injected channels. - * @param Channels : bitfield of injected channels. + * @param Channels bitfield of injected channels. * @retval Number of injected channels. */ static uint32_t DFSDM_GetInjChannelsNbr(uint32_t Channels) @@ -2803,7 +2783,7 @@ static uint32_t DFSDM_GetInjChannelsNbr(uint32_t Channels) /** * @brief This function allows to get the channel number from channel instance. - * @param Instance : DFSDM channel instance. + * @param Instance DFSDM channel instance. * @retval Channel number. */ static uint32_t DFSDM_GetChannelFromInstance(DFSDM_Channel_TypeDef* Instance) @@ -2828,7 +2808,8 @@ static uint32_t DFSDM_GetChannelFromInstance(DFSDM_Channel_TypeDef* Instance) channel = 3; } #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) else if(Instance == DFSDM1_Channel4) { channel = 4; @@ -2845,14 +2826,14 @@ static uint32_t DFSDM_GetChannelFromInstance(DFSDM_Channel_TypeDef* Instance) { channel = 7; } -#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ +#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx || STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ return channel; } /** * @brief This function allows to really start regular conversion. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ static void DFSDM_RegConvStart(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) @@ -2893,7 +2874,7 @@ static void DFSDM_RegConvStart(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) /** * @brief This function allows to really stop regular conversion. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ static void DFSDM_RegConvStop(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) @@ -2929,7 +2910,7 @@ static void DFSDM_RegConvStop(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) /** * @brief This function allows to really start injected conversion. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ static void DFSDM_InjConvStart(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) @@ -2973,7 +2954,7 @@ static void DFSDM_InjConvStart(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) /** * @brief This function allows to really stop injected conversion. - * @param hdfsdm_filter : DFSDM filter handle. + * @param hdfsdm_filter DFSDM filter handle. * @retval None */ static void DFSDM_InjConvStop(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) @@ -3019,7 +3000,9 @@ static void DFSDM_InjConvStop(DFSDM_Filter_HandleTypeDef* hdfsdm_filter) /** * @} */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ + +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx || STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #endif /* HAL_DFSDM_MODULE_ENABLED */ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.h index 7af5ae4675..17de1fc91e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dfsdm.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DFSDM HAL module. ****************************************************************************** * @attention @@ -45,7 +43,9 @@ #if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -91,7 +91,8 @@ typedef struct { uint32_t Multiplexer; /*!< Input is external serial inputs, internal register or ADC output. ADC output is available only on STM32L451xx, STM32L452xx, STM32L462xx, - STM32L496xx, STM32L4A6xx products. + STM32L496xx, STM32L4A6xx, STM32L4R5xx, STM32L4R7xx, STM32L4R9xx, + STM32L4S5xx, STM32L4S7xx and STM32L4S9xx products. This parameter can be a value of @ref DFSDM_Channel_InputMultiplexer */ uint32_t DataPacking; /*!< Standard, interleaved or dual mode for internal register. This parameter can be a value of @ref DFSDM_Channel_DataPacking */ @@ -271,9 +272,10 @@ typedef struct */ #define DFSDM_CHANNEL_EXTERNAL_INPUTS ((uint32_t)0x00000000U) /*!< Data are taken from external inputs */ #if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) #define DFSDM_CHANNEL_ADC_OUTPUT DFSDM_CHCFGR1_DATMPX_0 /*!< Data are taken from ADC output */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx || STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define DFSDM_CHANNEL_INTERNAL_REGISTER DFSDM_CHCFGR1_DATMPX_1 /*!< Data are taken from internal register */ /** * @} @@ -352,6 +354,22 @@ typedef struct #define DFSDM_FILTER_EXT_TRIG_TIM6_TRGO (DFSDM_FLTCR1_JEXTSEL_0 | DFSDM_FLTCR1_JEXTSEL_2) /*!< For DFSDM filter 0 and 1 */ #define DFSDM_FILTER_EXT_TRIG_EXTI11 (DFSDM_FLTCR1_JEXTSEL_1 | DFSDM_FLTCR1_JEXTSEL_2) /*!< For DFSDM filter 0, 1, 2 and 3 */ #define DFSDM_FILTER_EXT_TRIG_EXTI15 DFSDM_FLTCR1_JEXTSEL /*!< For DFSDM filter 0, 1, 2 and 3 */ +#elif defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define DFSDM_FILTER_EXT_TRIG_TIM1_TRGO ((uint32_t)0x00000000U) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM1_TRGO2 DFSDM_FLTCR1_JEXTSEL_0 /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM8_TRGO DFSDM_FLTCR1_JEXTSEL_1 /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM8_TRGO2 (DFSDM_FLTCR1_JEXTSEL_0 | DFSDM_FLTCR1_JEXTSEL_1) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM3_TRGO DFSDM_FLTCR1_JEXTSEL_2 /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM4_TRGO (DFSDM_FLTCR1_JEXTSEL_0 | DFSDM_FLTCR1_JEXTSEL_2) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM16_OC1 (DFSDM_FLTCR1_JEXTSEL_1 | DFSDM_FLTCR1_JEXTSEL_2) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM6_TRGO (DFSDM_FLTCR1_JEXTSEL_0 | DFSDM_FLTCR1_JEXTSEL_1 | \ + DFSDM_FLTCR1_JEXTSEL_2) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_TIM7_TRGO DFSDM_FLTCR1_JEXTSEL_3 /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_EXTI11 (DFSDM_FLTCR1_JEXTSEL_3 | DFSDM_FLTCR1_JEXTSEL_4) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_EXTI15 (DFSDM_FLTCR1_JEXTSEL_0 | DFSDM_FLTCR1_JEXTSEL_3 | \ + DFSDM_FLTCR1_JEXTSEL_4) /*!< For all DFSDM filters */ +#define DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT (DFSDM_FLTCR1_JEXTSEL_1 | DFSDM_FLTCR1_JEXTSEL_3 | \ + DFSDM_FLTCR1_JEXTSEL_4) /*!< For all DFSDM filters */ #else #define DFSDM_FILTER_EXT_TRIG_TIM1_TRGO ((uint32_t)0x00000000U) /*!< For DFSDM filter 0, 1, 2 and 3 */ #define DFSDM_FILTER_EXT_TRIG_TIM1_TRGO2 DFSDM_FLTCR1_JEXTSEL_0 /*!< For DFSDM filter 0, 1, 2 and 3 */ @@ -440,7 +458,7 @@ typedef struct #define DFSDM_CHANNEL_1 ((uint32_t)0x00010002U) #define DFSDM_CHANNEL_2 ((uint32_t)0x00020004U) #define DFSDM_CHANNEL_3 ((uint32_t)0x00030008U) -#else /* STM32L451xx || STM32L452xx || STM32L462xx */ +#else #define DFSDM_CHANNEL_0 ((uint32_t)0x00000001U) #define DFSDM_CHANNEL_1 ((uint32_t)0x00010002U) #define DFSDM_CHANNEL_2 ((uint32_t)0x00020004U) @@ -483,13 +501,13 @@ typedef struct */ /** @brief Reset DFSDM channel handle state. - * @param __HANDLE__: DFSDM channel handle. + * @param __HANDLE__ DFSDM channel handle. * @retval None */ #define __HAL_DFSDM_CHANNEL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DFSDM_CHANNEL_STATE_RESET) /** @brief Reset DFSDM filter handle state. - * @param __HANDLE__: DFSDM filter handle. + * @param __HANDLE__ DFSDM filter handle. * @retval None */ #define __HAL_DFSDM_FILTER_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DFSDM_FILTER_STATE_RESET) @@ -499,6 +517,11 @@ typedef struct */ /* End of exported macros ----------------------------------------------------*/ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/* Include DFSDM HAL Extension module */ +#include "stm32l4xx_hal_dfsdm_ex.h" +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Exported functions --------------------------------------------------------*/ /** @addtogroup DFSDM_Exported_Functions DFSDM Exported Functions * @{ @@ -644,14 +667,17 @@ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDe ((CLOCK) == DFSDM_CHANNEL_OUTPUT_CLOCK_AUDIO)) #define IS_DFSDM_CHANNEL_OUTPUT_CLOCK_DIVIDER(DIVIDER) ((2 <= (DIVIDER)) && ((DIVIDER) <= 256)) #if defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) #define IS_DFSDM_CHANNEL_INPUT(INPUT) (((INPUT) == DFSDM_CHANNEL_EXTERNAL_INPUTS) || \ ((INPUT) == DFSDM_CHANNEL_ADC_OUTPUT) || \ ((INPUT) == DFSDM_CHANNEL_INTERNAL_REGISTER)) #else #define IS_DFSDM_CHANNEL_INPUT(INPUT) (((INPUT) == DFSDM_CHANNEL_EXTERNAL_INPUTS) || \ ((INPUT) == DFSDM_CHANNEL_INTERNAL_REGISTER)) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L496xx || STM32L4A6xx */ +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define IS_DFSDM_CHANNEL_DATA_PACKING(MODE) (((MODE) == DFSDM_CHANNEL_STANDARD_MODE) || \ ((MODE) == DFSDM_CHANNEL_INTERLEAVED_MODE) || \ ((MODE) == DFSDM_CHANNEL_DUAL_MODE)) @@ -686,6 +712,19 @@ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDe ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM6_TRGO) || \ ((TRIG) == DFSDM_FILTER_EXT_TRIG_EXTI11) || \ ((TRIG) == DFSDM_FILTER_EXT_TRIG_EXTI15)) +#elif defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_DFSDM_FILTER_EXT_TRIG(TRIG) (((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM1_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM1_TRGO2) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM8_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM8_TRGO2) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM3_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM4_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM16_OC1) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM6_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM7_TRGO) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_EXTI11) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_EXTI15) || \ + ((TRIG) == DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT)) #else #define IS_DFSDM_FILTER_EXT_TRIG(TRIG) (((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM1_TRGO) || \ ((TRIG) == DFSDM_FILTER_EXT_TRIG_TIM1_TRGO2) || \ @@ -720,7 +759,7 @@ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDe ((CHANNEL) == DFSDM_CHANNEL_2) || \ ((CHANNEL) == DFSDM_CHANNEL_3)) #define IS_DFSDM_INJECTED_CHANNEL(CHANNEL) (((CHANNEL) != 0) && ((CHANNEL) <= 0x0003000FU)) -#else /* STM32L451xx || STM32L452xx || STM32L462xx */ +#else #define IS_DFSDM_REGULAR_CHANNEL(CHANNEL) (((CHANNEL) == DFSDM_CHANNEL_0) || \ ((CHANNEL) == DFSDM_CHANNEL_1) || \ ((CHANNEL) == DFSDM_CHANNEL_2) || \ @@ -745,7 +784,11 @@ uint32_t HAL_DFSDM_FilterGetError(DFSDM_Filter_HandleTypeDe /** * @} */ -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #ifdef __cplusplus } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.c new file mode 100644 index 0000000000..2304f97304 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.c @@ -0,0 +1,151 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dfsdm_ex.c + * @author MCD Application Team + * @brief DFSDM Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionality of the DFSDM Peripheral Controller: + * + Set and get pulses skipping on channel. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/** @defgroup DFSDMEx DFSDMEx + * @brief DFSDM Extended HAL module driver + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup DFSDMEx_Exported_Functions DFSDM Extended Exported Functions + * @{ + */ + +/** @defgroup DFSDMEx_Exported_Functions_Group1_Channel Extended channel operation functions + * @brief DFSDM extended channel operation functions + * +@verbatim + =============================================================================== + ##### Extended channel operation functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Set and get value of pulses skipping on channel + +@endverbatim + * @{ + */ + +/** + * @brief Set value of pulses skipping. + * @param hdfsdm_channel DFSDM channel handle. + * @param PulsesValue Value of pulses to be skipped. + * This parameter must be a number between Min_Data = 0 and Max_Data = 63. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_DFDSMEx_ChannelSetPulsesSkipping(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, uint32_t PulsesValue) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check pulses value */ + assert_param(IS_DFSDM_CHANNEL_SKIPPING_VALUE(PulsesValue)); + + /* Check DFSDM channel state */ + if(hdfsdm_channel->State == HAL_DFSDM_CHANNEL_STATE_READY) + { + /* Set new value of pulses skipping */ + hdfsdm_channel->Instance->CHDLYR = (PulsesValue & DFSDM_CHDLYR_PLSSKP); + } + else + { + status = HAL_ERROR; + } + return status; +} + +/** + * @brief Get value of pulses skipping. + * @param hdfsdm_channel DFSDM channel handle. + * @param PulsesValue Value of pulses to be skipped. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_DFDSMEx_ChannelGetPulsesSkipping(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, uint32_t *PulsesValue) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check DFSDM channel state */ + if(hdfsdm_channel->State == HAL_DFSDM_CHANNEL_STATE_READY) + { + /* Get value of remaining pulses to be skipped */ + *PulsesValue = (hdfsdm_channel->Instance->CHDLYR & DFSDM_CHDLYR_PLSSKP); + } + else + { + status = HAL_ERROR; + } + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.h new file mode 100644 index 0000000000..ec26719449 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dfsdm_ex.h @@ -0,0 +1,109 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dfsdm_ex.h + * @author MCD Application Team + * @brief Header file of DFSDM HAL extended module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_DFSDM_EX_H +#define __STM32L4xx_HAL_DFSDM_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DFSDMEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup DFSDMEx_Exported_Functions DFSDM Extended Exported Functions + * @{ + */ + +/** @addtogroup DFSDMEx_Exported_Functions_Group1_Channel Extended channel operation functions + * @{ + */ + +HAL_StatusTypeDef HAL_DFDSMEx_ChannelSetPulsesSkipping(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, uint32_t PulsesValue); +HAL_StatusTypeDef HAL_DFDSMEx_ChannelGetPulsesSkipping(DFSDM_Channel_HandleTypeDef *hdfsdm_channel, uint32_t* PulsesValue); + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ + +/** @addtogroup DFSDMEx_Private_Macros DFSDM Extended Private Macros + * @{ + */ + +#define IS_DFSDM_CHANNEL_SKIPPING_VALUE(VALUE) ((VALUE) < 64U) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_DFSDM_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.c index 78da7a3a3d..9963ae866e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dma.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DMA HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Direct Memory Access (DMA) peripheral: @@ -16,7 +14,7 @@ ============================================================================== [..] (#) Enable and configure the peripheral to be connected to the DMA Channel - (except for internal SRAM / FLASH memories: no initialization is + (except for internal SRAM / FLASH memories: no initialization is necessary). Please refer to the Reference manual for connection between peripherals and DMA requests. @@ -25,15 +23,18 @@ Circular or Normal mode, Channel Priority level, Source and Destination Increment mode using HAL_DMA_Init() function. - Prior to HAL_DMA_Init the CLK shall be enabled for both DMA thanks to: - __HAL_RCC_DMA1_CLK_ENABLE() or __HAL_RCC_DMA2_CLK_ENABLE() + Prior to HAL_DMA_Init the peripheral clock shall be enabled for both DMA & DMAMUX + thanks to: + (##) DMA1 or DMA2: __HAL_RCC_DMA1_CLK_ENABLE() or __HAL_RCC_DMA2_CLK_ENABLE() ; + (##) DMAMUX1: __HAL_RCC_DMAMUX1_CLK_ENABLE(); - (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error + (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error detection. - + (#) Use HAL_DMA_Abort() function to abort the current transfer - + -@- In Memory-to-Memory transfer mode, Circular mode is not allowed. + *** Polling mode IO operation *** ================================= [..] @@ -52,13 +53,12 @@ In this case the DMA interrupt is configured (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can - add his own function by customization of function pointer XferCpltCallback and - XferErrorCallback (i.e. a member of DMA handle structure). + add his own function to register callbacks with HAL_DMA_RegisterCallback(). *** DMA HAL driver macros list *** - ============================================= + ============================================= [..] - Below the list of most used macros in DMA HAL driver. + Below the list of macros in DMA HAL driver. (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel. (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel. @@ -66,10 +66,10 @@ (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags. (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts. (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts. - (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt has occurred or not. + (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt is enabled or not. - [..] - (@) You can refer to the DMA HAL driver header file for more useful macros + [..] + (@) You can refer to the DMA HAL driver header file for more useful macros @endverbatim ****************************************************************************** @@ -125,6 +125,11 @@ * @{ */ static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); +#if defined(DMAMUX1) +static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma); +static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma); +#endif /* DMAMUX1 */ + /** * @} */ @@ -136,7 +141,7 @@ static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t */ /** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and de-initialization functions + * @brief Initialization and de-initialization functions * @verbatim =============================================================================== @@ -144,11 +149,11 @@ static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t =============================================================================== [..] This section provides functions allowing to initialize the DMA Channel source - and destination addresses, incrementation and data sizes, transfer direction, + and destination addresses, incrementation and data sizes, transfer direction, circular/normal mode selection, memory-to-memory mode selection and Channel priority value. [..] The HAL_DMA_Init() function follows the DMA configuration procedures as described in - reference manual. + reference manual. @endverbatim * @{ @@ -181,19 +186,16 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) assert_param(IS_DMA_MODE(hdma->Init.Mode)); assert_param(IS_DMA_PRIORITY(hdma->Init.Priority)); - if(hdma->Init.Direction != DMA_MEMORY_TO_MEMORY) - { - assert_param(IS_DMA_ALL_REQUEST(hdma->Init.Request)); - } - - /* calculation of the channel index */ + assert_param(IS_DMA_ALL_REQUEST(hdma->Init.Request)); + + /* Compute the channel index */ if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) { /* DMA1 */ hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2; hdma->DmaBaseAddress = DMA1; } - else + else { /* DMA2 */ hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2; @@ -206,10 +208,10 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) /* Get the CR register value */ tmp = hdma->Instance->CCR; - /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR bits */ - tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | \ - DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | \ - DMA_CCR_DIR)); + /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR and MEM2MEM bits */ + tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | + DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | + DMA_CCR_DIR | DMA_CCR_MEM2MEM)); /* Prepare the DMA Channel configuration */ tmp |= hdma->Init.Direction | @@ -220,6 +222,48 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) /* Write to DMA Channel CR register */ hdma->Instance->CCR = tmp; + +#if defined(DMAMUX1) + /* Initialize parameters for DMAMUX channel : + DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask + */ + DMA_CalcDMAMUXChannelBaseAndMask(hdma); + + if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY) + { + /* if memory to memory force the request to 0*/ + hdma->Init.Request = DMA_REQUEST_MEM2MEM; + } + + /* Set peripheral request to DMAMUX channel */ + hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID); + + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + if(((hdma->Init.Request > 0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR3))) + { + /* Initialize parameters for DMAMUX request generator : + DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask + */ + DMA_CalcDMAMUXRequestGenBaseAndMask(hdma); + + /* Reset the DMAMUX request generator register*/ + hdma->DMAmuxRequestGen->RGCR = 0U; + + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + } + else + { + hdma->DMAmuxRequestGen = 0U; + hdma->DMAmuxRequestGenStatus = 0U; + hdma->DMAmuxRequestGenStatusMask = 0U; + } +#endif /* DMAMUX1 */ + +#if !defined (DMAMUX1) + /* Set request selection */ if(hdma->Init.Direction != DMA_MEMORY_TO_MEMORY) { @@ -230,18 +274,22 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) DMA1_CSELR->CSELR &= ~(DMA_CSELR_C1S << hdma->ChannelIndex); /* Configure request selection for DMA1 Channelx */ - DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << (hdma->ChannelIndex)); + DMA1_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << (hdma->ChannelIndex)); } else /* DMA2 */ { /* Reset request selection for DMA2 Channelx */ DMA2_CSELR->CSELR &= ~(DMA_CSELR_C1S << hdma->ChannelIndex); - + /* Configure request selection for DMA2 Channelx */ - DMA2_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << (hdma->ChannelIndex)); + DMA2_CSELR->CSELR |= (uint32_t) (hdma->Init.Request << (hdma->ChannelIndex)); } } +#endif /* STM32L431xx || STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L442xx || STM32L486xx */ + /* STM32L496xx || STM32L4A6xx */ + /* Clean callbacks */ hdma->XferCpltCallback = NULL; hdma->XferHalfCpltCallback = NULL; @@ -256,7 +304,7 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) /* Allocate lock resource and initialize it */ hdma->Lock = HAL_UNLOCKED; - + return HAL_OK; } @@ -268,52 +316,91 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) */ HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) { + /* Check the DMA handle allocation */ - if(hdma == NULL) + if (NULL == hdma ) { return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); /* Disable the selected DMA Channelx */ __HAL_DMA_DISABLE(hdma); - /* Reset DMA Channel control register */ - hdma->Instance->CCR = 0; - - /* Calculation of the channel index */ + /* Compute the channel index */ if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) { /* DMA1 */ hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2; hdma->DmaBaseAddress = DMA1; } - else + else { /* DMA2 */ hdma->ChannelIndex = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2; hdma->DmaBaseAddress = DMA2; } - + + /* Reset DMA Channel control register */ + hdma->Instance->CCR = 0; /* Clear all flags */ - hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); + hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex)); + +#if !defined (DMAMUX1) /* Reset DMA channel selection register */ if (DMA1 == hdma->DmaBaseAddress) { /* DMA1 */ - DMA1_CSELR->CSELR &= ~(DMA_CSELR_C1S << (hdma->ChannelIndex)); + DMA1_CSELR->CSELR &= ~(DMA_CSELR_C1S << (hdma->ChannelIndex)); } - else + else { /* DMA2 */ - DMA2_CSELR->CSELR &= ~(DMA_CSELR_C1S << (hdma->ChannelIndex)); + DMA2_CSELR->CSELR &= ~(DMA_CSELR_C1S << (hdma->ChannelIndex)); } +#endif /* STM32L431xx || STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L442xx || STM32L486xx */ + /* STM32L496xx || STM32L4A6xx */ - /* Initialize the error code */ +#if defined(DMAMUX1) + + /* Initialize parameters for DMAMUX channel : + DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask */ + + DMA_CalcDMAMUXChannelBaseAndMask(hdma); + + /* Reset the DMAMUX channel that corresponds to the DMA channel */ + hdma->DMAmuxChannel->CCR = 0; + + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + /* Reset Request generator parameters if any */ + if(((hdma->Init.Request > 0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR3))) + { + /* Initialize parameters for DMAMUX request generator : + DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask + */ + DMA_CalcDMAMUXRequestGenBaseAndMask(hdma); + + /* Reset the DMAMUX request generator register*/ + hdma->DMAmuxRequestGen->RGCR = 0U; + + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + } + + hdma->DMAmuxRequestGen = 0U; + hdma->DMAmuxRequestGenStatus = 0U; + hdma->DMAmuxRequestGenStatusMask = 0U; + +#endif /* DMAMUX1 */ + + /* Initialise the error code */ hdma->ErrorCode = HAL_DMA_ERROR_NONE; /* Initialize the DMA state */ @@ -372,22 +459,22 @@ HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, ui /* Change DMA peripheral state */ hdma->State = HAL_DMA_STATE_BUSY; hdma->ErrorCode = HAL_DMA_ERROR_NONE; - + /* Disable the peripheral */ __HAL_DMA_DISABLE(hdma); - + /* Configure the source, destination address and the data length & clear flags*/ DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); - + /* Enable the Peripheral */ __HAL_DMA_ENABLE(hdma); } else { - /* Process Unlocked */ - __HAL_UNLOCK(hdma); - status = HAL_BUSY; - } + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + status = HAL_BUSY; + } return status; } @@ -409,19 +496,19 @@ HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, /* Process locked */ __HAL_LOCK(hdma); - + if(HAL_DMA_STATE_READY == hdma->State) { /* Change DMA peripheral state */ hdma->State = HAL_DMA_STATE_BUSY; hdma->ErrorCode = HAL_DMA_ERROR_NONE; - + /* Disable the peripheral */ __HAL_DMA_DISABLE(hdma); - + /* Configure the source, destination address and the data length & clear flags*/ DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength); - + /* Enable the transfer complete interrupt */ /* Enable the transfer Error interrupt */ if(NULL != hdma->XferHalfCpltCallback ) @@ -434,17 +521,36 @@ HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT); __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE)); } + +#ifdef DMAMUX1 + + /* Check if DMAMUX Synchronization is enabled*/ + if((hdma->DMAmuxChannel->CCR & DMAMUX_CxCR_SE) != 0U) + { + /* Enable DMAMUX sync overrun IT*/ + hdma->DMAmuxChannel->CCR |= DMAMUX_CxCR_SOIE; + } + + if(hdma->DMAmuxRequestGen != 0U) + { + /* if using DMAMUX request generator, enable the DMAMUX request generator overrun IT*/ + /* enable the request gen overrun IT*/ + hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE; + } + +#endif /* DMAMUX1 */ + /* Enable the Peripheral */ __HAL_DMA_ENABLE(hdma); } else - { + { /* Process Unlocked */ - __HAL_UNLOCK(hdma); + __HAL_UNLOCK(hdma); /* Remain BUSY */ status = HAL_BUSY; - } + } return status; } @@ -458,31 +564,49 @@ HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) { HAL_StatusTypeDef status = HAL_OK; - if(HAL_DMA_STATE_BUSY != hdma->State) + /* Check the DMA peripheral handle */ + if(NULL == hdma) { - /* no transfer ongoing */ - hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; - - status = HAL_ERROR; + return HAL_ERROR; } - else + + /* Disable DMA IT */ + __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); + +#if defined(DMAMUX1) + /* disable the DMAMUX sync overrun IT*/ + hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE; +#endif /* DMAMUX1 */ + + /* Disable the channel */ + __HAL_DMA_DISABLE(hdma); + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); + +#if defined(DMAMUX1) + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + if(hdma->DMAmuxRequestGen != 0U) { - /* Disable DMA IT */ - __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); - - /* Disable the channel */ - __HAL_DMA_DISABLE(hdma); - - /* Clear all flags */ - hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); + /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/ + /* disable the request gen overrun IT*/ + hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE; - /* Change the DMA state */ - hdma->State = HAL_DMA_STATE_READY; - - /* Process Unlocked */ - __HAL_UNLOCK(hdma); + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; } - return status; + +#endif /* DMAMUX1 */ + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + + return status; } /** @@ -492,38 +616,60 @@ HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) * @retval HAL status */ HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) -{ +{ HAL_StatusTypeDef status = HAL_OK; - + if(HAL_DMA_STATE_BUSY != hdma->State) { /* no transfer ongoing */ hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; - + status = HAL_ERROR; } else - { + { /* Disable DMA IT */ __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); - + /* Disable the channel */ __HAL_DMA_DISABLE(hdma); - + +#if defined(DMAMUX1) + /* disable the DMAMUX sync overrun IT*/ + hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE; + /* Clear all flags */ hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); - + + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + if(hdma->DMAmuxRequestGen != 0U) + { + /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/ + /* disable the request gen overrun IT*/ + hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE; + + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + } + +#else + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); +#endif /* DMAMUX1 */ + /* Change the DMA state */ hdma->State = HAL_DMA_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hdma); - - /* Call User Abort callback */ + + /* Call User Abort callback */ if(hdma->XferAbortCallback != NULL) { hdma->XferAbortCallback(hdma); - } + } } return status; } @@ -536,7 +682,7 @@ HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) * @param Timeout: Timeout duration. * @retval HAL status */ -HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout) { uint32_t temp; uint32_t tickstart = 0; @@ -545,7 +691,7 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp { /* no transfer ongoing */ hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; - + __HAL_UNLOCK(hdma); return HAL_ERROR; } @@ -555,7 +701,7 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED; return HAL_ERROR; } - + /* Get the level transfer complete flag */ if (HAL_DMA_FULL_TRANSFER == CompleteLevel) { @@ -571,9 +717,9 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp /* Get tick */ tickstart = HAL_GetTick(); - while(RESET == (hdma->DmaBaseAddress->ISR & temp)) + while(RESET == (hdma->DmaBaseAddress->ISR & temp)) { - if((RESET != (hdma->DmaBaseAddress->ISR & (DMA_FLAG_TE1 << hdma->ChannelIndex)))) + if((RESET != (hdma->DmaBaseAddress->ISR & (DMA_FLAG_TE1 << hdma->ChannelIndex)))) { /* When a DMA transfer error occurs */ /* A hardware clear of its EN bits is performed */ @@ -601,7 +747,7 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp /* Change the DMA state */ hdma->State = HAL_DMA_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hdma); @@ -610,6 +756,35 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp } } +#if defined(DMAMUX1) + /*Check for DMAMUX Request generator (if used) overrun status */ + if(hdma->DMAmuxRequestGen != 0U) + { + /* if using DMAMUX request generator Check for DMAMUX request generator overrun */ + if((hdma->DMAmuxRequestGenStatus->RGSR & hdma->DMAmuxRequestGenStatusMask) != 0U) + { + /* Disable the request gen overrun interrupt */ + hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE; + + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_REQGEN; + } + } + + /* Check for DMAMUX Synchronization overrun */ + if((hdma->DMAmuxChannelStatus->CSR & hdma->DMAmuxChannelStatusMask) != 0U) + { + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_SYNC; + } +#endif /* DMAMUX1 */ + if(HAL_DMA_FULL_TRANSFER == CompleteLevel) { /* Clear the transfer complete flag */ @@ -624,9 +799,9 @@ HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t Comp /* Clear the half transfer complete flag */ hdma->DmaBaseAddress->IFCR = (DMA_FLAG_HT1 << hdma->ChannelIndex); } - + /* Process unlocked */ - __HAL_UNLOCK(hdma); + __HAL_UNLOCK(hdma); return HAL_OK; } @@ -641,7 +816,7 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) { uint32_t flag_it = hdma->DmaBaseAddress->ISR; uint32_t source_it = hdma->Instance->CCR; - + /* Half Transfer Complete Interrupt management ******************************/ if ((RESET != (flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_HT))) { @@ -663,14 +838,14 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) hdma->XferHalfCpltCallback(hdma); } } - + /* Transfer Complete Interrupt management ***********************************/ else if ((RESET != (flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TC))) { if((hdma->Instance->CCR & DMA_CCR_CIRC) == 0) { /* Disable the transfer complete and error interrupt */ - __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE)); + __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC); /* Change the DMA state */ hdma->State = HAL_DMA_STATE_READY; @@ -723,17 +898,17 @@ void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) * the configuration information for the specified DMA Channel. * @param CallbackID: User Callback identifer * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. - * @param pCallback: pointer to private callbacsk function which has pointer to + * @param pCallback: pointer to private callbacsk function which has pointer to * a DMA_HandleTypeDef structure as parameter. * @retval HAL status - */ + */ HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma)) { HAL_StatusTypeDef status = HAL_OK; - + /* Process locked */ __HAL_LOCK(hdma); - + if(HAL_DMA_STATE_READY == hdma->State) { switch (CallbackID) @@ -741,32 +916,32 @@ HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_Call case HAL_DMA_XFER_CPLT_CB_ID: hdma->XferCpltCallback = pCallback; break; - + case HAL_DMA_XFER_HALFCPLT_CB_ID: hdma->XferHalfCpltCallback = pCallback; - break; + break; case HAL_DMA_XFER_ERROR_CB_ID: hdma->XferErrorCallback = pCallback; - break; - + break; + case HAL_DMA_XFER_ABORT_CB_ID: hdma->XferAbortCallback = pCallback; - break; - + break; + default: status = HAL_ERROR; - break; + break; } } else { status = HAL_ERROR; - } - + } + /* Release Lock */ __HAL_UNLOCK(hdma); - + return status; } @@ -777,14 +952,14 @@ HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_Call * @param CallbackID: User Callback identifer * a HAL_DMA_CallbackIDTypeDef ENUM as parameter. * @retval HAL status - */ + */ HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) { HAL_StatusTypeDef status = HAL_OK; /* Process locked */ __HAL_LOCK(hdma); - + if(HAL_DMA_STATE_READY == hdma->State) { switch (CallbackID) @@ -792,42 +967,42 @@ HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_Ca case HAL_DMA_XFER_CPLT_CB_ID: hdma->XferCpltCallback = NULL; break; - + case HAL_DMA_XFER_HALFCPLT_CB_ID: hdma->XferHalfCpltCallback = NULL; - break; + break; case HAL_DMA_XFER_ERROR_CB_ID: hdma->XferErrorCallback = NULL; - break; - + break; + case HAL_DMA_XFER_ABORT_CB_ID: hdma->XferAbortCallback = NULL; - break; - + break; + case HAL_DMA_XFER_ALL_CB_ID: hdma->XferCpltCallback = NULL; hdma->XferHalfCpltCallback = NULL; hdma->XferErrorCallback = NULL; hdma->XferAbortCallback = NULL; - break; - + break; + default: status = HAL_ERROR; - break; + break; } } else { status = HAL_ERROR; - } - + } + /* Release Lock */ __HAL_UNLOCK(hdma); - + return status; } - + /** * @} */ @@ -840,7 +1015,7 @@ HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_Ca @verbatim =============================================================================== ##### Peripheral State and Errors functions ##### - =============================================================================== + =============================================================================== [..] This subsection provides functions allowing to (+) Check the DMA state @@ -896,9 +1071,20 @@ uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) */ static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) { +#if defined(DMAMUX1) + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + if(hdma->DMAmuxRequestGen != 0U) + { + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + } +#endif + /* Clear all flags */ hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); - + /* Configure DMA Channel data length */ hdma->Instance->CNDTR = DataLength; @@ -922,6 +1108,57 @@ static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t } } +#if defined(DMAMUX1) + +/** + * @brief Updates the DMA handle with the DMAMUX channel and status mask depending on stream number + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ +static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma) +{ + uint32_t channel_number = 0; + DMAMUX_Channel_TypeDef *DMAMUX1_ChannelBase; + + /* check if instance is not outside the DMA channel range */ + if ((uint32_t)hdma->Instance < (uint32_t)DMA2_Channel1) + { + /* DMA1 */ + DMAMUX1_ChannelBase = DMAMUX1_Channel0; + } + else + { + /* DMA2 */ + DMAMUX1_ChannelBase = DMAMUX1_Channel7; + } + channel_number = (((uint32_t)hdma->Instance & 0xFF) - 8) / 20; + hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)(uint32_t)((uint32_t)DMAMUX1_ChannelBase + (hdma->ChannelIndex >> 2) * ((uint32_t)DMAMUX1_Channel1 - (uint32_t)DMAMUX1_Channel0)); + hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus; + hdma->DMAmuxChannelStatusMask = 1U << channel_number; +} + +/** + * @brief Updates the DMA handle with the DMAMUX request generator params + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Stream. + * @retval None + */ + +static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma) +{ + uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID; + + /* DMA Channels are connected to DMAMUX1 request generator blocks*/ + hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U))); + + hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus; + + hdma->DMAmuxRequestGenStatusMask = 1U << (request - 1U); +} + +#endif /* DMAMUX1 */ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.h index eedd7f6750..c11a47ccae 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dma.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DMA HAL module. ****************************************************************************** * @attention @@ -55,7 +53,6 @@ */ /* Exported types ------------------------------------------------------------*/ - /** @defgroup DMA_Exported_Types DMA Exported Types * @{ */ @@ -114,17 +111,17 @@ typedef enum }HAL_DMA_LevelCompleteTypeDef; -/** +/** * @brief HAL DMA Callback ID structure definition */ typedef enum { HAL_DMA_XFER_CPLT_CB_ID = 0x00, /*!< Full transfer */ HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01, /*!< Half transfer */ - HAL_DMA_XFER_ERROR_CB_ID = 0x02, /*!< Error */ - HAL_DMA_XFER_ABORT_CB_ID = 0x03, /*!< Abort */ - HAL_DMA_XFER_ALL_CB_ID = 0x04 /*!< All */ - + HAL_DMA_XFER_ERROR_CB_ID = 0x02, /*!< Error */ + HAL_DMA_XFER_ABORT_CB_ID = 0x03, /*!< Abort */ + HAL_DMA_XFER_ALL_CB_ID = 0x04 /*!< All */ + }HAL_DMA_CallbackIDTypeDef; /** @@ -133,13 +130,13 @@ typedef enum typedef struct __DMA_HandleTypeDef { DMA_Channel_TypeDef *Instance; /*!< Register base address */ - + DMA_InitTypeDef Init; /*!< DMA communication parameters */ - + HAL_LockTypeDef Lock; /*!< DMA locking object */ - + __IO HAL_DMA_StateTypeDef State; /*!< DMA transfer state */ - + void *Parent; /*!< Parent object state */ void (* XferCpltCallback)(struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer complete callback */ @@ -148,13 +145,29 @@ typedef struct __DMA_HandleTypeDef void (* XferErrorCallback)(struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer error callback */ - void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer abort callback */ - + void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA transfer abort callback */ + __IO uint32_t ErrorCode; /*!< DMA Error code */ DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address */ - - uint32_t ChannelIndex; /*!< DMA Channel Index */ + + uint32_t ChannelIndex; /*!< DMA Channel Index */ + +#if defined(DMAMUX1) + DMAMUX_Channel_TypeDef *DMAmuxChannel; /*!< Register base address */ + + DMAMUX_ChannelStatus_TypeDef *DMAmuxChannelStatus; /*!< DMAMUX Channels Status Base Address */ + + uint32_t DMAmuxChannelStatusMask; /*!< DMAMUX Channel Status Mask */ + + DMAMUX_RequestGen_TypeDef *DMAmuxRequestGen; /*!< DMAMUX request generator Base Address */ + + DMAMUX_RequestGenStatus_TypeDef *DMAmuxRequestGenStatus; /*!< DMAMUX request generator Address */ + + uint32_t DMAmuxRequestGenStatusMask; /*!< DMAMUX request generator Status mask */ + +#endif /* DMAMUX1 */ + }DMA_HandleTypeDef; /** * @} @@ -169,11 +182,14 @@ typedef struct __DMA_HandleTypeDef /** @defgroup DMA_Error_Code DMA Error Code * @{ */ -#define HAL_DMA_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ -#define HAL_DMA_ERROR_TE ((uint32_t)0x00000001) /*!< Transfer error */ -#define HAL_DMA_ERROR_NO_XFER ((uint32_t)0x00000004) /*!< no ongoing transfer */ -#define HAL_DMA_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< Timeout error */ -#define HAL_DMA_ERROR_NOT_SUPPORTED ((uint32_t)0x00000100) /*!< Not supported mode */ +#define HAL_DMA_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ +#define HAL_DMA_ERROR_TE ((uint32_t)0x00000001U) /*!< Transfer error */ +#define HAL_DMA_ERROR_NO_XFER ((uint32_t)0x00000004U) /*!< Abort requested with no Xfer ongoing */ +#define HAL_DMA_ERROR_TIMEOUT ((uint32_t)0x00000020U) /*!< Timeout error */ +#define HAL_DMA_ERROR_NOT_SUPPORTED ((uint32_t)0x00000100U) /*!< Not supported mode */ +#define HAL_DMA_ERROR_SYNC ((uint32_t)0x00000200U) /*!< DMAMUX sync overrun error */ +#define HAL_DMA_ERROR_REQGEN ((uint32_t)0x00000400U) /*!< DMAMUX request generator overrun error */ + /** * @} */ @@ -181,6 +197,8 @@ typedef struct __DMA_HandleTypeDef /** @defgroup DMA_request DMA request * @{ */ +#if !defined (DMAMUX1) + #define DMA_REQUEST_0 ((uint32_t)0x00000000) #define DMA_REQUEST_1 ((uint32_t)0x00000001) #define DMA_REQUEST_2 ((uint32_t)0x00000002) @@ -189,6 +207,131 @@ typedef struct __DMA_HandleTypeDef #define DMA_REQUEST_5 ((uint32_t)0x00000005) #define DMA_REQUEST_6 ((uint32_t)0x00000006) #define DMA_REQUEST_7 ((uint32_t)0x00000007) + +#endif + +#if defined(DMAMUX1) + +#define DMA_REQUEST_MEM2MEM 0U /*!< memory to memory transfer */ + +#define DMA_REQUEST_GENERATOR0 1U /*!< DMAMUX1 request generator 0 */ +#define DMA_REQUEST_GENERATOR1 2U /*!< DMAMUX1 request generator 1 */ +#define DMA_REQUEST_GENERATOR2 3U /*!< DMAMUX1 request generator 2 */ +#define DMA_REQUEST_GENERATOR3 4U /*!< DMAMUX1 request generator 3 */ + +#define DMA_REQUEST_ADC1 5U /*!< DMAMUX1 ADC1 request */ + +#define DMA_REQUEST_DAC1_CH1 6U /*!< DMAMUX1 DAC1 CH1 request */ +#define DMA_REQUEST_DAC1_CH2 7U /*!< DMAMUX1 DAC1 CH2 request */ + +#define DMA_REQUEST_TIM6_UP 8U /*!< DMAMUX1 TIM6 UP request */ +#define DMA_REQUEST_TIM7_UP 9U /*!< DMAMUX1 TIM7 UP request */ + +#define DMA_REQUEST_SPI1_RX 10U /*!< DMAMUX1 SPI1 RX request */ +#define DMA_REQUEST_SPI1_TX 11U /*!< DMAMUX1 SPI1 TX request */ +#define DMA_REQUEST_SPI2_RX 12U /*!< DMAMUX1 SPI2 RX request */ +#define DMA_REQUEST_SPI2_TX 13U /*!< DMAMUX1 SPI2 TX request */ +#define DMA_REQUEST_SPI3_RX 14U /*!< DMAMUX1 SPI3 RX request */ +#define DMA_REQUEST_SPI3_TX 15U /*!< DMAMUX1 SPI3 TX request */ + +#define DMA_REQUEST_I2C1_RX 16U /*!< DMAMUX1 I2C1 RX request */ +#define DMA_REQUEST_I2C1_TX 17U /*!< DMAMUX1 I2C1 TX request */ +#define DMA_REQUEST_I2C2_RX 18U /*!< DMAMUX1 I2C2 RX request */ +#define DMA_REQUEST_I2C2_TX 19U /*!< DMAMUX1 I2C2 TX request */ +#define DMA_REQUEST_I2C3_RX 20U /*!< DMAMUX1 I2C3 RX request */ +#define DMA_REQUEST_I2C3_TX 21U /*!< DMAMUX1 I2C3 TX request */ +#define DMA_REQUEST_I2C4_RX 22U /*!< DMAMUX1 I2C4 RX request */ +#define DMA_REQUEST_I2C4_TX 23U /*!< DMAMUX1 I2C4 TX request */ + +#define DMA_REQUEST_USART1_RX 24U /*!< DMAMUX1 USART1 RX request */ +#define DMA_REQUEST_USART1_TX 25U /*!< DMAMUX1 USART1 TX request */ +#define DMA_REQUEST_USART2_RX 26U /*!< DMAMUX1 USART2 RX request */ +#define DMA_REQUEST_USART2_TX 27U /*!< DMAMUX1 USART2 TX request */ +#define DMA_REQUEST_USART3_RX 28U /*!< DMAMUX1 USART3 RX request */ +#define DMA_REQUEST_USART3_TX 29U /*!< DMAMUX1 USART3 TX request */ + +#define DMA_REQUEST_UART4_RX 30U /*!< DMAMUX1 UART4 RX request */ +#define DMA_REQUEST_UART4_TX 31U /*!< DMAMUX1 UART4 TX request */ +#define DMA_REQUEST_UART5_RX 32U /*!< DMAMUX1 UART5 RX request */ +#define DMA_REQUEST_UART5_TX 33U /*!< DMAMUX1 UART5 TX request */ + +#define DMA_REQUEST_LPUART1_RX 34U /*!< DMAMUX1 LP_UART1_RX request */ +#define DMA_REQUEST_LPUART1_TX 35U /*!< DMAMUX1 LP_UART1_RX request */ + +#define DMA_REQUEST_SAI1_A 36U /*!< DMAMUX1 SAI1 A request */ +#define DMA_REQUEST_SAI1_B 37U /*!< DMAMUX1 SAI1 B request */ +#define DMA_REQUEST_SAI2_A 38U /*!< DMAMUX1 SAI2 A request */ +#define DMA_REQUEST_SAI2_B 39U /*!< DMAMUX1 SAI2 B request */ + +#define DMA_REQUEST_OCTOSPI1 40U /*!< DMAMUX1 OCTOSPI1 request */ +#define DMA_REQUEST_OCTOSPI2 41U /*!< DMAMUX1 OCTOSPI2 request */ + +#define DMA_REQUEST_TIM1_CH1 42U /*!< DMAMUX1 TIM1 CH1 request */ +#define DMA_REQUEST_TIM1_CH2 43U /*!< DMAMUX1 TIM1 CH2 request */ +#define DMA_REQUEST_TIM1_CH3 44U /*!< DMAMUX1 TIM1 CH3 request */ +#define DMA_REQUEST_TIM1_CH4 45U /*!< DMAMUX1 TIM1 CH4 request */ +#define DMA_REQUEST_TIM1_UP 46U /*!< DMAMUX1 TIM1 UP request */ +#define DMA_REQUEST_TIM1_TRIG 47U /*!< DMAMUX1 TIM1 TRIG request */ +#define DMA_REQUEST_TIM1_COM 48U /*!< DMAMUX1 TIM1 COM request */ + +#define DMA_REQUEST_TIM8_CH1 49U /*!< DMAMUX1 TIM8 CH1 request */ +#define DMA_REQUEST_TIM8_CH2 50U /*!< DMAMUX1 TIM8 CH2 request */ +#define DMA_REQUEST_TIM8_CH3 51U /*!< DMAMUX1 TIM8 CH3 request */ +#define DMA_REQUEST_TIM8_CH4 52U /*!< DMAMUX1 TIM8 CH4 request */ +#define DMA_REQUEST_TIM8_UP 53U /*!< DMAMUX1 TIM8 UP request */ +#define DMA_REQUEST_TIM8_TRIG 54U /*!< DMAMUX1 TIM8 TRIG request */ +#define DMA_REQUEST_TIM8_COM 55U /*!< DMAMUX1 TIM8 COM request */ + +#define DMA_REQUEST_TIM2_CH1 56U /*!< DMAMUX1 TIM2 CH1 request */ +#define DMA_REQUEST_TIM2_CH2 57U /*!< DMAMUX1 TIM2 CH2 request */ +#define DMA_REQUEST_TIM2_CH3 58U /*!< DMAMUX1 TIM2 CH3 request */ +#define DMA_REQUEST_TIM2_CH4 59U /*!< DMAMUX1 TIM2 CH4 request */ +#define DMA_REQUEST_TIM2_UP 60U /*!< DMAMUX1 TIM2 UP request */ + +#define DMA_REQUEST_TIM3_CH1 61U /*!< DMAMUX1 TIM3 CH1 request */ +#define DMA_REQUEST_TIM3_CH2 62U /*!< DMAMUX1 TIM3 CH2 request */ +#define DMA_REQUEST_TIM3_CH3 63U /*!< DMAMUX1 TIM3 CH3 request */ +#define DMA_REQUEST_TIM3_CH4 64U /*!< DMAMUX1 TIM3 CH4 request */ +#define DMA_REQUEST_TIM3_UP 65U /*!< DMAMUX1 TIM3 UP request */ +#define DMA_REQUEST_TIM3_TRIG 66U /*!< DMAMUX1 TIM3 TRIG request */ + +#define DMA_REQUEST_TIM4_CH1 67U /*!< DMAMUX1 TIM4 CH1 request */ +#define DMA_REQUEST_TIM4_CH2 68U /*!< DMAMUX1 TIM4 CH2 request */ +#define DMA_REQUEST_TIM4_CH3 69U /*!< DMAMUX1 TIM4 CH3 request */ +#define DMA_REQUEST_TIM4_CH4 70U /*!< DMAMUX1 TIM4 CH4 request */ +#define DMA_REQUEST_TIM4_UP 71U /*!< DMAMUX1 TIM4 UP request */ + +#define DMA_REQUEST_TIM5_CH1 72U /*!< DMAMUX1 TIM5 CH1 request */ +#define DMA_REQUEST_TIM5_CH2 73U /*!< DMAMUX1 TIM5 CH2 request */ +#define DMA_REQUEST_TIM5_CH3 74U /*!< DMAMUX1 TIM5 CH3 request */ +#define DMA_REQUEST_TIM5_CH4 75U /*!< DMAMUX1 TIM5 CH4 request */ +#define DMA_REQUEST_TIM5_UP 76U /*!< DMAMUX1 TIM5 UP request */ +#define DMA_REQUEST_TIM5_TRIG 77U /*!< DMAMUX1 TIM5 TRIG request */ + +#define DMA_REQUEST_TIM15_CH1 78U /*!< DMAMUX1 TIM15 CH1 request */ +#define DMA_REQUEST_TIM15_UP 79U /*!< DMAMUX1 TIM15 UP request */ +#define DMA_REQUEST_TIM15_TRIG 80U /*!< DMAMUX1 TIM15 TRIG request */ +#define DMA_REQUEST_TIM15_COM 81U /*!< DMAMUX1 TIM15 COM request */ + +#define DMA_REQUEST_TIM16_CH1 82U /*!< DMAMUX1 TIM16 CH1 request */ +#define DMA_REQUEST_TIM16_UP 83U /*!< DMAMUX1 TIM16 UP request */ +#define DMA_REQUEST_TIM17_CH1 84U /*!< DMAMUX1 TIM17 CH1 request */ +#define DMA_REQUEST_TIM17_UP 85U /*!< DMAMUX1 TIM17 UP request */ + +#define DMA_REQUEST_DFSDM1_FLT0 86U /*!< DMAMUX1 DFSDM1 Filter0 request */ +#define DMA_REQUEST_DFSDM1_FLT1 87U /*!< DMAMUX1 DFSDM1 Filter1 request */ +#define DMA_REQUEST_DFSDM1_FLT2 88U /*!< DMAMUX1 DFSDM1 Filter2 request */ +#define DMA_REQUEST_DFSDM1_FLT3 89U /*!< DMAMUX1 DFSDM1 Filter3 request */ + +#define DMA_REQUEST_DCMI 90U /*!< DMAMUX1 DCMI request */ + +#define DMA_REQUEST_AES_IN 91U /*!< DMAMUX1 AES IN request */ +#define DMA_REQUEST_AES_OUT 92U /*!< DMAMUX1 AES OUT request */ + +#define DMA_REQUEST_HASH_IN 93U /*!< DMAMUX1 HASH IN request */ + +#endif /* DMAMUX1 */ + /** * @} */ @@ -497,6 +640,11 @@ typedef struct __DMA_HandleTypeDef * @} */ +#if defined(DMAMUX1) +/* Include DMA HAL Extension module */ +#include "stm32l4xx_hal_dma_ex.h" +#endif /* DMAMUX1 */ + /* Exported functions --------------------------------------------------------*/ /** @addtogroup DMA_Exported_Functions @@ -521,7 +669,7 @@ HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, u HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma); HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma); -HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout); +HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout); void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma); HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)( DMA_HandleTypeDef * _hdma)); HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID); @@ -561,6 +709,8 @@ uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); #define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ ((STATE) == DMA_MINC_DISABLE)) +#if !defined (DMAMUX1) + #define IS_DMA_ALL_REQUEST(REQUEST) (((REQUEST) == DMA_REQUEST_0) || \ ((REQUEST) == DMA_REQUEST_1) || \ ((REQUEST) == DMA_REQUEST_2) || \ @@ -569,6 +719,13 @@ uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); ((REQUEST) == DMA_REQUEST_5) || \ ((REQUEST) == DMA_REQUEST_6) || \ ((REQUEST) == DMA_REQUEST_7)) +#endif + +#if defined(DMAMUX1) + +#define IS_DMA_ALL_REQUEST(REQUEST)((REQUEST) <= DMA_REQUEST_HASH_IN) + +#endif /* DMAMUX1 */ #define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ @@ -588,7 +745,7 @@ uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma); /** * @} - */ + */ /* Private functions ---------------------------------------------------------*/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.c index 78d3776442..d5088c5e7b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dma2d.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DMA2D HAL module driver. * This file provides firmware functions to manage the following * functionalities of the DMA2D peripheral: @@ -130,7 +128,8 @@ #ifdef HAL_DMA2D_MODULE_ENABLED -#if defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -243,6 +242,10 @@ HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d) assert_param(IS_DMA2D_MODE(hdma2d->Init.Mode)); assert_param(IS_DMA2D_CMODE(hdma2d->Init.ColorMode)); assert_param(IS_DMA2D_OFFSET(hdma2d->Init.OutputOffset)); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + assert_param(IS_DMA2D_LOM_MODE(hdma2d->Init.LineOffsetMode)); + assert_param(IS_DMA2D_BYTES_SWAP(hdma2d->Init.BytesSwap)); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ if(hdma2d->State == HAL_DMA2D_STATE_RESET) { @@ -256,13 +259,21 @@ HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d) hdma2d->State = HAL_DMA2D_STATE_BUSY; /* DMA2D CR register configuration -------------------------------------------*/ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE | DMA2D_CR_LOM, hdma2d->Init.Mode | hdma2d->Init.LineOffsetMode); +#else MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_MODE, hdma2d->Init.Mode); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* DMA2D OPFCCR register configuration ---------------------------------------*/ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM | DMA2D_OPFCCR_SB, hdma2d->Init.ColorMode | hdma2d->Init.BytesSwap); +#else MODIFY_REG(hdma2d->Instance->OPFCCR, DMA2D_OPFCCR_CM, hdma2d->Init.ColorMode); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ - /* DMA2D OOR register configuration ------------------------------------------*/ - MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset); + /* DMA2D OOR register configuration ------------------------------------------*/ + MODIFY_REG(hdma2d->Instance->OOR, DMA2D_OOR_LO, hdma2d->Init.OutputOffset); /* DMA2D OPFCCR RBS and AI fields setting */ MODIFY_REG(hdma2d->Instance->OPFCCR, (DMA2D_OPFCCR_AI|DMA2D_OPFCCR_RBS), \ @@ -585,7 +596,7 @@ HAL_StatusTypeDef HAL_DMA2D_Abort(DMA2D_HandleTypeDef *hdma2d) /* Abort the DMA2D transfer */ /* START bit is reset to make sure not to set it again, in the event the HW clears it - between the register read and the register write by the CPU (writing ‘0’ has no + between the register read and the register write by the CPU (writing 0 has no effect on START bitvalue). */ MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_ABORT|DMA2D_CR_START, DMA2D_CR_ABORT); @@ -634,7 +645,7 @@ HAL_StatusTypeDef HAL_DMA2D_Suspend(DMA2D_HandleTypeDef *hdma2d) /* Suspend the DMA2D transfer */ /* START bit is reset to make sure not to set it again, in the event the HW clears it - between the register read and the register write by the CPU (writing ‘0’ has no + between the register read and the register write by the CPU (writing 0 has no effect on START bitvalue). */ MODIFY_REG(hdma2d->Instance->CR, DMA2D_CR_SUSP|DMA2D_CR_START, DMA2D_CR_SUSP); @@ -689,7 +700,7 @@ HAL_StatusTypeDef HAL_DMA2D_Resume(DMA2D_HandleTypeDef *hdma2d) /* Resume the DMA2D transfer */ /* START bit is reset to make sure not to set it again, in the event the HW clears it - between the register read and the register write by the CPU (writing ‘0’ has no + between the register read and the register write by the CPU (writing 0 has no effect on START bitvalue). */ CLEAR_BIT(hdma2d->Instance->CR, (DMA2D_CR_SUSP|DMA2D_CR_START)); @@ -1761,7 +1772,8 @@ static void DMA2D_SetConfig(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_ * @} */ -#endif /* STM32L496xx || STM32L4A6xx */ +#endif /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* HAL_DMA2D_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.h index 90f62da76d..cb389d6659 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma2d.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_dma2d.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DMA2D HAL module. ****************************************************************************** * @attention @@ -43,7 +41,8 @@ extern "C" { #endif -#if defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -112,6 +111,16 @@ typedef struct uint32_t RedBlueSwap; /*!< Select regular mode (RGB or ARGB) or swap mode (BGR or ABGR) for the output pixel format converter. This parameter can be one value of @ref DMA2D_RB_Swap. */ + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t BytesSwap; /*!< Select byte regular mode or bytes swap mode (two by two). + This parameter can be one value of @ref DMA2D_Bytes_Swap. */ + + uint32_t LineOffsetMode; /*!< Configures how is expressed the line offset for the foreground, background and output. + This parameter can be one value of @ref DMA2D_Line_Offset_Mode. */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + } DMA2D_InitTypeDef; @@ -143,7 +152,6 @@ typedef struct uint32_t RedBlueSwap; /*!< Select regular mode (RGB or ARGB) or swap mode (BGR or ABGR). This parameter can be one value of @ref DMA2D_RB_Swap. */ - } DMA2D_LayerCfgTypeDef; /** @@ -204,10 +212,14 @@ typedef struct __DMA2D_HandleTypeDef /** @defgroup DMA2D_Mode DMA2D Mode * @{ */ -#define DMA2D_M2M ((uint32_t)0x00000000U) /*!< DMA2D memory to memory transfer mode */ -#define DMA2D_M2M_PFC DMA2D_CR_MODE_0 /*!< DMA2D memory to memory with pixel format conversion transfer mode */ -#define DMA2D_M2M_BLEND DMA2D_CR_MODE_1 /*!< DMA2D memory to memory with blending transfer mode */ -#define DMA2D_R2M DMA2D_CR_MODE /*!< DMA2D register to memory transfer mode */ +#define DMA2D_M2M ((uint32_t)0x00000000U) /*!< DMA2D memory to memory transfer mode */ +#define DMA2D_M2M_PFC DMA2D_CR_MODE_0 /*!< DMA2D memory to memory with pixel format conversion transfer mode */ +#define DMA2D_M2M_BLEND DMA2D_CR_MODE_1 /*!< DMA2D memory to memory with blending transfer mode */ +#define DMA2D_R2M (DMA2D_CR_MODE_1 | DMA2D_CR_MODE_0) /*!< DMA2D register to memory transfer mode */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define DMA2D_M2M_BLEND_FG DMA2D_CR_MODE_2 /*!< DMA2D memory to memory with blending transfer mode and fixed color FG */ +#define DMA2D_M2M_BLEND_BG (DMA2D_CR_MODE_2 | DMA2D_CR_MODE_0) /*!< DMA2D memory to memory with blending transfer mode and fixed color BG */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -271,6 +283,27 @@ typedef struct __DMA2D_HandleTypeDef * @} */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup DMA2D_Line_Offset_Mode DMA2D Line Offset Mode + * @{ + */ +#define DMA2D_LOM_PIXELS ((uint32_t)0x00000000U) /*!< Line offsets expressed in pixels */ +#define DMA2D_LOM_BYTES DMA2D_CR_LOM /*!< Line offsets expressed in bytes */ +/** + * @} + */ + +/** @defgroup DMA2D_Bytes_Swap DMA2D Bytes Swap + * @{ + */ +#define DMA2D_BYTES_REGULAR ((uint32_t)0x00000000U) /*!< Bytes in regular order in output FIFO */ +#define DMA2D_BYTES_SWAP DMA2D_OPFCCR_SB /*!< Bytes are swapped two by two in output FIFO */ +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** @defgroup DMA2D_CLUT_CM DMA2D CLUT Color Mode * @{ */ @@ -280,7 +313,6 @@ typedef struct __DMA2D_HandleTypeDef * @} */ - /** @defgroup DMA2D_Interrupts DMA2D Interrupts * @{ */ @@ -562,8 +594,16 @@ uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d); * @{ */ #define IS_DMA2D_LAYER(LAYER) ((LAYER) <= DMA2D_MAX_LAYER) + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_DMA2D_MODE(MODE) (((MODE) == DMA2D_M2M) || ((MODE) == DMA2D_M2M_PFC) || \ + ((MODE) == DMA2D_M2M_BLEND) || ((MODE) == DMA2D_R2M) || \ + ((MODE) == DMA2D_M2M_BLEND_FG) || ((MODE) == DMA2D_M2M_BLEND_BG)) +#else #define IS_DMA2D_MODE(MODE) (((MODE) == DMA2D_M2M) || ((MODE) == DMA2D_M2M_PFC) || \ ((MODE) == DMA2D_M2M_BLEND) || ((MODE) == DMA2D_R2M)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #define IS_DMA2D_CMODE(MODE_ARGB) (((MODE_ARGB) == DMA2D_OUTPUT_ARGB8888) || ((MODE_ARGB) == DMA2D_OUTPUT_RGB888) || \ ((MODE_ARGB) == DMA2D_OUTPUT_RGB565) || ((MODE_ARGB) == DMA2D_OUTPUT_ARGB1555) || \ ((MODE_ARGB) == DMA2D_OUTPUT_ARGB4444)) @@ -587,6 +627,15 @@ uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d); #define IS_DMA2D_RB_SWAP(RB_Swap) (((RB_Swap) == DMA2D_RB_REGULAR) || \ ((RB_Swap) == DMA2D_RB_SWAP)) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_DMA2D_LOM_MODE(LOM) (((LOM) == DMA2D_LOM_PIXELS) || \ + ((LOM) == DMA2D_LOM_BYTES)) + +#define IS_DMA2D_BYTES_SWAP(BYTES_SWAP) (((BYTES_SWAP) == DMA2D_BYTES_REGULAR) || \ + ((BYTES_SWAP) == DMA2D_BYTES_SWAP)) + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #define IS_DMA2D_CLUT_CM(CLUT_CM) (((CLUT_CM) == DMA2D_CCM_ARGB8888) || ((CLUT_CM) == DMA2D_CCM_RGB888)) #define IS_DMA2D_CLUT_SIZE(CLUT_SIZE) ((CLUT_SIZE) <= DMA2D_CLUT_SIZE) #define IS_DMA2D_LINEWATERMARK(LineWatermark) ((LineWatermark) <= DMA2D_LINE_WATERMARK_MAX) @@ -609,6 +658,7 @@ uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d); */ #endif /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.c new file mode 100644 index 0000000000..50b09d5908 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.c @@ -0,0 +1,319 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dma_ex.c + * @author MCD Application Team + * @brief DMA Extension HAL module driver + * This file provides firmware functions to manage the following + * functionalities of the DMA Extension peripheral: + * + Extended features functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The DMA Extension HAL driver can be used as follows: + + (+) Configure the DMA_MUX Synchronization Block using HAL_DMAEx_ConfigMuxSync function. + (+) Configure the DMA_MUX Request Generator Block using HAL_DMAEx_ConfigMuxRequestGenerator function. + Functions HAL_DMAEx_EnableMuxRequestGenerator and HAL_DMAEx_DisableMuxRequestGenerator can then be used + to respectively enable/disable the request generator. + + (+) To handle the DMAMUX Interrupts, the function HAL_DMAEx_MUX_IRQHandler should be called from + the DMAMUX IRQ handler i.e DMAMUX1_OVR_IRQHandler. + As only one interrupt line is available for all DMAMUX channels and request generators , HAL_DMAEx_MUX_IRQHandler should be + called with, as parameter, the appropriate DMA handle as many as used DMAs in the user project + (exception done if a given DMA is not using the DMAMUX SYNC block neither a request generator) + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +#if defined(DMAMUX1) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup DMAEx DMAEx + * @brief DMA Extended HAL module driver + * @{ + */ + +#ifdef HAL_DMA_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private Constants ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + + +/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions + * @{ + */ + +/** @defgroup DMAEx_Exported_Functions_Group1 DMAEx Extended features functions + * @brief Extended features functions + * +@verbatim + =============================================================================== + ##### Extended features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + + (+) Configure the DMAMUX Synchronization Block using HAL_DMAEx_ConfigMuxSync function. + (+) Configure the DMAMUX Request Generator Block using HAL_DMAEx_ConfigMuxRequestGenerator function. + Functions HAL_DMAEx_EnableMuxRequestGenerator and HAL_DMAEx_DisableMuxRequestGenerator can then be used + to respectively enable/disable the request generator. + +@endverbatim + * @{ + */ + + +/** + * @brief Configure the DMAMUX synchronization parameters for a given DMA channel (instance). + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA channel. + * @param pSyncConfig : pointer to HAL_DMA_MuxSyncConfigTypeDef : contains the DMAMUX synchronization parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_ConfigMuxSync(DMA_HandleTypeDef *hdma, HAL_DMA_MuxSyncConfigTypeDef *pSyncConfig) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + assert_param(IS_DMAMUX_SYNC_SIGNAL_ID(pSyncConfig->SyncSignalID)); + + assert_param(IS_DMAMUX_SYNC_POLARITY(pSyncConfig-> SyncPolarity)); + assert_param(IS_DMAMUX_SYNC_STATE(pSyncConfig->SyncEnable)); + assert_param(IS_DMAMUX_SYNC_EVENT(pSyncConfig->EventEnable)); + assert_param(IS_DMAMUX_SYNC_REQUEST_NUMBER(pSyncConfig->RequestNumber)); + + /*Check if the DMA state is ready */ + if(hdma->State == HAL_DMA_STATE_READY) + { + /* Process Locked */ + __HAL_LOCK(hdma); + + /* Set the new synchronization parameters (and keep the request ID filled during the Init)*/ + MODIFY_REG( hdma->DMAmuxChannel->CCR, \ + (~DMAMUX_CxCR_DMAREQ_ID) , \ + ((pSyncConfig->SyncSignalID) << DMAMUX_CxCR_SYNC_ID_Pos) | ((pSyncConfig->RequestNumber - 1U) << DMAMUX_CxCR_NBREQ_Pos) | \ + pSyncConfig->SyncPolarity | (pSyncConfig->SyncEnable << DMAMUX_CxCR_SE_Pos) | \ + (pSyncConfig->EventEnable << DMAMUX_CxCR_EGE_Pos)); + + /* Process UnLocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; + } + else + { + /*DMA State not Ready*/ + return HAL_ERROR; + } +} + +/** + * @brief Configure the DMAMUX request generator block used by the given DMA channel (instance). + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA channel. + * @param pRequestGeneratorConfig : pointer to HAL_DMA_MuxRequestGeneratorConfigTypeDef : + * contains the request generator parameters. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_ConfigMuxRequestGenerator (DMA_HandleTypeDef *hdma, HAL_DMA_MuxRequestGeneratorConfigTypeDef *pRequestGeneratorConfig) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + assert_param(IS_DMAMUX_REQUEST_GEN_SIGNAL_ID(pRequestGeneratorConfig->SignalID)); + + assert_param(IS_DMAMUX_REQUEST_GEN_POLARITY(pRequestGeneratorConfig->Polarity)); + assert_param(IS_DMAMUX_REQUEST_GEN_REQUEST_NUMBER(pRequestGeneratorConfig->RequestNumber)); + + /* check if the DMA state is ready + and DMA is using a DMAMUX request generator block + */ + if((hdma->State == HAL_DMA_STATE_READY) && (hdma->DMAmuxRequestGen != 0U)) + { + /* Process Locked */ + __HAL_LOCK(hdma); + + /* Set the request generator new parameters*/ + hdma->DMAmuxRequestGen->RGCR = pRequestGeneratorConfig->SignalID | \ + ((pRequestGeneratorConfig->RequestNumber - 1U) << POSITION_VAL(DMAMUX_RGxCR_GNBREQ))| \ + pRequestGeneratorConfig->Polarity; + /* Process UnLocked */ + __HAL_UNLOCK(hdma); + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Enable the DMAMUX request generator block used by the given DMA channel (instance). + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_EnableMuxRequestGenerator (DMA_HandleTypeDef *hdma) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + /* check if the DMA state is ready + and DMA is using a DMAMUX request generator block + */ + if((hdma->State != HAL_DMA_STATE_RESET) && (hdma->DMAmuxRequestGen != 0)) + { + + /* Enable the request generator*/ + hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_GE; + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Disable the DMAMUX request generator block used by the given DMA channel (instance). + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMAEx_DisableMuxRequestGenerator (DMA_HandleTypeDef *hdma) +{ + /* Check the parameters */ + assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance)); + + /* check if the DMA state is ready + and DMA is using a DMAMUX request generator block + */ + if((hdma->State != HAL_DMA_STATE_RESET) && (hdma->DMAmuxRequestGen != 0)) + { + + /* Disable the request generator*/ + hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_GE; + + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} + +/** + * @brief Handles DMAMUX interrupt request. + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA channel. + * @retval None + */ +void HAL_DMAEx_MUX_IRQHandler(DMA_HandleTypeDef *hdma) +{ + /* Check for DMAMUX Synchronization overrun */ + if((hdma->DMAmuxChannelStatus->CSR & hdma->DMAmuxChannelStatusMask) != 0U) + { + /* Disable the synchro overrun interrupt */ + hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE; + + /* Clear the DMAMUX synchro overrun flag */ + hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_SYNC; + + if(hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } + + if(hdma->DMAmuxRequestGen != 0) + { + /* if using a DMAMUX request generator block Check for DMAMUX request generator overrun */ + if((hdma->DMAmuxRequestGenStatus->RGSR & hdma->DMAmuxRequestGenStatusMask) != 0U) + { + /* Disable the request gen overrun interrupt */ + hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE; + + /* Clear the DMAMUX request generator overrun flag */ + hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask; + + /* Update error code */ + hdma->ErrorCode |= HAL_DMA_ERROR_REQGEN; + + if(hdma->XferErrorCallback != NULL) + { + /* Transfer error callback */ + hdma->XferErrorCallback(hdma); + } + } + } +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_DMA_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMAMUX1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.h new file mode 100644 index 0000000000..0ce4b2ae20 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dma_ex.h @@ -0,0 +1,298 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dma_ex.h + * @author MCD Application Team + * @brief Header file of DMA HAL extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_DMA_EX_H +#define __STM32L4xx_HAL_DMA_EX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(DMAMUX1) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup DMAEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Types DMAEx Exported Types + * @{ + */ + +/** + * @brief HAL DMA Synchro definition + */ + + +/** + * @brief HAL DMAMUX Synchronization configuration structure definition + */ +typedef struct +{ + uint32_t SyncSignalID; /*!< Specifies the synchronization signal gating the DMA request in periodic mode. + This parameter can be a value of @ref DMAEx_DMAMUX_SyncSignalID_selection */ + + uint32_t SyncPolarity; /*!< Specifies the polarity of the signal on which the DMA request is synchronized. + This parameter can be a value of @ref DMAEx_DMAMUX_SyncPolarity_selection */ + + FunctionalState SyncEnable; /*!< Specifies if the synchronization shall be enabled or disabled + This parameter can take the value ENABLE or DISABLE*/ + + + FunctionalState EventEnable; /*!< Specifies if an event shall be generated once the RequestNumber is reached. + This parameter can take the value ENABLE or DISABLE */ + + uint32_t RequestNumber; /*!< Specifies the number of DMA request that will be authorized after a sync event + This parameter must be a number between Min_Data = 1 and Max_Data = 32 */ + + +}HAL_DMA_MuxSyncConfigTypeDef; + + +/** + * @brief HAL DMAMUX request generator parameters structure definition + */ +typedef struct +{ + uint32_t SignalID; /*!< Specifies the ID of the signal used for DMAMUX request generator + This parameter can be a value of @ref DMAEx_DMAMUX_SignalGeneratorID_selection */ + + uint32_t Polarity; /*!< Specifies the polarity of the signal on which the request is generated. + This parameter can be a value of @ref DMAEx_DMAMUX_RequestGeneneratorPolarity_selection */ + + uint32_t RequestNumber; /*!< Specifies the number of DMA request that will be generated after a signal event + This parameter must be a number between Min_Data = 1 and Max_Data = 32 */ + +}HAL_DMA_MuxRequestGeneratorConfigTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DMAEx_Exported_Constants DMAEx Exported Constants + * @{ + */ + +/** @defgroup DMAEx_DMAMUX_SyncSignalID_selection DMAMUX SyncSignalID selection + * @{ + */ +#define HAL_DMAMUX1_SYNC_EXTI0 0U /*!< Synchronization Signal is EXTI0 IT */ +#define HAL_DMAMUX1_SYNC_EXTI1 1U /*!< Synchronization Signal is EXTI1 IT */ +#define HAL_DMAMUX1_SYNC_EXTI2 2U /*!< Synchronization Signal is EXTI2 IT */ +#define HAL_DMAMUX1_SYNC_EXTI3 3U /*!< Synchronization Signal is EXTI3 IT */ +#define HAL_DMAMUX1_SYNC_EXTI4 4U /*!< Synchronization Signal is EXTI4 IT */ +#define HAL_DMAMUX1_SYNC_EXTI5 5U /*!< Synchronization Signal is EXTI5 IT */ +#define HAL_DMAMUX1_SYNC_EXTI6 6U /*!< Synchronization Signal is EXTI6 IT */ +#define HAL_DMAMUX1_SYNC_EXTI7 7U /*!< Synchronization Signal is EXTI7 IT */ +#define HAL_DMAMUX1_SYNC_EXTI8 8U /*!< Synchronization Signal is EXTI8 IT */ +#define HAL_DMAMUX1_SYNC_EXTI9 9U /*!< Synchronization Signal is EXTI9 IT */ +#define HAL_DMAMUX1_SYNC_EXTI10 10U /*!< Synchronization Signal is EXTI10 IT */ +#define HAL_DMAMUX1_SYNC_EXTI11 11U /*!< Synchronization Signal is EXTI11 IT */ +#define HAL_DMAMUX1_SYNC_EXTI12 12U /*!< Synchronization Signal is EXTI12 IT */ +#define HAL_DMAMUX1_SYNC_EXTI13 13U /*!< Synchronization Signal is EXTI13 IT */ +#define HAL_DMAMUX1_SYNC_EXTI14 14U /*!< Synchronization Signal is EXTI14 IT */ +#define HAL_DMAMUX1_SYNC_EXTI15 15U /*!< Synchronization Signal is EXTI15 IT */ +#define HAL_DMAMUX1_SYNC_DMAMUX1_CH0_EVT 16U /*!< Synchronization Signal is DMAMUX1 Channel0 Event */ +#define HAL_DMAMUX1_SYNC_DMAMUX1_CH1_EVT 17U /*!< Synchronization Signal is DMAMUX1 Channel1 Event */ +#define HAL_DMAMUX1_SYNC_DMAMUX1_CH2_EVT 18U /*!< Synchronization Signal is DMAMUX1 Channel2 Event */ +#define HAL_DMAMUX1_SYNC_DMAMUX1_CH3_EVT 19U /*!< Synchronization Signal is DMAMUX1 Channel3 Event */ +#define HAL_DMAMUX1_SYNC_LPTIM1_OUT 20U /*!< Synchronization Signal is LPTIM1 OUT */ +#define HAL_DMAMUX1_SYNC_LPTIM2_OUT 21U /*!< Synchronization Signal is LPTIM2 OUT */ +#define HAL_DMAMUX1_SYNC_DSI_TE 22U /*!< Synchronization Signal is DSI Tearing Effect */ +#define HAL_DMAMUX1_SYNC_DSI_EOT 23U /*!< Synchronization Signal is DSI End of refresh */ +#define HAL_DMAMUX1_SYNC_DMA2D_EOT 24U /*!< Synchronization Signal is DMA2D End of Transfer */ +#define HAL_DMAMUX1_SYNC_LDTC_IT 25U /*!< Synchronization Signal is LDTC IT */ + +/** + * @} + */ + +/** @defgroup DMAEx_DMAMUX_SyncPolarity_selection DMAMUX SyncPolarity selection + * @{ + */ +#define HAL_DMAMUX_SYNC_NO_EVENT 0U /*!< block synchronization events */ +#define HAL_DMAMUX_SYNC_RISING ((uint32_t)DMAMUX_CxCR_SPOL_0) /*!< synchronize with rising edge events */ +#define HAL_DMAMUX_SYNC_FALLING ((uint32_t)DMAMUX_CxCR_SPOL_1) /*!< synchronize with falling edge events */ +#define HAL_DMAMUX_SYNC_RISING_FALLING ((uint32_t)DMAMUX_CxCR_SPOL) /*!< synchronize with rising and falling edge events */ + +/** + * @} + */ + +/** @defgroup DMAEx_DMAMUX_SignalGeneratorID_selection DMAMUX SignalGeneratorID selection + * @{ + */ + +#define HAL_DMAMUX1_REQUEST_GEN_EXTI0 0U /*!< Request generator Signal is EXTI0 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI1 1U /*!< Request generator Signal is EXTI1 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI2 2U /*!< Request generator Signal is EXTI2 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI3 3U /*!< Request generator Signal is EXTI3 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI4 4U /*!< Request generator Signal is EXTI4 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI5 5U /*!< Request generator Signal is EXTI5 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI6 6U /*!< Request generator Signal is EXTI6 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI7 7U /*!< Request generator Signal is EXTI7 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI8 8U /*!< Request generator Signal is EXTI8 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI9 9U /*!< Request generator Signal is EXTI9 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI10 10U /*!< Request generator Signal is EXTI10 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI11 11U /*!< Request generator Signal is EXTI11 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI12 12U /*!< Request generator Signal is EXTI12 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI13 13U /*!< Request generator Signal is EXTI13 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI14 14U /*!< Request generator Signal is EXTI14 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_EXTI15 15U /*!< Request generator Signal is EXTI15 IT */ +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT 16U /*!< Request generator Signal is DMAMUX1 Channel0 Event */ +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT 17U /*!< Request generator Signal is DMAMUX1 Channel1 Event */ +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT 18U /*!< Request generator Signal is DMAMUX1 Channel2 Event */ +#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT 19U /*!< Request generator Signal is DMAMUX1 Channel3 Event */ +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT 20U /*!< Request generator Signal is LPTIM1 OUT */ +#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT 21U /*!< Request generator Signal is LPTIM2 OUT */ +#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE 22U /*!< Request generator Signal is DSI Tearing Effect */ +#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT 23U /*!< Request generator Signal is DSI End of refresh */ +#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT 24U /*!< Request generator Signal is DMA2D End of Transfer */ +#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT 25U /*!< Request generator Signal is LTDC IT */ + +/** + * @} + */ + +/** @defgroup DMAEx_DMAMUX_RequestGeneneratorPolarity_selection DMAMUX RequestGeneneratorPolarity selection + * @{ + */ +#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT 0U /*!< block request generator events */ +#define HAL_DMAMUX_REQUEST_GEN_RISING DMAMUX_RGxCR_GPOL_0 /*!< generate request on rising edge events */ +#define HAL_DMAMUX_REQUEST_GEN_FALLING DMAMUX_RGxCR_GPOL_1 /*!< generate request on falling edge events */ +#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING DMAMUX_RGxCR_GPOL /*!< generate request on rising and falling edge events */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup DMAEx_Exported_Functions + * @{ + */ + +/* IO operation functions *****************************************************/ +/** @addtogroup DMAEx_Exported_Functions_Group1 + * @{ + */ + +/* ------------------------- REQUEST -----------------------------------------*/ +HAL_StatusTypeDef HAL_DMAEx_ConfigMuxRequestGenerator (DMA_HandleTypeDef *hdma, + HAL_DMA_MuxRequestGeneratorConfigTypeDef *pRequestGeneratorConfig); +HAL_StatusTypeDef HAL_DMAEx_EnableMuxRequestGenerator (DMA_HandleTypeDef *hdma); +HAL_StatusTypeDef HAL_DMAEx_DisableMuxRequestGenerator (DMA_HandleTypeDef *hdma); +/* -------------------------------------------------------------------------- */ + +/* ------------------------- SYNCHRO -----------------------------------------*/ +HAL_StatusTypeDef HAL_DMAEx_ConfigMuxSync(DMA_HandleTypeDef *hdma, HAL_DMA_MuxSyncConfigTypeDef *pSyncConfig); +/* -------------------------------------------------------------------------- */ + +void HAL_DMAEx_MUX_IRQHandler(DMA_HandleTypeDef *hdma); + +/** + * @} + */ + +/** + * @} + */ + + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DMAEx_Private_Macros DMAEx Private Macros + * @brief DMAEx private macros + * @{ + */ + +#define IS_DMAMUX_SYNC_SIGNAL_ID(SIGNAL_ID) ((SIGNAL_ID) <= HAL_DMAMUX1_SYNC_LDTC_IT) + +#define IS_DMAMUX_SYNC_REQUEST_NUMBER(REQUEST_NUMBER) (((REQUEST_NUMBER) > 0) && ((REQUEST_NUMBER) <= 32)) + +#define IS_DMAMUX_SYNC_POLARITY(POLARITY) (((POLARITY) == HAL_DMAMUX_SYNC_NO_EVENT) || \ + ((POLARITY) == HAL_DMAMUX_SYNC_RISING) || \ + ((POLARITY) == HAL_DMAMUX_SYNC_FALLING) || \ + ((POLARITY) == HAL_DMAMUX_SYNC_RISING_FALLING)) + +#define IS_DMAMUX_SYNC_STATE(SYNC) (((SYNC) == DISABLE) || ((SYNC) == ENABLE)) + +#define IS_DMAMUX_SYNC_EVENT(EVENT) (((EVENT) == DISABLE) || \ + ((EVENT) == ENABLE)) + +#define IS_DMAMUX_REQUEST_GEN_SIGNAL_ID(SIGNAL_ID) ((SIGNAL_ID) <= HAL_DMAMUX1_REQUEST_GEN_LTDC_IT) + +#define IS_DMAMUX_REQUEST_GEN_REQUEST_NUMBER(REQUEST_NUMBER) (((REQUEST_NUMBER) > 0) && ((REQUEST_NUMBER) <= 32)) + +#define IS_DMAMUX_REQUEST_GEN_POLARITY(POLARITY) (((POLARITY) == HAL_DMAMUX_REQUEST_GEN_NO_EVENT) || \ + ((POLARITY) == HAL_DMAMUX_REQUEST_GEN_RISING) || \ + ((POLARITY) == HAL_DMAMUX_REQUEST_GEN_FALLING) || \ + ((POLARITY) == HAL_DMAMUX_REQUEST_GEN_RISING_FALLING)) + +/** + * @} + */ + + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMAMUX1 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_DMA_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.c new file mode 100644 index 0000000000..570bef2b50 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.c @@ -0,0 +1,2379 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dsi.c + * @author MCD Application Team + * @brief DSI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the DSI peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Errors functions + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +#ifdef HAL_DSI_MODULE_ENABLED + +#if defined(DSI) + +/** @addtogroup DSI + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/** @addtogroup DSI_Private_Constants + * @{ + */ +#define DSI_TIMEOUT_VALUE ((uint32_t)1000U) /* 1s */ + +#define DSI_ERROR_ACK_MASK (DSI_ISR0_AE0 | DSI_ISR0_AE1 | DSI_ISR0_AE2 | DSI_ISR0_AE3 | \ + DSI_ISR0_AE4 | DSI_ISR0_AE5 | DSI_ISR0_AE6 | DSI_ISR0_AE7 | \ + DSI_ISR0_AE8 | DSI_ISR0_AE9 | DSI_ISR0_AE10 | DSI_ISR0_AE11 | \ + DSI_ISR0_AE12 | DSI_ISR0_AE13 | DSI_ISR0_AE14 | DSI_ISR0_AE15) +#define DSI_ERROR_PHY_MASK (DSI_ISR0_PE0 | DSI_ISR0_PE1 | DSI_ISR0_PE2 | DSI_ISR0_PE3 | DSI_ISR0_PE4) +#define DSI_ERROR_TX_MASK DSI_ISR1_TOHSTX +#define DSI_ERROR_RX_MASK DSI_ISR1_TOLPRX +#define DSI_ERROR_ECC_MASK (DSI_ISR1_ECCSE | DSI_ISR1_ECCME) +#define DSI_ERROR_CRC_MASK DSI_ISR1_CRCE +#define DSI_ERROR_PSE_MASK DSI_ISR1_PSE +#define DSI_ERROR_EOT_MASK DSI_ISR1_EOTPE +#define DSI_ERROR_OVF_MASK DSI_ISR1_LPWRE +#define DSI_ERROR_GEN_MASK (DSI_ISR1_GCWRE | DSI_ISR1_GPWRE | DSI_ISR1_GPTXE | DSI_ISR1_GPRDE | DSI_ISR1_GPRXE) +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void DSI_ConfigPacketHeader(DSI_TypeDef *DSIx, uint32_t ChannelID, uint32_t DataType, uint32_t Data0, uint32_t Data1); + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief Generic DSI packet header configuration + * @param DSIx: Pointer to DSI register base + * @param ChannelID: Virtual channel ID of the header packet + * @param DataType: Packet data type of the header packet + * This parameter can be any value of : + * @ref DSI_SHORT_WRITE_PKT_Data_Type + * or @ref DSI_LONG_WRITE_PKT_Data_Type + * or @ref DSI_SHORT_READ_PKT_Data_Type + * or DSI_MAX_RETURN_PKT_SIZE + * @param Data0: Word count LSB + * @param Data1: Word count MSB + * @retval None + */ +static void DSI_ConfigPacketHeader(DSI_TypeDef *DSIx, + uint32_t ChannelID, + uint32_t DataType, + uint32_t Data0, + uint32_t Data1) +{ + /* Update the DSI packet header with new information */ + DSIx->GHCR = (DataType | (ChannelID<<6U) | (Data0<<8U) | (Data1<<16U)); +} + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup DSI_Exported_Functions + * @{ + */ + +/** @defgroup DSI_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initialize and configure the DSI + (+) De-initialize the DSI + +@endverbatim + * @{ + */ + +/** + * @brief Initializes the DSI according to the specified + * parameters in the DSI_InitTypeDef and create the associated handle. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param PLLInit: pointer to a DSI_PLLInitTypeDef structure that contains + * the PLL Clock structure definition for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Init(DSI_HandleTypeDef *hdsi, DSI_PLLInitTypeDef *PLLInit) +{ + uint32_t tickstart; + uint32_t unitIntervalx4; + uint32_t tempIDF; + + /* Check the DSI handle allocation */ + if(hdsi == NULL) + { + return HAL_ERROR; + } + + /* Check function parameters */ + assert_param(IS_DSI_PLL_NDIV(PLLInit->PLLNDIV)); + assert_param(IS_DSI_PLL_IDF(PLLInit->PLLIDF)); + assert_param(IS_DSI_PLL_ODF(PLLInit->PLLODF)); + assert_param(IS_DSI_AUTO_CLKLANE_CONTROL(hdsi->Init.AutomaticClockLaneControl)); + assert_param(IS_DSI_NUMBER_OF_LANES(hdsi->Init.NumberOfLanes)); + + if(hdsi->State == HAL_DSI_STATE_RESET) + { + /* Initialize the low level hardware */ + HAL_DSI_MspInit(hdsi); + } + + /* Change DSI peripheral state */ + hdsi->State = HAL_DSI_STATE_BUSY; + + /**************** Turn on the regulator and enable the DSI PLL ****************/ + + /* Enable the regulator */ + __HAL_DSI_REG_ENABLE(hdsi); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait until the regulator is ready */ + while(__HAL_DSI_GET_FLAG(hdsi, DSI_FLAG_RRS) == RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /* Set the PLL division factors */ + hdsi->Instance->WRPCR &= ~(DSI_WRPCR_PLL_NDIV | DSI_WRPCR_PLL_IDF | DSI_WRPCR_PLL_ODF); + hdsi->Instance->WRPCR |= (((PLLInit->PLLNDIV)<<2U) | ((PLLInit->PLLIDF)<<11U) | ((PLLInit->PLLODF)<<16U)); + + /* Enable the DSI PLL */ + __HAL_DSI_PLL_ENABLE(hdsi); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait for the lock of the PLL */ + while(__HAL_DSI_GET_FLAG(hdsi, DSI_FLAG_PLLLS) == RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + + /*************************** Set the PHY parameters ***************************/ + + /* D-PHY clock and digital enable*/ + hdsi->Instance->PCTLR |= (DSI_PCTLR_CKE | DSI_PCTLR_DEN); + + /* Clock lane configuration */ + hdsi->Instance->CLCR &= ~(DSI_CLCR_DPCC | DSI_CLCR_ACR); + hdsi->Instance->CLCR |= (DSI_CLCR_DPCC | hdsi->Init.AutomaticClockLaneControl); + + /* Configure the number of active data lanes */ + hdsi->Instance->PCONFR &= ~DSI_PCONFR_NL; + hdsi->Instance->PCONFR |= hdsi->Init.NumberOfLanes; + + /************************ Set the DSI clock parameters ************************/ + + /* Set the TX escape clock division factor */ + hdsi->Instance->CCR &= ~DSI_CCR_TXECKDIV; + hdsi->Instance->CCR |= hdsi->Init.TXEscapeCkdiv; + + /* Calculate the bit period in high-speed mode in unit of 0.25 ns (UIX4) */ + /* The equation is : UIX4 = IntegerPart( (1000/F_PHY_Mhz) * 4 ) */ + /* Where : F_PHY_Mhz = (NDIV * HSE_Mhz) / (IDF * ODF) */ + tempIDF = (PLLInit->PLLIDF > 0U) ? PLLInit->PLLIDF : 1U; + unitIntervalx4 = (4000000U * tempIDF * (1U << PLLInit->PLLODF)) / ((HSE_VALUE/1000U) * PLLInit->PLLNDIV); + + /* Set the bit period in high-speed mode */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_UIX4; + hdsi->Instance->WPCR[0U] |= unitIntervalx4; + + /****************************** Error management *****************************/ + + /* Disable all error interrupts and reset the Error Mask */ + hdsi->Instance->IER[0U] = 0U; + hdsi->Instance->IER[1U] = 0U; + hdsi->ErrorMsk = 0U; + + /* Initialise the error code */ + hdsi->ErrorCode = HAL_DSI_ERROR_NONE; + + /* Initialize the DSI state*/ + hdsi->State = HAL_DSI_STATE_READY; + + return HAL_OK; +} + +/** + * @brief De-initializes the DSI peripheral registers to their default reset + * values. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_DeInit(DSI_HandleTypeDef *hdsi) +{ + /* Check the DSI handle allocation */ + if(hdsi == NULL) + { + return HAL_ERROR; + } + + /* Change DSI peripheral state */ + hdsi->State = HAL_DSI_STATE_BUSY; + + /* Disable the DSI wrapper */ + __HAL_DSI_WRAPPER_DISABLE(hdsi); + + /* Disable the DSI host */ + __HAL_DSI_DISABLE(hdsi); + + /* D-PHY clock and digital disable */ + hdsi->Instance->PCTLR &= ~(DSI_PCTLR_CKE | DSI_PCTLR_DEN); + + /* Turn off the DSI PLL */ + __HAL_DSI_PLL_DISABLE(hdsi); + + /* Disable the regulator */ + __HAL_DSI_REG_DISABLE(hdsi); + + /* DeInit the low level hardware */ + HAL_DSI_MspDeInit(hdsi); + + /* Initialise the error code */ + hdsi->ErrorCode = HAL_DSI_ERROR_NONE; + + /* Initialize the DSI state*/ + hdsi->State = HAL_DSI_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Enable the error monitor flags + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param ActiveErrors: indicates which error interrupts will be enabled. + * This parameter can be any combination of @ref DSI_Error_Data_Type. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigErrorMonitor(DSI_HandleTypeDef *hdsi, uint32_t ActiveErrors) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + hdsi->Instance->IER[0U] = 0U; + hdsi->Instance->IER[1U] = 0U; + + /* Store active errors to the handle */ + hdsi->ErrorMsk = ActiveErrors; + + if((ActiveErrors & HAL_DSI_ERROR_ACK) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[0U] |= DSI_ERROR_ACK_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_PHY) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[0U] |= DSI_ERROR_PHY_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_TX) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_TX_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_RX) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_RX_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_ECC) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_ECC_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_CRC) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_CRC_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_PSE) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_PSE_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_EOT) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_EOT_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_OVF) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_OVF_MASK; + } + + if((ActiveErrors & HAL_DSI_ERROR_GEN) != RESET) + { + /* Enable the interrupt generation on selected errors */ + hdsi->Instance->IER[1U] |= DSI_ERROR_GEN_MASK; + } + + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Initializes the DSI MSP. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval None + */ +__weak void HAL_DSI_MspInit(DSI_HandleTypeDef* hdsi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hdsi); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_DSI_MspInit could be implemented in the user file + */ +} + +/** + * @brief De-initializes the DSI MSP. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval None + */ +__weak void HAL_DSI_MspDeInit(DSI_HandleTypeDef* hdsi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hdsi); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_DSI_MspDeInit could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup DSI_Group2 IO operation functions + * @brief IO operation functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides function allowing to: + (+) Handle DSI interrupt request + +@endverbatim + * @{ + */ +/** + * @brief Handles DSI interrupt request. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +void HAL_DSI_IRQHandler(DSI_HandleTypeDef *hdsi) +{ + uint32_t ErrorStatus0, ErrorStatus1; + + /* Tearing Effect Interrupt management ***************************************/ + if(__HAL_DSI_GET_FLAG(hdsi, DSI_FLAG_TE) != RESET) + { + if(__HAL_DSI_GET_IT_SOURCE(hdsi, DSI_IT_TE) != RESET) + { + /* Clear the Tearing Effect Interrupt Flag */ + __HAL_DSI_CLEAR_FLAG(hdsi, DSI_FLAG_TE); + + /* Tearing Effect Callback */ + HAL_DSI_TearingEffectCallback(hdsi); + } + } + + /* End of Refresh Interrupt management ***************************************/ + if(__HAL_DSI_GET_FLAG(hdsi, DSI_FLAG_ER) != RESET) + { + if(__HAL_DSI_GET_IT_SOURCE(hdsi, DSI_IT_ER) != RESET) + { + /* Clear the End of Refresh Interrupt Flag */ + __HAL_DSI_CLEAR_FLAG(hdsi, DSI_FLAG_ER); + + /* End of Refresh Callback */ + HAL_DSI_EndOfRefreshCallback(hdsi); + } + } + + /* Error Interrupts management ***********************************************/ + if(hdsi->ErrorMsk != 0U) + { + ErrorStatus0 = hdsi->Instance->ISR[0U]; + ErrorStatus0 &= hdsi->Instance->IER[0U]; + ErrorStatus1 = hdsi->Instance->ISR[1U]; + ErrorStatus1 &= hdsi->Instance->IER[1U]; + + if((ErrorStatus0 & DSI_ERROR_ACK_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_ACK; + } + + if((ErrorStatus0 & DSI_ERROR_PHY_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_PHY; + } + + if((ErrorStatus1 & DSI_ERROR_TX_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_TX; + } + + if((ErrorStatus1 & DSI_ERROR_RX_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_RX; + } + + if((ErrorStatus1 & DSI_ERROR_ECC_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_ECC; + } + + if((ErrorStatus1 & DSI_ERROR_CRC_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_CRC; + } + + if((ErrorStatus1 & DSI_ERROR_PSE_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_PSE; + } + + if((ErrorStatus1 & DSI_ERROR_EOT_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_EOT; + } + + if((ErrorStatus1 & DSI_ERROR_OVF_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_OVF; + } + + if((ErrorStatus1 & DSI_ERROR_GEN_MASK) != RESET) + { + hdsi->ErrorCode |= HAL_DSI_ERROR_GEN; + } + + /* Check only selected errors */ + if(hdsi->ErrorCode != HAL_DSI_ERROR_NONE) + { + /* DSI error interrupt user callback */ + HAL_DSI_ErrorCallback(hdsi); + } + } +} + +/** + * @brief Tearing Effect DSI callback. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval None + */ +__weak void HAL_DSI_TearingEffectCallback(DSI_HandleTypeDef *hdsi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hdsi); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_DSI_TearingEffectCallback could be implemented in the user file + */ +} + +/** + * @brief End of Refresh DSI callback. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval None + */ +__weak void HAL_DSI_EndOfRefreshCallback(DSI_HandleTypeDef *hdsi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hdsi); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_DSI_EndOfRefreshCallback could be implemented in the user file + */ +} + +/** + * @brief Operation Error DSI callback. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval None + */ +__weak void HAL_DSI_ErrorCallback(DSI_HandleTypeDef *hdsi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hdsi); + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_DSI_ErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup DSI_Group3 Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the Generic interface read-back Virtual Channel ID + (+) Select video mode and configure the corresponding parameters + (+) Configure command transmission mode: High-speed or Low-power + (+) Configure the flow control + (+) Configure the DSI PHY timer + (+) Configure the DSI HOST timeout + (+) Configure the DSI HOST timeout + (+) Start/Stop the DSI module + (+) Refresh the display in command mode + (+) Controls the display color mode in Video mode + (+) Control the display shutdown in Video mode + (+) write short DCS or short Generic command + (+) write long DCS or long Generic command + (+) Read command (DCS or generic) + (+) Enter/Exit the Ultra Low Power Mode on data only (D-PHY PLL running) + (+) Enter/Exit the Ultra Low Power Mode on data only and clock (D-PHY PLL turned off) + (+) Start/Stop test pattern generation + (+) Slew-Rate And Delay Tuning + (+) Low-Power Reception Filter Tuning + (+) Activate an additional current path on all lanes to meet the SDDTx parameter + (+) Custom lane pins configuration + (+) Set custom timing for the PHY + (+) Force the Clock/Data Lane in TX Stop Mode + (+) Force LP Receiver in Low-Power Mode + (+) Force Data Lanes in RX Mode after a BTA + (+) Enable a pull-down on the lanes to prevent from floating states when unused + (+) Switch off the contention detection on data lanes + +@endverbatim + * @{ + */ + +/** + * @brief Configure the Generic interface read-back Virtual Channel ID. + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param VirtualChannelID: Virtual channel ID + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetGenericVCID(DSI_HandleTypeDef *hdsi, uint32_t VirtualChannelID) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Update the GVCID register */ + hdsi->Instance->GVCIDR &= ~DSI_GVCIDR_VCID; + hdsi->Instance->GVCIDR |= VirtualChannelID; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Select video mode and configure the corresponding parameters + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param VidCfg: pointer to a DSI_VidCfgTypeDef structure that contains + * the DSI video mode configuration parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigVideoMode(DSI_HandleTypeDef *hdsi, DSI_VidCfgTypeDef *VidCfg) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_COLOR_CODING(VidCfg->ColorCoding)); + assert_param(IS_DSI_VIDEO_MODE_TYPE(VidCfg->Mode)); + assert_param(IS_DSI_LP_COMMAND(VidCfg->LPCommandEnable)); + assert_param(IS_DSI_LP_HFP(VidCfg->LPHorizontalFrontPorchEnable)); + assert_param(IS_DSI_LP_HBP(VidCfg->LPHorizontalBackPorchEnable)); + assert_param(IS_DSI_LP_VACTIVE(VidCfg->LPVerticalActiveEnable)); + assert_param(IS_DSI_LP_VFP(VidCfg->LPVerticalFrontPorchEnable)); + assert_param(IS_DSI_LP_VBP(VidCfg->LPVerticalBackPorchEnable)); + assert_param(IS_DSI_LP_VSYNC(VidCfg->LPVerticalSyncActiveEnable)); + assert_param(IS_DSI_FBTAA(VidCfg->FrameBTAAcknowledgeEnable)); + assert_param(IS_DSI_DE_POLARITY(VidCfg->DEPolarity)); + assert_param(IS_DSI_VSYNC_POLARITY(VidCfg->VSPolarity)); + assert_param(IS_DSI_HSYNC_POLARITY(VidCfg->HSPolarity)); + /* Check the LooselyPacked variant only in 18-bit mode */ + if(VidCfg->ColorCoding == DSI_RGB666) + { + assert_param(IS_DSI_LOOSELY_PACKED(VidCfg->LooselyPacked)); + } + + /* Select video mode by resetting CMDM and DSIM bits */ + hdsi->Instance->MCR &= ~DSI_MCR_CMDM; + hdsi->Instance->WCFGR &= ~DSI_WCFGR_DSIM; + + /* Configure the video mode transmission type */ + hdsi->Instance->VMCR &= ~DSI_VMCR_VMT; + hdsi->Instance->VMCR |= VidCfg->Mode; + + /* Configure the video packet size */ + hdsi->Instance->VPCR &= ~DSI_VPCR_VPSIZE; + hdsi->Instance->VPCR |= VidCfg->PacketSize; + + /* Set the chunks number to be transmitted through the DSI link */ + hdsi->Instance->VCCR &= ~DSI_VCCR_NUMC; + hdsi->Instance->VCCR |= VidCfg->NumberOfChunks; + + /* Set the size of the null packet */ + hdsi->Instance->VNPCR &= ~DSI_VNPCR_NPSIZE; + hdsi->Instance->VNPCR |= VidCfg->NullPacketSize; + + /* Select the virtual channel for the LTDC interface traffic */ + hdsi->Instance->LVCIDR &= ~DSI_LVCIDR_VCID; + hdsi->Instance->LVCIDR |= VidCfg->VirtualChannelID; + + /* Configure the polarity of control signals */ + hdsi->Instance->LPCR &= ~(DSI_LPCR_DEP | DSI_LPCR_VSP | DSI_LPCR_HSP); + hdsi->Instance->LPCR |= (VidCfg->DEPolarity | VidCfg->VSPolarity | VidCfg->HSPolarity); + + /* Select the color coding for the host */ + hdsi->Instance->LCOLCR &= ~DSI_LCOLCR_COLC; + hdsi->Instance->LCOLCR |= VidCfg->ColorCoding; + + /* Select the color coding for the wrapper */ + hdsi->Instance->WCFGR &= ~DSI_WCFGR_COLMUX; + hdsi->Instance->WCFGR |= ((VidCfg->ColorCoding)<<1U); + + /* Enable/disable the loosely packed variant to 18-bit configuration */ + if(VidCfg->ColorCoding == DSI_RGB666) + { + hdsi->Instance->LCOLCR &= ~DSI_LCOLCR_LPE; + hdsi->Instance->LCOLCR |= VidCfg->LooselyPacked; + } + + /* Set the Horizontal Synchronization Active (HSA) in lane byte clock cycles */ + hdsi->Instance->VHSACR &= ~DSI_VHSACR_HSA; + hdsi->Instance->VHSACR |= VidCfg->HorizontalSyncActive; + + /* Set the Horizontal Back Porch (HBP) in lane byte clock cycles */ + hdsi->Instance->VHBPCR &= ~DSI_VHBPCR_HBP; + hdsi->Instance->VHBPCR |= VidCfg->HorizontalBackPorch; + + /* Set the total line time (HLINE=HSA+HBP+HACT+HFP) in lane byte clock cycles */ + hdsi->Instance->VLCR &= ~DSI_VLCR_HLINE; + hdsi->Instance->VLCR |= VidCfg->HorizontalLine; + + /* Set the Vertical Synchronization Active (VSA) */ + hdsi->Instance->VVSACR &= ~DSI_VVSACR_VSA; + hdsi->Instance->VVSACR |= VidCfg->VerticalSyncActive; + + /* Set the Vertical Back Porch (VBP)*/ + hdsi->Instance->VVBPCR &= ~DSI_VVBPCR_VBP; + hdsi->Instance->VVBPCR |= VidCfg->VerticalBackPorch; + + /* Set the Vertical Front Porch (VFP)*/ + hdsi->Instance->VVFPCR &= ~DSI_VVFPCR_VFP; + hdsi->Instance->VVFPCR |= VidCfg->VerticalFrontPorch; + + /* Set the Vertical Active period*/ + hdsi->Instance->VVACR &= ~DSI_VVACR_VA; + hdsi->Instance->VVACR |= VidCfg->VerticalActive; + + /* Configure the command transmission mode */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPCE; + hdsi->Instance->VMCR |= VidCfg->LPCommandEnable; + + /* Low power largest packet size */ + hdsi->Instance->LPMCR &= ~DSI_LPMCR_LPSIZE; + hdsi->Instance->LPMCR |= ((VidCfg->LPLargestPacketSize)<<16U); + + /* Low power VACT largest packet size */ + hdsi->Instance->LPMCR &= ~DSI_LPMCR_VLPSIZE; + hdsi->Instance->LPMCR |= VidCfg->LPVACTLargestPacketSize; + + /* Enable LP transition in HFP period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPHFPE; + hdsi->Instance->VMCR |= VidCfg->LPHorizontalFrontPorchEnable; + + /* Enable LP transition in HBP period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPHBPE; + hdsi->Instance->VMCR |= VidCfg->LPHorizontalBackPorchEnable; + + /* Enable LP transition in VACT period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPVAE; + hdsi->Instance->VMCR |= VidCfg->LPVerticalActiveEnable; + + /* Enable LP transition in VFP period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPVFPE; + hdsi->Instance->VMCR |= VidCfg->LPVerticalFrontPorchEnable; + + /* Enable LP transition in VBP period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPVBPE; + hdsi->Instance->VMCR |= VidCfg->LPVerticalBackPorchEnable; + + /* Enable LP transition in vertical sync period */ + hdsi->Instance->VMCR &= ~DSI_VMCR_LPVSAE; + hdsi->Instance->VMCR |= VidCfg->LPVerticalSyncActiveEnable; + + /* Enable the request for an acknowledge response at the end of a frame */ + hdsi->Instance->VMCR &= ~DSI_VMCR_FBTAAE; + hdsi->Instance->VMCR |= VidCfg->FrameBTAAcknowledgeEnable; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Select adapted command mode and configure the corresponding parameters + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param CmdCfg: pointer to a DSI_CmdCfgTypeDef structure that contains + * the DSI command mode configuration parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigAdaptedCommandMode(DSI_HandleTypeDef *hdsi, DSI_CmdCfgTypeDef *CmdCfg) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_COLOR_CODING(CmdCfg->ColorCoding)); + assert_param(IS_DSI_TE_SOURCE(CmdCfg->TearingEffectSource)); + assert_param(IS_DSI_TE_POLARITY(CmdCfg->TearingEffectPolarity)); + assert_param(IS_DSI_AUTOMATIC_REFRESH(CmdCfg->AutomaticRefresh)); + assert_param(IS_DSI_VS_POLARITY(CmdCfg->VSyncPol)); + assert_param(IS_DSI_TE_ACK_REQUEST(CmdCfg->TEAcknowledgeRequest)); + assert_param(IS_DSI_DE_POLARITY(CmdCfg->DEPolarity)); + assert_param(IS_DSI_VSYNC_POLARITY(CmdCfg->VSPolarity)); + assert_param(IS_DSI_HSYNC_POLARITY(CmdCfg->HSPolarity)); + + /* Select command mode by setting CMDM and DSIM bits */ + hdsi->Instance->MCR |= DSI_MCR_CMDM; + hdsi->Instance->WCFGR &= ~DSI_WCFGR_DSIM; + hdsi->Instance->WCFGR |= DSI_WCFGR_DSIM; + + /* Select the virtual channel for the LTDC interface traffic */ + hdsi->Instance->LVCIDR &= ~DSI_LVCIDR_VCID; + hdsi->Instance->LVCIDR |= CmdCfg->VirtualChannelID; + + /* Configure the polarity of control signals */ + hdsi->Instance->LPCR &= ~(DSI_LPCR_DEP | DSI_LPCR_VSP | DSI_LPCR_HSP); + hdsi->Instance->LPCR |= (CmdCfg->DEPolarity | CmdCfg->VSPolarity | CmdCfg->HSPolarity); + + /* Select the color coding for the host */ + hdsi->Instance->LCOLCR &= ~DSI_LCOLCR_COLC; + hdsi->Instance->LCOLCR |= CmdCfg->ColorCoding; + + /* Select the color coding for the wrapper */ + hdsi->Instance->WCFGR &= ~DSI_WCFGR_COLMUX; + hdsi->Instance->WCFGR |= ((CmdCfg->ColorCoding)<<1U); + + /* Configure the maximum allowed size for write memory command */ + hdsi->Instance->LCCR &= ~DSI_LCCR_CMDSIZE; + hdsi->Instance->LCCR |= CmdCfg->CommandSize; + + /* Configure the tearing effect source and polarity and select the refresh mode */ + hdsi->Instance->WCFGR &= ~(DSI_WCFGR_TESRC | DSI_WCFGR_TEPOL | DSI_WCFGR_AR | DSI_WCFGR_VSPOL); + hdsi->Instance->WCFGR |= (CmdCfg->TearingEffectSource | CmdCfg->TearingEffectPolarity | CmdCfg->AutomaticRefresh | CmdCfg->VSyncPol); + + /* Configure the tearing effect acknowledge request */ + hdsi->Instance->CMCR &= ~DSI_CMCR_TEARE; + hdsi->Instance->CMCR |= CmdCfg->TEAcknowledgeRequest; + + /* Enable the Tearing Effect interrupt */ + __HAL_DSI_ENABLE_IT(hdsi, DSI_IT_TE); + + /* Enable the End of Refresh interrupt */ + __HAL_DSI_ENABLE_IT(hdsi, DSI_IT_ER); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Configure command transmission mode: High-speed or Low-power + * and enable/disable acknowledge request after packet transmission + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param LPCmd: pointer to a DSI_LPCmdTypeDef structure that contains + * the DSI command transmission mode configuration parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigCommand(DSI_HandleTypeDef *hdsi, DSI_LPCmdTypeDef *LPCmd) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + assert_param(IS_DSI_LP_GSW0P(LPCmd->LPGenShortWriteNoP)); + assert_param(IS_DSI_LP_GSW1P(LPCmd->LPGenShortWriteOneP)); + assert_param(IS_DSI_LP_GSW2P(LPCmd->LPGenShortWriteTwoP)); + assert_param(IS_DSI_LP_GSR0P(LPCmd->LPGenShortReadNoP)); + assert_param(IS_DSI_LP_GSR1P(LPCmd->LPGenShortReadOneP)); + assert_param(IS_DSI_LP_GSR2P(LPCmd->LPGenShortReadTwoP)); + assert_param(IS_DSI_LP_GLW(LPCmd->LPGenLongWrite)); + assert_param(IS_DSI_LP_DSW0P(LPCmd->LPDcsShortWriteNoP)); + assert_param(IS_DSI_LP_DSW1P(LPCmd->LPDcsShortWriteOneP)); + assert_param(IS_DSI_LP_DSR0P(LPCmd->LPDcsShortReadNoP)); + assert_param(IS_DSI_LP_DLW(LPCmd->LPDcsLongWrite)); + assert_param(IS_DSI_LP_MRDP(LPCmd->LPMaxReadPacket)); + assert_param(IS_DSI_ACK_REQUEST(LPCmd->AcknowledgeRequest)); + + /* Select High-speed or Low-power for command transmission */ + hdsi->Instance->CMCR &= ~(DSI_CMCR_GSW0TX |\ + DSI_CMCR_GSW1TX |\ + DSI_CMCR_GSW2TX |\ + DSI_CMCR_GSR0TX |\ + DSI_CMCR_GSR1TX |\ + DSI_CMCR_GSR2TX |\ + DSI_CMCR_GLWTX |\ + DSI_CMCR_DSW0TX |\ + DSI_CMCR_DSW1TX |\ + DSI_CMCR_DSR0TX |\ + DSI_CMCR_DLWTX |\ + DSI_CMCR_MRDPS); + hdsi->Instance->CMCR |= (LPCmd->LPGenShortWriteNoP |\ + LPCmd->LPGenShortWriteOneP |\ + LPCmd->LPGenShortWriteTwoP |\ + LPCmd->LPGenShortReadNoP |\ + LPCmd->LPGenShortReadOneP |\ + LPCmd->LPGenShortReadTwoP |\ + LPCmd->LPGenLongWrite |\ + LPCmd->LPDcsShortWriteNoP |\ + LPCmd->LPDcsShortWriteOneP |\ + LPCmd->LPDcsShortReadNoP |\ + LPCmd->LPDcsLongWrite |\ + LPCmd->LPMaxReadPacket); + + /* Configure the acknowledge request after each packet transmission */ + hdsi->Instance->CMCR &= ~DSI_CMCR_ARE; + hdsi->Instance->CMCR |= LPCmd->AcknowledgeRequest; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Configure the flow control parameters + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param FlowControl: flow control feature(s) to be enabled. + * This parameter can be any combination of @ref DSI_FlowControl. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigFlowControl(DSI_HandleTypeDef *hdsi, uint32_t FlowControl) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_FLOW_CONTROL(FlowControl)); + + /* Set the DSI Host Protocol Configuration Register */ + hdsi->Instance->PCR &= ~DSI_FLOW_CONTROL_ALL; + hdsi->Instance->PCR |= FlowControl; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Configure the DSI PHY timer parameters + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param PhyTimers: DSI_PHY_TimerTypeDef structure that contains + * the DSI PHY timing parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigPhyTimer(DSI_HandleTypeDef *hdsi, DSI_PHY_TimerTypeDef *PhyTimers) +{ + uint32_t maxTime; + /* Process locked */ + __HAL_LOCK(hdsi); + + maxTime = (PhyTimers->ClockLaneLP2HSTime > PhyTimers->ClockLaneHS2LPTime)? PhyTimers->ClockLaneLP2HSTime: PhyTimers->ClockLaneHS2LPTime; + + /* Clock lane timer configuration */ + + /* In Automatic Clock Lane control mode, the DSI Host can turn off the clock lane between two + High-Speed transmission. + To do so, the DSI Host calculates the time required for the clock lane to change from HighSpeed + to Low-Power and from Low-Power to High-Speed. + This timings are configured by the HS2LP_TIME and LP2HS_TIME in the DSI Host Clock Lane Timer Configuration Register (DSI_CLTCR). + But the DSI Host is not calculating LP2HS_TIME + HS2LP_TIME but 2 x HS2LP_TIME. + + Workaround : Configure HS2LP_TIME and LP2HS_TIME with the same value being the max of HS2LP_TIME or LP2HS_TIME. + */ + hdsi->Instance->CLTCR &= ~(DSI_CLTCR_LP2HS_TIME | DSI_CLTCR_HS2LP_TIME); + hdsi->Instance->CLTCR |= (maxTime | ((maxTime)<<16U)); + + /* Data lane timer configuration */ + hdsi->Instance->DLTCR &= ~(DSI_DLTCR_MRD_TIME | DSI_DLTCR_LP2HS_TIME | DSI_DLTCR_HS2LP_TIME); + hdsi->Instance->DLTCR |= (PhyTimers->DataLaneMaxReadTime | ((PhyTimers->DataLaneLP2HSTime)<<16U) | ((PhyTimers->DataLaneHS2LPTime)<<24U)); + + /* Configure the wait period to request HS transmission after a stop state */ + hdsi->Instance->PCONFR &= ~DSI_PCONFR_SW_TIME; + hdsi->Instance->PCONFR |= ((PhyTimers->StopWaitTime)<<8U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Configure the DSI HOST timeout parameters + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param HostTimeouts: DSI_HOST_TimeoutTypeDef structure that contains + * the DSI host timeout parameters + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ConfigHostTimeouts(DSI_HandleTypeDef *hdsi, DSI_HOST_TimeoutTypeDef *HostTimeouts) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Set the timeout clock division factor */ + hdsi->Instance->CCR &= ~DSI_CCR_TOCKDIV; + hdsi->Instance->CCR |= ((HostTimeouts->TimeoutCkdiv)<<8U); + + /* High-speed transmission timeout */ + hdsi->Instance->TCCR[0U] &= ~DSI_TCCR0_HSTX_TOCNT; + hdsi->Instance->TCCR[0U] |= ((HostTimeouts->HighSpeedTransmissionTimeout)<<16U); + + /* Low-power reception timeout */ + hdsi->Instance->TCCR[0U] &= ~DSI_TCCR0_LPRX_TOCNT; + hdsi->Instance->TCCR[0U] |= HostTimeouts->LowPowerReceptionTimeout; + + /* High-speed read timeout */ + hdsi->Instance->TCCR[1U] &= ~DSI_TCCR1_HSRD_TOCNT; + hdsi->Instance->TCCR[1U] |= HostTimeouts->HighSpeedReadTimeout; + + /* Low-power read timeout */ + hdsi->Instance->TCCR[2U] &= ~DSI_TCCR2_LPRD_TOCNT; + hdsi->Instance->TCCR[2U] |= HostTimeouts->LowPowerReadTimeout; + + /* High-speed write timeout */ + hdsi->Instance->TCCR[3U] &= ~DSI_TCCR3_HSWR_TOCNT; + hdsi->Instance->TCCR[3U] |= HostTimeouts->HighSpeedWriteTimeout; + + /* High-speed write presp mode */ + hdsi->Instance->TCCR[3U] &= ~DSI_TCCR3_PM; + hdsi->Instance->TCCR[3U] |= HostTimeouts->HighSpeedWritePrespMode; + + /* Low-speed write timeout */ + hdsi->Instance->TCCR[4U] &= ~DSI_TCCR4_LPWR_TOCNT; + hdsi->Instance->TCCR[4U] |= HostTimeouts->LowPowerWriteTimeout; + + /* BTA timeout */ + hdsi->Instance->TCCR[5U] &= ~DSI_TCCR5_BTA_TOCNT; + hdsi->Instance->TCCR[5U] |= HostTimeouts->BTATimeout; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Start the DSI module + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Start(DSI_HandleTypeDef *hdsi) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Enable the DSI host */ + __HAL_DSI_ENABLE(hdsi); + + /* Enable the DSI wrapper */ + __HAL_DSI_WRAPPER_ENABLE(hdsi); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Stop the DSI module + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Stop(DSI_HandleTypeDef *hdsi) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Disable the DSI host */ + __HAL_DSI_DISABLE(hdsi); + + /* Disable the DSI wrapper */ + __HAL_DSI_WRAPPER_DISABLE(hdsi); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Refresh the display in command mode + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Refresh(DSI_HandleTypeDef *hdsi) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Update the display */ + hdsi->Instance->WCR |= DSI_WCR_LTDCEN; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Controls the display color mode in Video mode + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param ColorMode: Color mode (full or 8-colors). + * This parameter can be any value of @ref DSI_Color_Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ColorMode(DSI_HandleTypeDef *hdsi, uint32_t ColorMode) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_COLOR_MODE(ColorMode)); + + /* Update the display color mode */ + hdsi->Instance->WCR &= ~DSI_WCR_COLM; + hdsi->Instance->WCR |= ColorMode; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Control the display shutdown in Video mode + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param Shutdown: Shut-down (Display-ON or Display-OFF). + * This parameter can be any value of @ref DSI_ShutDown + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Shutdown(DSI_HandleTypeDef *hdsi, uint32_t Shutdown) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_SHUT_DOWN(Shutdown)); + + /* Update the display Shutdown */ + hdsi->Instance->WCR &= ~DSI_WCR_SHTDN; + hdsi->Instance->WCR |= Shutdown; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief write short DCS or short Generic command + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param ChannelID: Virtual channel ID. + * @param Mode: DSI short packet data type. + * This parameter can be any value of @ref DSI_SHORT_WRITE_PKT_Data_Type. + * @param Param1: DSC command or first generic parameter. + * This parameter can be any value of @ref DSI_DCS_Command or a + * generic command code. + * @param Param2: DSC parameter or second generic parameter. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ShortWrite(DSI_HandleTypeDef *hdsi, + uint32_t ChannelID, + uint32_t Mode, + uint32_t Param1, + uint32_t Param2) +{ + uint32_t tickstart; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_SHORT_WRITE_PACKET_TYPE(Mode)); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait for Command FIFO Empty */ + while((hdsi->Instance->GPSR & DSI_GPSR_CMDFE) == 0U) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + + /* Configure the packet to send a short DCS command with 0 or 1 parameter */ + DSI_ConfigPacketHeader(hdsi->Instance, + ChannelID, + Mode, + Param1, + Param2); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief write long DCS or long Generic command + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param ChannelID: Virtual channel ID. + * @param Mode: DSI long packet data type. + * This parameter can be any value of @ref DSI_LONG_WRITE_PKT_Data_Type. + * @param NbParams: Number of parameters. + * @param Param1: DSC command or first generic parameter. + * This parameter can be any value of @ref DSI_DCS_Command or a + * generic command code + * @param ParametersTable: Pointer to parameter values table. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_LongWrite(DSI_HandleTypeDef *hdsi, + uint32_t ChannelID, + uint32_t Mode, + uint32_t NbParams, + uint32_t Param1, + uint8_t* ParametersTable) +{ + uint32_t uicounter, nbBytes, count; + uint32_t tickstart; + uint32_t fifoword; + uint8_t* pparams = ParametersTable; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_LONG_WRITE_PACKET_TYPE(Mode)); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait for Command FIFO Empty */ + while((hdsi->Instance->GPSR & DSI_GPSR_CMDFE) == RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + + /* Set the DCS code on payload byte 1, and the other parameters on the write FIFO command*/ + fifoword = Param1; + nbBytes = (NbParams < 3U) ? NbParams : 3U; + + for(count = 0U; count < nbBytes; count++) + { + fifoword |= (((uint32_t)(*(pparams + count))) << (8U + (8U*count))); + } + hdsi->Instance->GPDR = fifoword; + + uicounter = NbParams - nbBytes; + pparams += nbBytes; + /* Set the Next parameters on the write FIFO command*/ + while(uicounter != 0U) + { + nbBytes = (uicounter < 4U) ? uicounter : 4U; + fifoword = 0U; + for(count = 0U; count < nbBytes; count++) + { + fifoword |= (((uint32_t)(*(pparams + count))) << (8U*count)); + } + hdsi->Instance->GPDR = fifoword; + + uicounter -= nbBytes; + pparams += nbBytes; + } + + /* Configure the packet to send a long DCS command */ + DSI_ConfigPacketHeader(hdsi->Instance, + ChannelID, + Mode, + ((NbParams+1U)&0x00FFU), + (((NbParams+1U)&0xFF00U)>>8U)); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Read command (DCS or generic) + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param ChannelNbr: Virtual channel ID + * @param Array: pointer to a buffer to store the payload of a read back operation. + * @param Size: Data size to be read (in byte). + * @param Mode: DSI read packet data type. + * This parameter can be any value of @ref DSI_SHORT_READ_PKT_Data_Type. + * @param DCSCmd: DCS get/read command. + * @param ParametersTable: Pointer to parameter values table. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_Read(DSI_HandleTypeDef *hdsi, + uint32_t ChannelNbr, + uint8_t* Array, + uint32_t Size, + uint32_t Mode, + uint32_t DCSCmd, + uint8_t* ParametersTable) +{ + uint32_t tickstart; + uint8_t* pdata = Array; + uint32_t datasize = Size; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check the parameters */ + assert_param(IS_DSI_READ_PACKET_TYPE(Mode)); + + if(datasize > 2U) + { + /* set max return packet size */ + if (HAL_DSI_ShortWrite(hdsi, ChannelNbr, DSI_MAX_RETURN_PKT_SIZE, ((datasize)&0xFFU), (((datasize)>>8U)&0xFFU)) != HAL_OK) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + } + + /* Configure the packet to read command */ + if (Mode == DSI_DCS_SHORT_PKT_READ) + { + DSI_ConfigPacketHeader(hdsi->Instance, ChannelNbr, Mode, DCSCmd, 0U); + } + else if (Mode == DSI_GEN_SHORT_PKT_READ_P0) + { + DSI_ConfigPacketHeader(hdsi->Instance, ChannelNbr, Mode, 0U, 0U); + } + else if (Mode == DSI_GEN_SHORT_PKT_READ_P1) + { + DSI_ConfigPacketHeader(hdsi->Instance, ChannelNbr, Mode, ParametersTable[0U], 0U); + } + else if (Mode == DSI_GEN_SHORT_PKT_READ_P2) + { + DSI_ConfigPacketHeader(hdsi->Instance, ChannelNbr, Mode, ParametersTable[0U], ParametersTable[1U]); + } + else + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check that the payload read FIFO is not empty */ + while((hdsi->Instance->GPSR & DSI_GPSR_PRDFE) == DSI_GPSR_PRDFE) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + + /* Get the first byte */ + *((uint32_t *)pdata) = (hdsi->Instance->GPDR); + if (datasize > 4U) + { + datasize -= 4U; + pdata += 4U; + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Get the remaining bytes if any */ + while(((int)(datasize)) > 0U) + { + if((hdsi->Instance->GPSR & DSI_GPSR_PRDFE) == 0U) + { + *((uint32_t *)pdata) = (hdsi->Instance->GPDR); + datasize -= 4U; + pdata += 4U; + } + + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Enter the ULPM (Ultra Low Power Mode) with the D-PHY PLL running + * (only data lanes are in ULPM) + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_EnterULPMData(DSI_HandleTypeDef *hdsi) +{ + uint32_t tickstart; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* ULPS Request on Data Lanes */ + hdsi->Instance->PUCR |= DSI_PUCR_URDL; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait until the D-PHY active lanes enter into ULPM */ + if((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_ONE_DATA_LANE) + { + while((hdsi->Instance->PSR & DSI_PSR_UAN0) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else if ((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_TWO_DATA_LANES) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UAN1)) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Exit the ULPM (Ultra Low Power Mode) with the D-PHY PLL running + * (only data lanes are in ULPM) + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ExitULPMData(DSI_HandleTypeDef *hdsi) +{ + uint32_t tickstart; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Exit ULPS on Data Lanes */ + hdsi->Instance->PUCR |= DSI_PUCR_UEDL; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait until all active lanes exit ULPM */ + if((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_ONE_DATA_LANE) + { + while((hdsi->Instance->PSR & DSI_PSR_UAN0) != DSI_PSR_UAN0) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else if ((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_TWO_DATA_LANES) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UAN1)) != (DSI_PSR_UAN0 | DSI_PSR_UAN1)) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* wait for 1 ms*/ + HAL_Delay(1U); + + /* De-assert the ULPM requests and the ULPM exit bits */ + hdsi->Instance->PUCR = 0U; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Enter the ULPM (Ultra Low Power Mode) with the D-PHY PLL turned off + * (both data and clock lanes are in ULPM) + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_EnterULPM(DSI_HandleTypeDef *hdsi) +{ + uint32_t tickstart; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Clock lane configuration: no more HS request */ + hdsi->Instance->CLCR &= ~DSI_CLCR_DPCC; + + /* Use system PLL as byte lane clock source before stopping DSIPHY clock source */ + __HAL_RCC_DSI_CONFIG(RCC_DSICLKSOURCE_PLLSAI2); + + /* ULPS Request on Clock and Data Lanes */ + hdsi->Instance->PUCR |= (DSI_PUCR_URCL | DSI_PUCR_URDL); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait until all active lanes exit ULPM */ + if((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_ONE_DATA_LANE) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UANC)) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else if ((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_TWO_DATA_LANES) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UAN1 | DSI_PSR_UANC)) != RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* Turn off the DSI PLL */ + __HAL_DSI_PLL_DISABLE(hdsi); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Exit the ULPM (Ultra Low Power Mode) with the D-PHY PLL turned off + * (both data and clock lanes are in ULPM) + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ExitULPM(DSI_HandleTypeDef *hdsi) +{ + uint32_t tickstart; + + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Turn on the DSI PLL */ + __HAL_DSI_PLL_ENABLE(hdsi); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait for the lock of the PLL */ + while(__HAL_DSI_GET_FLAG(hdsi, DSI_FLAG_PLLLS) == RESET) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + + /* Exit ULPS on Clock and Data Lanes */ + hdsi->Instance->PUCR |= (DSI_PUCR_UECL | DSI_PUCR_UEDL); + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait until all active lanes exit ULPM */ + if((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_ONE_DATA_LANE) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UANC)) != (DSI_PSR_UAN0 | DSI_PSR_UANC)) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else if ((hdsi->Instance->PCONFR & DSI_PCONFR_NL) == DSI_TWO_DATA_LANES) + { + while((hdsi->Instance->PSR & (DSI_PSR_UAN0 | DSI_PSR_UAN1 | DSI_PSR_UANC)) != (DSI_PSR_UAN0 | DSI_PSR_UAN1 | DSI_PSR_UANC)) + { + /* Check for the Timeout */ + if((HAL_GetTick() - tickstart ) > DSI_TIMEOUT_VALUE) + { + /* Process Unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_TIMEOUT; + } + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* wait for 1 ms */ + HAL_Delay(1U); + + /* De-assert the ULPM requests and the ULPM exit bits */ + hdsi->Instance->PUCR = 0U; + + /* Switch the lanbyteclock source in the RCC from system PLL to D-PHY */ + __HAL_RCC_DSI_CONFIG(RCC_DSICLKSOURCE_DSIPHY); + + /* Restore clock lane configuration to HS */ + hdsi->Instance->CLCR |= DSI_CLCR_DPCC; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Start test pattern generation + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param Mode: Pattern generator mode + * This parameter can be one of the following values: + * 0 : Color bars (horizontal or vertical) + * 1 : BER pattern (vertical only) + * @param Orientation: Pattern generator orientation + * This parameter can be one of the following values: + * 0 : Vertical color bars + * 1 : Horizontal color bars + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_PatternGeneratorStart(DSI_HandleTypeDef *hdsi, uint32_t Mode, uint32_t Orientation) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Configure pattern generator mode and orientation */ + hdsi->Instance->VMCR &= ~(DSI_VMCR_PGM | DSI_VMCR_PGO); + hdsi->Instance->VMCR |= ((Mode<<20U) | (Orientation<<24U)); + + /* Enable pattern generator by setting PGE bit */ + hdsi->Instance->VMCR |= DSI_VMCR_PGE; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Stop test pattern generation + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_PatternGeneratorStop(DSI_HandleTypeDef *hdsi) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Disable pattern generator by clearing PGE bit */ + hdsi->Instance->VMCR &= ~DSI_VMCR_PGE; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Set Slew-Rate And Delay Tuning + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param CommDelay: Communication delay to be adjusted. + * This parameter can be any value of @ref DSI_Communication_Delay + * @param Lane: select between clock or data lanes. + * This parameter can be any value of @ref DSI_Lane_Group + * @param Value: Custom value of the slew-rate or delay + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetSlewRateAndDelayTuning(DSI_HandleTypeDef *hdsi, uint32_t CommDelay, uint32_t Lane, uint32_t Value) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_DSI_COMMUNICATION_DELAY(CommDelay)); + assert_param(IS_DSI_LANE_GROUP(Lane)); + + switch(CommDelay) + { + case DSI_SLEW_RATE_HSTX: + if(Lane == DSI_CLOCK_LANE) + { + /* High-Speed Transmission Slew Rate Control on Clock Lane */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_HSTXSRCCL; + hdsi->Instance->WPCR[1U] |= Value<<16U; + } + else if(Lane == DSI_DATA_LANES) + { + /* High-Speed Transmission Slew Rate Control on Data Lanes */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_HSTXSRCDL; + hdsi->Instance->WPCR[1U] |= Value<<18U; + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + break; + case DSI_SLEW_RATE_LPTX: + if(Lane == DSI_CLOCK_LANE) + { + /* Low-Power transmission Slew Rate Compensation on Clock Lane */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_LPSRCCL; + hdsi->Instance->WPCR[1U] |= Value<<6U; + } + else if(Lane == DSI_DATA_LANES) + { + /* Low-Power transmission Slew Rate Compensation on Data Lanes */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_LPSRCDL; + hdsi->Instance->WPCR[1U] |= Value<<8U; + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + break; + case DSI_HS_DELAY: + if(Lane == DSI_CLOCK_LANE) + { + /* High-Speed Transmission Delay on Clock Lane */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_HSTXDCL; + hdsi->Instance->WPCR[1U] |= Value; + } + else if(Lane == DSI_DATA_LANES) + { + /* High-Speed Transmission Delay on Data Lanes */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_HSTXDDL; + hdsi->Instance->WPCR[1U] |= Value<<2U; + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + break; + default: + break; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Low-Power Reception Filter Tuning + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param Frequency: cutoff frequency of low-pass filter at the input of LPRX + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetLowPowerRXFilter(DSI_HandleTypeDef *hdsi, uint32_t Frequency) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Low-Power RX low-pass Filtering Tuning */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_LPRXFT; + hdsi->Instance->WPCR[1U] |= Frequency<<25U; + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Activate an additional current path on all lanes to meet the SDDTx parameter + * defined in the MIPI D-PHY specification + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetSDD(DSI_HandleTypeDef *hdsi, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_FUNCTIONAL_STATE(State)); + + /* Activate/Disactivate additional current path on all lanes */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_SDDC; + hdsi->Instance->WPCR[1U] |= ((uint32_t)State << 12U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Custom lane pins configuration + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param CustomLane: Function to be applyed on selected lane. + * This parameter can be any value of @ref DSI_CustomLane + * @param Lane: select between clock or data lane 0 or data lane 1. + * This parameter can be any value of @ref DSI_Lane_Select + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetLanePinsConfiguration(DSI_HandleTypeDef *hdsi, uint32_t CustomLane, uint32_t Lane, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_DSI_CUSTOM_LANE(CustomLane)); + assert_param(IS_DSI_LANE(Lane)); + assert_param(IS_FUNCTIONAL_STATE(State)); + + switch(CustomLane) + { + case DSI_SWAP_LANE_PINS: + if(Lane == DSI_CLK_LANE) + { + /* Swap pins on clock lane */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_SWCL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 6U); + } + else if(Lane == DSI_DATA_LANE0) + { + /* Swap pins on data lane 0 */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_SWDL0; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 7U); + } + else if(Lane == DSI_DATA_LANE1) + { + /* Swap pins on data lane 1 */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_SWDL1; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 8U); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + break; + case DSI_INVERT_HS_SIGNAL: + if(Lane == DSI_CLK_LANE) + { + /* Invert HS signal on clock lane */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_HSICL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 9U); + } + else if(Lane == DSI_DATA_LANE0) + { + /* Invert HS signal on data lane 0 */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_HSIDL0; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 10U); + } + else if(Lane == DSI_DATA_LANE1) + { + /* Invert HS signal on data lane 1 */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_HSIDL1; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 11U); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + break; + default: + break; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Set custom timing for the PHY + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param Timing: PHY timing to be adjusted. + * This parameter can be any value of @ref DSI_PHY_Timing + * @param State: ENABLE or DISABLE + * @param Value: Custom value of the timing + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetPHYTimings(DSI_HandleTypeDef *hdsi, uint32_t Timing, FunctionalState State, uint32_t Value) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_DSI_PHY_TIMING(Timing)); + assert_param(IS_FUNCTIONAL_STATE(State)); + + switch(Timing) + { + case DSI_TCLK_POST: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TCLKPOSTEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 27U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[4U] &= ~DSI_WPCR4_TCLKPOST; + hdsi->Instance->WPCR[4U] |= Value & DSI_WPCR4_TCLKPOST; + } + + break; + case DSI_TLPX_CLK: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TLPXCEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 26U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[3U] &= ~DSI_WPCR3_TLPXC; + hdsi->Instance->WPCR[3U] |= (Value << 24U) & DSI_WPCR3_TLPXC; + } + + break; + case DSI_THS_EXIT: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_THSEXITEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 25U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[3U] &= ~DSI_WPCR3_THSEXIT; + hdsi->Instance->WPCR[3U] |= (Value << 16U) & DSI_WPCR3_THSEXIT; + } + + break; + case DSI_TLPX_DATA: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TLPXDEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 24U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[3U] &= ~DSI_WPCR3_TLPXD; + hdsi->Instance->WPCR[3U] |= (Value << 8U) & DSI_WPCR3_TLPXD; + } + + break; + case DSI_THS_ZERO: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_THSZEROEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 23U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[3U] &= ~DSI_WPCR3_THSZERO; + hdsi->Instance->WPCR[3U] |= Value & DSI_WPCR3_THSZERO; + } + + break; + case DSI_THS_TRAIL: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_THSTRAILEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 22U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[2U] &= ~DSI_WPCR2_THSTRAIL; + hdsi->Instance->WPCR[2U] |= (Value << 24U) & DSI_WPCR2_THSTRAIL; + } + + break; + case DSI_THS_PREPARE: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_THSPREPEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 21U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[2U] &= ~DSI_WPCR2_THSPREP; + hdsi->Instance->WPCR[2U] |= (Value << 16U) & DSI_WPCR2_THSPREP; + } + + break; + case DSI_TCLK_ZERO: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TCLKZEROEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 20U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[2U] &= ~DSI_WPCR2_TCLKZERO; + hdsi->Instance->WPCR[2U] |= (Value << 8U) & DSI_WPCR2_TCLKZERO; + } + + break; + case DSI_TCLK_PREPARE: + /* Enable/Disable custom timing setting */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TCLKPREPEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 19U); + + if(State != DISABLE) + { + /* Set custom value */ + hdsi->Instance->WPCR[2U] &= ~DSI_WPCR2_TCLKPREP; + hdsi->Instance->WPCR[2U] |= Value & DSI_WPCR2_TCLKPREP; + } + + break; + default: + break; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Force the Clock/Data Lane in TX Stop Mode + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param Lane: select between clock or data lanes. + * This parameter can be any value of @ref DSI_Lane_Group + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ForceTXStopMode(DSI_HandleTypeDef *hdsi, uint32_t Lane, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_DSI_LANE_GROUP(Lane)); + assert_param(IS_FUNCTIONAL_STATE(State)); + + if(Lane == DSI_CLOCK_LANE) + { + /* Force/Unforce the Clock Lane in TX Stop Mode */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_FTXSMCL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 12U); + } + else if(Lane == DSI_DATA_LANES) + { + /* Force/Unforce the Data Lanes in TX Stop Mode */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_FTXSMDL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 13U); + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_ERROR; + } + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Force LP Receiver in Low-Power Mode + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ForceRXLowPower(DSI_HandleTypeDef *hdsi, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_FUNCTIONAL_STATE(State)); + + /* Force/Unforce LP Receiver in Low-Power Mode */ + hdsi->Instance->WPCR[1U] &= ~DSI_WPCR1_FLPRXLPM; + hdsi->Instance->WPCR[1U] |= ((uint32_t)State << 22U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Force Data Lanes in RX Mode after a BTA + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_ForceDataLanesInRX(DSI_HandleTypeDef *hdsi, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_FUNCTIONAL_STATE(State)); + + /* Force Data Lanes in RX Mode */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_TDDL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 16U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Enable a pull-down on the lanes to prevent from floating states when unused + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetPullDown(DSI_HandleTypeDef *hdsi, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_FUNCTIONAL_STATE(State)); + + /* Enable/Disable pull-down on lanes */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_PDEN; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 18U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @brief Switch off the contention detection on data lanes + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @param State: ENABLE or DISABLE + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DSI_SetContentionDetectionOff(DSI_HandleTypeDef *hdsi, FunctionalState State) +{ + /* Process locked */ + __HAL_LOCK(hdsi); + + /* Check function parameters */ + assert_param(IS_FUNCTIONAL_STATE(State)); + + /* Contention Detection on Data Lanes OFF */ + hdsi->Instance->WPCR[0U] &= ~DSI_WPCR0_CDOFFDL; + hdsi->Instance->WPCR[0U] |= ((uint32_t)State << 14U); + + /* Process unlocked */ + __HAL_UNLOCK(hdsi); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup DSI_Group4 Peripheral State and Errors functions + * @brief Peripheral State and Errors functions + * +@verbatim + =============================================================================== + ##### Peripheral State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the DSI state. + (+) Get error code. + +@endverbatim + * @{ + */ + +/** + * @brief Return the DSI state + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval HAL state + */ +HAL_DSI_StateTypeDef HAL_DSI_GetState(DSI_HandleTypeDef *hdsi) +{ + return hdsi->State; +} + +/** + * @brief Return the DSI error code + * @param hdsi: pointer to a DSI_HandleTypeDef structure that contains + * the configuration information for the DSI. + * @retval DSI Error Code + */ +uint32_t HAL_DSI_GetError(DSI_HandleTypeDef *hdsi) +{ + /* Get the error code */ + return hdsi->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DSI */ + +#endif /* HAL_DSI_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.h new file mode 100644 index 0000000000..5baeb926e3 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_dsi.h @@ -0,0 +1,1296 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_dsi.h + * @author MCD Application Team + * @brief Header file of DSI HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_DSI_H +#define __STM32L4xx_HAL_DSI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +#if defined(DSI) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup DSI DSI + * @brief DSI HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** + * @brief DSI Init Structure definition + */ +typedef struct +{ + uint32_t AutomaticClockLaneControl; /*!< Automatic clock lane control + This parameter can be any value of @ref DSI_Automatic_Clk_Lane_Control */ + + uint32_t TXEscapeCkdiv; /*!< TX Escape clock division + The values 0 and 1 stop the TX_ESC clock generation */ + + uint32_t NumberOfLanes; /*!< Number of lanes + This parameter can be any value of @ref DSI_Number_Of_Lanes */ + +}DSI_InitTypeDef; + +/** + * @brief DSI PLL Clock structure definition + */ +typedef struct +{ + uint32_t PLLNDIV; /*!< PLL Loop Division Factor + This parameter must be a value between 10 and 125 */ + + uint32_t PLLIDF; /*!< PLL Input Division Factor + This parameter can be any value of @ref DSI_PLL_IDF */ + + uint32_t PLLODF; /*!< PLL Output Division Factor + This parameter can be any value of @ref DSI_PLL_ODF */ + +}DSI_PLLInitTypeDef; + +/** + * @brief DSI Video mode configuration + */ +typedef struct +{ + uint32_t VirtualChannelID; /*!< Virtual channel ID */ + + uint32_t ColorCoding; /*!< Color coding for LTDC interface + This parameter can be any value of @ref DSI_Color_Coding */ + + uint32_t LooselyPacked; /*!< Enable or disable loosely packed stream (needed only when using + 18-bit configuration). + This parameter can be any value of @ref DSI_LooselyPacked */ + + uint32_t Mode; /*!< Video mode type + This parameter can be any value of @ref DSI_Video_Mode_Type */ + + uint32_t PacketSize; /*!< Video packet size */ + + uint32_t NumberOfChunks; /*!< Number of chunks */ + + uint32_t NullPacketSize; /*!< Null packet size */ + + uint32_t HSPolarity; /*!< HSYNC pin polarity + This parameter can be any value of @ref DSI_HSYNC_Polarity */ + + uint32_t VSPolarity; /*!< VSYNC pin polarity + This parameter can be any value of @ref DSI_VSYNC_Active_Polarity */ + + uint32_t DEPolarity; /*!< Data Enable pin polarity + This parameter can be any value of @ref DSI_DATA_ENABLE_Polarity */ + + uint32_t HorizontalSyncActive; /*!< Horizontal synchronism active duration (in lane byte clock cycles) */ + + uint32_t HorizontalBackPorch; /*!< Horizontal back-porch duration (in lane byte clock cycles) */ + + uint32_t HorizontalLine; /*!< Horizontal line duration (in lane byte clock cycles) */ + + uint32_t VerticalSyncActive; /*!< Vertical synchronism active duration */ + + uint32_t VerticalBackPorch; /*!< Vertical back-porch duration */ + + uint32_t VerticalFrontPorch; /*!< Vertical front-porch duration */ + + uint32_t VerticalActive; /*!< Vertical active duration */ + + uint32_t LPCommandEnable; /*!< Low-power command enable + This parameter can be any value of @ref DSI_LP_Command */ + + uint32_t LPLargestPacketSize; /*!< The size, in bytes, of the low power largest packet that + can fit in a line during VSA, VBP and VFP regions */ + + uint32_t LPVACTLargestPacketSize; /*!< The size, in bytes, of the low power largest packet that + can fit in a line during VACT region */ + + uint32_t LPHorizontalFrontPorchEnable; /*!< Low-power horizontal front-porch enable + This parameter can be any value of @ref DSI_LP_HFP */ + + uint32_t LPHorizontalBackPorchEnable; /*!< Low-power horizontal back-porch enable + This parameter can be any value of @ref DSI_LP_HBP */ + + uint32_t LPVerticalActiveEnable; /*!< Low-power vertical active enable + This parameter can be any value of @ref DSI_LP_VACT */ + + uint32_t LPVerticalFrontPorchEnable; /*!< Low-power vertical front-porch enable + This parameter can be any value of @ref DSI_LP_VFP */ + + uint32_t LPVerticalBackPorchEnable; /*!< Low-power vertical back-porch enable + This parameter can be any value of @ref DSI_LP_VBP */ + + uint32_t LPVerticalSyncActiveEnable; /*!< Low-power vertical sync active enable + This parameter can be any value of @ref DSI_LP_VSYNC */ + + uint32_t FrameBTAAcknowledgeEnable; /*!< Frame bus-turn-around acknowledge enable + This parameter can be any value of @ref DSI_FBTA_acknowledge */ + +}DSI_VidCfgTypeDef; + +/** + * @brief DSI Adapted command mode configuration + */ +typedef struct +{ + uint32_t VirtualChannelID; /*!< Virtual channel ID */ + + uint32_t ColorCoding; /*!< Color coding for LTDC interface + This parameter can be any value of @ref DSI_Color_Coding */ + + uint32_t CommandSize; /*!< Maximum allowed size for an LTDC write memory command, measured in + pixels. This parameter can be any value between 0x00 and 0xFFFFU */ + + uint32_t TearingEffectSource; /*!< Tearing effect source + This parameter can be any value of @ref DSI_TearingEffectSource */ + + uint32_t TearingEffectPolarity; /*!< Tearing effect pin polarity + This parameter can be any value of @ref DSI_TearingEffectPolarity */ + + uint32_t HSPolarity; /*!< HSYNC pin polarity + This parameter can be any value of @ref DSI_HSYNC_Polarity */ + + uint32_t VSPolarity; /*!< VSYNC pin polarity + This parameter can be any value of @ref DSI_VSYNC_Active_Polarity */ + + uint32_t DEPolarity; /*!< Data Enable pin polarity + This parameter can be any value of @ref DSI_DATA_ENABLE_Polarity */ + + uint32_t VSyncPol; /*!< VSync edge on which the LTDC is halted + This parameter can be any value of @ref DSI_Vsync_Polarity */ + + uint32_t AutomaticRefresh; /*!< Automatic refresh mode + This parameter can be any value of @ref DSI_AutomaticRefresh */ + + uint32_t TEAcknowledgeRequest; /*!< Tearing Effect Acknowledge Request Enable + This parameter can be any value of @ref DSI_TE_AcknowledgeRequest */ + +}DSI_CmdCfgTypeDef; + +/** + * @brief DSI command transmission mode configuration + */ +typedef struct +{ + uint32_t LPGenShortWriteNoP; /*!< Generic Short Write Zero parameters Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortWriteNoP */ + + uint32_t LPGenShortWriteOneP; /*!< Generic Short Write One parameter Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortWriteOneP */ + + uint32_t LPGenShortWriteTwoP; /*!< Generic Short Write Two parameters Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortWriteTwoP */ + + uint32_t LPGenShortReadNoP; /*!< Generic Short Read Zero parameters Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortReadNoP */ + + uint32_t LPGenShortReadOneP; /*!< Generic Short Read One parameter Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortReadOneP */ + + uint32_t LPGenShortReadTwoP; /*!< Generic Short Read Two parameters Transmission + This parameter can be any value of @ref DSI_LP_LPGenShortReadTwoP */ + + uint32_t LPGenLongWrite; /*!< Generic Long Write Transmission + This parameter can be any value of @ref DSI_LP_LPGenLongWrite */ + + uint32_t LPDcsShortWriteNoP; /*!< DCS Short Write Zero parameters Transmission + This parameter can be any value of @ref DSI_LP_LPDcsShortWriteNoP */ + + uint32_t LPDcsShortWriteOneP; /*!< DCS Short Write One parameter Transmission + This parameter can be any value of @ref DSI_LP_LPDcsShortWriteOneP */ + + uint32_t LPDcsShortReadNoP; /*!< DCS Short Read Zero parameters Transmission + This parameter can be any value of @ref DSI_LP_LPDcsShortReadNoP */ + + uint32_t LPDcsLongWrite; /*!< DCS Long Write Transmission + This parameter can be any value of @ref DSI_LP_LPDcsLongWrite */ + + uint32_t LPMaxReadPacket; /*!< Maximum Read Packet Size Transmission + This parameter can be any value of @ref DSI_LP_LPMaxReadPacket */ + + uint32_t AcknowledgeRequest; /*!< Acknowledge Request Enable + This parameter can be any value of @ref DSI_AcknowledgeRequest */ + +}DSI_LPCmdTypeDef; + +/** + * @brief DSI PHY Timings definition + */ +typedef struct +{ + uint32_t ClockLaneHS2LPTime; /*!< The maximum time that the D-PHY clock lane takes to go from high-speed + to low-power transmission */ + + uint32_t ClockLaneLP2HSTime; /*!< The maximum time that the D-PHY clock lane takes to go from low-power + to high-speed transmission */ + + uint32_t DataLaneHS2LPTime; /*!< The maximum time that the D-PHY data lanes takes to go from high-speed + to low-power transmission */ + + uint32_t DataLaneLP2HSTime; /*!< The maximum time that the D-PHY data lanes takes to go from low-power + to high-speed transmission */ + + uint32_t DataLaneMaxReadTime; /*!< The maximum time required to perform a read command */ + + uint32_t StopWaitTime; /*!< The minimum wait period to request a High-Speed transmission after the + Stop state */ + +}DSI_PHY_TimerTypeDef; + +/** + * @brief DSI HOST Timeouts definition + */ +typedef struct +{ + uint32_t TimeoutCkdiv; /*!< Time-out clock division */ + + uint32_t HighSpeedTransmissionTimeout; /*!< High-speed transmission time-out */ + + uint32_t LowPowerReceptionTimeout; /*!< Low-power reception time-out */ + + uint32_t HighSpeedReadTimeout; /*!< High-speed read time-out */ + + uint32_t LowPowerReadTimeout; /*!< Low-power read time-out */ + + uint32_t HighSpeedWriteTimeout; /*!< High-speed write time-out */ + + uint32_t HighSpeedWritePrespMode; /*!< High-speed write presp mode + This parameter can be any value of @ref DSI_HS_PrespMode */ + + uint32_t LowPowerWriteTimeout; /*!< Low-speed write time-out */ + + uint32_t BTATimeout; /*!< BTA time-out */ + +}DSI_HOST_TimeoutTypeDef; + +/** + * @brief DSI States Structure definition + */ +typedef enum +{ + HAL_DSI_STATE_RESET = 0x00U, + HAL_DSI_STATE_READY = 0x01U, + HAL_DSI_STATE_ERROR = 0x02U, + HAL_DSI_STATE_BUSY = 0x03U, + HAL_DSI_STATE_TIMEOUT = 0x04U +}HAL_DSI_StateTypeDef; + +/** + * @brief DSI Handle Structure definition + */ +typedef struct +{ + DSI_TypeDef *Instance; /*!< Register base address */ + DSI_InitTypeDef Init; /*!< DSI required parameters */ + HAL_LockTypeDef Lock; /*!< DSI peripheral status */ + __IO HAL_DSI_StateTypeDef State; /*!< DSI communication state */ + __IO uint32_t ErrorCode; /*!< DSI Error code */ + uint32_t ErrorMsk; /*!< DSI Error monitoring mask */ +}DSI_HandleTypeDef; + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DSI_DCS_Command DSI DCS Command + * @{ + */ +#define DSI_ENTER_IDLE_MODE 0x39U +#define DSI_ENTER_INVERT_MODE 0x21U +#define DSI_ENTER_NORMAL_MODE 0x13U +#define DSI_ENTER_PARTIAL_MODE 0x12U +#define DSI_ENTER_SLEEP_MODE 0x10U +#define DSI_EXIT_IDLE_MODE 0x38U +#define DSI_EXIT_INVERT_MODE 0x20U +#define DSI_EXIT_SLEEP_MODE 0x11U +#define DSI_GET_3D_CONTROL 0x3FU +#define DSI_GET_ADDRESS_MODE 0x0BU +#define DSI_GET_BLUE_CHANNEL 0x08U +#define DSI_GET_DIAGNOSTIC_RESULT 0x0FU +#define DSI_GET_DISPLAY_MODE 0x0DU +#define DSI_GET_GREEN_CHANNEL 0x07U +#define DSI_GET_PIXEL_FORMAT 0x0CU +#define DSI_GET_POWER_MODE 0x0AU +#define DSI_GET_RED_CHANNEL 0x06U +#define DSI_GET_SCANLINE 0x45U +#define DSI_GET_SIGNAL_MODE 0x0EU +#define DSI_NOP 0x00U +#define DSI_READ_DDB_CONTINUE 0xA8U +#define DSI_READ_DDB_START 0xA1U +#define DSI_READ_MEMORY_CONTINUE 0x3EU +#define DSI_READ_MEMORY_START 0x2EU +#define DSI_SET_3D_CONTROL 0x3DU +#define DSI_SET_ADDRESS_MODE 0x36U +#define DSI_SET_COLUMN_ADDRESS 0x2AU +#define DSI_SET_DISPLAY_OFF 0x28U +#define DSI_SET_DISPLAY_ON 0x29U +#define DSI_SET_GAMMA_CURVE 0x26U +#define DSI_SET_PAGE_ADDRESS 0x2BU +#define DSI_SET_PARTIAL_COLUMNS 0x31U +#define DSI_SET_PARTIAL_ROWS 0x30U +#define DSI_SET_PIXEL_FORMAT 0x3AU +#define DSI_SET_SCROLL_AREA 0x33U +#define DSI_SET_SCROLL_START 0x37U +#define DSI_SET_TEAR_OFF 0x34U +#define DSI_SET_TEAR_ON 0x35U +#define DSI_SET_TEAR_SCANLINE 0x44U +#define DSI_SET_VSYNC_TIMING 0x40U +#define DSI_SOFT_RESET 0x01U +#define DSI_WRITE_LUT 0x2DU +#define DSI_WRITE_MEMORY_CONTINUE 0x3CU +#define DSI_WRITE_MEMORY_START 0x2CU +/** + * @} + */ + +/** @defgroup DSI_Video_Mode_Type DSI Video Mode Type + * @{ + */ +#define DSI_VID_MODE_NB_PULSES 0U +#define DSI_VID_MODE_NB_EVENTS 1U +#define DSI_VID_MODE_BURST 2U +/** + * @} + */ + +/** @defgroup DSI_Color_Mode DSI Color Mode + * @{ + */ +#define DSI_COLOR_MODE_FULL 0x00000000U +#define DSI_COLOR_MODE_EIGHT DSI_WCR_COLM +/** + * @} + */ + +/** @defgroup DSI_ShutDown DSI ShutDown + * @{ + */ +#define DSI_DISPLAY_ON 0x00000000U +#define DSI_DISPLAY_OFF DSI_WCR_SHTDN +/** + * @} + */ + +/** @defgroup DSI_LP_Command DSI LP Command + * @{ + */ +#define DSI_LP_COMMAND_DISABLE 0x00000000U +#define DSI_LP_COMMAND_ENABLE DSI_VMCR_LPCE +/** + * @} + */ + +/** @defgroup DSI_LP_HFP DSI LP HFP + * @{ + */ +#define DSI_LP_HFP_DISABLE 0x00000000U +#define DSI_LP_HFP_ENABLE DSI_VMCR_LPHFPE +/** + * @} + */ + +/** @defgroup DSI_LP_HBP DSI LP HBP + * @{ + */ +#define DSI_LP_HBP_DISABLE 0x00000000U +#define DSI_LP_HBP_ENABLE DSI_VMCR_LPHBPE +/** + * @} + */ + +/** @defgroup DSI_LP_VACT DSI LP VACT + * @{ + */ +#define DSI_LP_VACT_DISABLE 0x00000000U +#define DSI_LP_VACT_ENABLE DSI_VMCR_LPVAE +/** + * @} + */ + +/** @defgroup DSI_LP_VFP DSI LP VFP + * @{ + */ +#define DSI_LP_VFP_DISABLE 0x00000000U +#define DSI_LP_VFP_ENABLE DSI_VMCR_LPVFPE +/** + * @} + */ + +/** @defgroup DSI_LP_VBP DSI LP VBP + * @{ + */ +#define DSI_LP_VBP_DISABLE 0x00000000U +#define DSI_LP_VBP_ENABLE DSI_VMCR_LPVBPE +/** + * @} + */ + +/** @defgroup DSI_LP_VSYNC DSI LP VSYNC + * @{ + */ +#define DSI_LP_VSYNC_DISABLE 0x00000000U +#define DSI_LP_VSYNC_ENABLE DSI_VMCR_LPVSAE +/** + * @} + */ + +/** @defgroup DSI_FBTA_acknowledge DSI FBTA Acknowledge + * @{ + */ +#define DSI_FBTAA_DISABLE 0x00000000U +#define DSI_FBTAA_ENABLE DSI_VMCR_FBTAAE +/** + * @} + */ + +/** @defgroup DSI_TearingEffectSource DSI Tearing Effect Source + * @{ + */ +#define DSI_TE_DSILINK 0x00000000U +#define DSI_TE_EXTERNAL DSI_WCFGR_TESRC +/** + * @} + */ + +/** @defgroup DSI_TearingEffectPolarity DSI Tearing Effect Polarity + * @{ + */ +#define DSI_TE_RISING_EDGE 0x00000000U +#define DSI_TE_FALLING_EDGE DSI_WCFGR_TEPOL +/** + * @} + */ + +/** @defgroup DSI_Vsync_Polarity DSI Vsync Polarity + * @{ + */ +#define DSI_VSYNC_FALLING 0x00000000U +#define DSI_VSYNC_RISING DSI_WCFGR_VSPOL +/** + * @} + */ + +/** @defgroup DSI_AutomaticRefresh DSI Automatic Refresh + * @{ + */ +#define DSI_AR_DISABLE 0x00000000U +#define DSI_AR_ENABLE DSI_WCFGR_AR +/** + * @} + */ + +/** @defgroup DSI_TE_AcknowledgeRequest DSI TE Acknowledge Request + * @{ + */ +#define DSI_TE_ACKNOWLEDGE_DISABLE 0x00000000U +#define DSI_TE_ACKNOWLEDGE_ENABLE DSI_CMCR_TEARE +/** + * @} + */ + +/** @defgroup DSI_AcknowledgeRequest DSI Acknowledge Request + * @{ + */ +#define DSI_ACKNOWLEDGE_DISABLE 0x00000000U +#define DSI_ACKNOWLEDGE_ENABLE DSI_CMCR_ARE +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortWriteNoP DSI LP LPGen Short Write NoP + * @{ + */ +#define DSI_LP_GSW0P_DISABLE 0x00000000U +#define DSI_LP_GSW0P_ENABLE DSI_CMCR_GSW0TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortWriteOneP DSI LP LPGen Short Write OneP + * @{ + */ +#define DSI_LP_GSW1P_DISABLE 0x00000000U +#define DSI_LP_GSW1P_ENABLE DSI_CMCR_GSW1TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortWriteTwoP DSI LP LPGen Short Write TwoP + * @{ + */ +#define DSI_LP_GSW2P_DISABLE 0x00000000U +#define DSI_LP_GSW2P_ENABLE DSI_CMCR_GSW2TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortReadNoP DSI LP LPGen Short Read NoP + * @{ + */ +#define DSI_LP_GSR0P_DISABLE 0x00000000U +#define DSI_LP_GSR0P_ENABLE DSI_CMCR_GSR0TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortReadOneP DSI LP LPGen Short Read OneP + * @{ + */ +#define DSI_LP_GSR1P_DISABLE 0x00000000U +#define DSI_LP_GSR1P_ENABLE DSI_CMCR_GSR1TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenShortReadTwoP DSI LP LPGen Short Read TwoP + * @{ + */ +#define DSI_LP_GSR2P_DISABLE 0x00000000U +#define DSI_LP_GSR2P_ENABLE DSI_CMCR_GSR2TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPGenLongWrite DSI LP LPGen LongWrite + * @{ + */ +#define DSI_LP_GLW_DISABLE 0x00000000U +#define DSI_LP_GLW_ENABLE DSI_CMCR_GLWTX +/** + * @} + */ + +/** @defgroup DSI_LP_LPDcsShortWriteNoP DSI LP LPDcs Short Write NoP + * @{ + */ +#define DSI_LP_DSW0P_DISABLE 0x00000000U +#define DSI_LP_DSW0P_ENABLE DSI_CMCR_DSW0TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPDcsShortWriteOneP DSI LP LPDcs Short Write OneP + * @{ + */ +#define DSI_LP_DSW1P_DISABLE 0x00000000U +#define DSI_LP_DSW1P_ENABLE DSI_CMCR_DSW1TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPDcsShortReadNoP DSI LP LPDcs Short Read NoP + * @{ + */ +#define DSI_LP_DSR0P_DISABLE 0x00000000U +#define DSI_LP_DSR0P_ENABLE DSI_CMCR_DSR0TX +/** + * @} + */ + +/** @defgroup DSI_LP_LPDcsLongWrite DSI LP LPDcs Long Write + * @{ + */ +#define DSI_LP_DLW_DISABLE 0x00000000U +#define DSI_LP_DLW_ENABLE DSI_CMCR_DLWTX +/** + * @} + */ + +/** @defgroup DSI_LP_LPMaxReadPacket DSI LP LPMax Read Packet + * @{ + */ +#define DSI_LP_MRDP_DISABLE 0x00000000U +#define DSI_LP_MRDP_ENABLE DSI_CMCR_MRDPS +/** + * @} + */ + +/** @defgroup DSI_HS_PrespMode DSI HS Presp Mode + * @{ + */ +#define DSI_HS_PM_DISABLE 0x00000000U +#define DSI_HS_PM_ENABLE DSI_TCCR3_PM +/** + * @} + */ + + +/** @defgroup DSI_Automatic_Clk_Lane_Control DSI Automatic Clk Lane Control + * @{ + */ +#define DSI_AUTO_CLK_LANE_CTRL_DISABLE 0x00000000U +#define DSI_AUTO_CLK_LANE_CTRL_ENABLE DSI_CLCR_ACR +/** + * @} + */ + +/** @defgroup DSI_Number_Of_Lanes DSI Number Of Lanes + * @{ + */ +#define DSI_ONE_DATA_LANE 0U +#define DSI_TWO_DATA_LANES 1U +/** + * @} + */ + +/** @defgroup DSI_FlowControl DSI Flow Control + * @{ + */ +#define DSI_FLOW_CONTROL_CRC_RX DSI_PCR_CRCRXE +#define DSI_FLOW_CONTROL_ECC_RX DSI_PCR_ECCRXE +#define DSI_FLOW_CONTROL_BTA DSI_PCR_BTAE +#define DSI_FLOW_CONTROL_EOTP_RX DSI_PCR_ETRXE +#define DSI_FLOW_CONTROL_EOTP_TX DSI_PCR_ETTXE +#define DSI_FLOW_CONTROL_ALL (DSI_FLOW_CONTROL_CRC_RX | DSI_FLOW_CONTROL_ECC_RX | \ + DSI_FLOW_CONTROL_BTA | DSI_FLOW_CONTROL_EOTP_RX | \ + DSI_FLOW_CONTROL_EOTP_TX) +/** + * @} + */ + +/** @defgroup DSI_Color_Coding DSI Color Coding + * @{ + */ +#define DSI_RGB565 0x00000000U /*!< The values 0x00000001 and 0x00000002 can also be used for the RGB565 color mode configuration */ +#define DSI_RGB666 0x00000003U /*!< The value 0x00000004 can also be used for the RGB666 color mode configuration */ +#define DSI_RGB888 0x00000005U +/** + * @} + */ + +/** @defgroup DSI_LooselyPacked DSI Loosely Packed + * @{ + */ +#define DSI_LOOSELY_PACKED_ENABLE DSI_LCOLCR_LPE +#define DSI_LOOSELY_PACKED_DISABLE 0x00000000U +/** + * @} + */ + +/** @defgroup DSI_HSYNC_Polarity DSI HSYNC Polarity + * @{ + */ +#define DSI_HSYNC_ACTIVE_HIGH 0x00000000U +#define DSI_HSYNC_ACTIVE_LOW DSI_LPCR_HSP +/** + * @} + */ + +/** @defgroup DSI_VSYNC_Active_Polarity DSI VSYNC Active Polarity + * @{ + */ +#define DSI_VSYNC_ACTIVE_HIGH 0x00000000U +#define DSI_VSYNC_ACTIVE_LOW DSI_LPCR_VSP +/** + * @} + */ + +/** @defgroup DSI_DATA_ENABLE_Polarity DSI DATA ENABLE Polarity + * @{ + */ +#define DSI_DATA_ENABLE_ACTIVE_HIGH 0x00000000U +#define DSI_DATA_ENABLE_ACTIVE_LOW DSI_LPCR_DEP +/** + * @} + */ + +/** @defgroup DSI_PLL_IDF DSI PLL IDF + * @{ + */ +#define DSI_PLL_IN_DIV1 0x00000001U +#define DSI_PLL_IN_DIV2 0x00000002U +#define DSI_PLL_IN_DIV3 0x00000003U +#define DSI_PLL_IN_DIV4 0x00000004U +#define DSI_PLL_IN_DIV5 0x00000005U +#define DSI_PLL_IN_DIV6 0x00000006U +#define DSI_PLL_IN_DIV7 0x00000007U +/** + * @} + */ + +/** @defgroup DSI_PLL_ODF DSI PLL ODF + * @{ + */ +#define DSI_PLL_OUT_DIV1 0x00000000U +#define DSI_PLL_OUT_DIV2 0x00000001U +#define DSI_PLL_OUT_DIV4 0x00000002U +#define DSI_PLL_OUT_DIV8 0x00000003U +/** + * @} + */ + +/** @defgroup DSI_Flags DSI Flags + * @{ + */ +#define DSI_FLAG_TE DSI_WISR_TEIF +#define DSI_FLAG_ER DSI_WISR_ERIF +#define DSI_FLAG_BUSY DSI_WISR_BUSY +#define DSI_FLAG_PLLLS DSI_WISR_PLLLS +#define DSI_FLAG_PLLL DSI_WISR_PLLLIF +#define DSI_FLAG_PLLU DSI_WISR_PLLUIF +#define DSI_FLAG_RRS DSI_WISR_RRS +#define DSI_FLAG_RR DSI_WISR_RRIF +/** + * @} + */ + +/** @defgroup DSI_Interrupts DSI Interrupts + * @{ + */ +#define DSI_IT_TE DSI_WIER_TEIE +#define DSI_IT_ER DSI_WIER_ERIE +#define DSI_IT_PLLL DSI_WIER_PLLLIE +#define DSI_IT_PLLU DSI_WIER_PLLUIE +#define DSI_IT_RR DSI_WIER_RRIE +/** + * @} + */ + +/** @defgroup DSI_SHORT_WRITE_PKT_Data_Type DSI SHORT WRITE PKT Data Type + * @{ + */ +#define DSI_DCS_SHORT_PKT_WRITE_P0 0x00000005U /*!< DCS short write, no parameters */ +#define DSI_DCS_SHORT_PKT_WRITE_P1 0x00000015U /*!< DCS short write, one parameter */ +#define DSI_GEN_SHORT_PKT_WRITE_P0 0x00000003U /*!< Generic short write, no parameters */ +#define DSI_GEN_SHORT_PKT_WRITE_P1 0x00000013U /*!< Generic short write, one parameter */ +#define DSI_GEN_SHORT_PKT_WRITE_P2 0x00000023U /*!< Generic short write, two parameters */ +/** + * @} + */ + +/** @defgroup DSI_LONG_WRITE_PKT_Data_Type DSI LONG WRITE PKT Data Type + * @{ + */ +#define DSI_DCS_LONG_PKT_WRITE 0x00000039U /*!< DCS long write */ +#define DSI_GEN_LONG_PKT_WRITE 0x00000029U /*!< Generic long write */ +/** + * @} + */ + +/** @defgroup DSI_SHORT_READ_PKT_Data_Type DSI SHORT READ PKT Data Type + * @{ + */ +#define DSI_DCS_SHORT_PKT_READ 0x00000006U /*!< DCS short read */ +#define DSI_GEN_SHORT_PKT_READ_P0 0x00000004U /*!< Generic short read, no parameters */ +#define DSI_GEN_SHORT_PKT_READ_P1 0x00000014U /*!< Generic short read, one parameter */ +#define DSI_GEN_SHORT_PKT_READ_P2 0x00000024U /*!< Generic short read, two parameters */ +/** + * @} + */ + +/** @defgroup DSI_Error_Data_Type DSI Error Data Type + * @{ + */ +#define HAL_DSI_ERROR_NONE 0U +#define HAL_DSI_ERROR_ACK 0x00000001U /*!< acknowledge errors */ +#define HAL_DSI_ERROR_PHY 0x00000002U /*!< PHY related errors */ +#define HAL_DSI_ERROR_TX 0x00000004U /*!< transmission error */ +#define HAL_DSI_ERROR_RX 0x00000008U /*!< reception error */ +#define HAL_DSI_ERROR_ECC 0x00000010U /*!< ECC errors */ +#define HAL_DSI_ERROR_CRC 0x00000020U /*!< CRC error */ +#define HAL_DSI_ERROR_PSE 0x00000040U /*!< Packet Size error */ +#define HAL_DSI_ERROR_EOT 0x00000080U /*!< End Of Transmission error */ +#define HAL_DSI_ERROR_OVF 0x00000100U /*!< FIFO overflow error */ +#define HAL_DSI_ERROR_GEN 0x00000200U /*!< Generic FIFO related errors */ +/** + * @} + */ + +/** @defgroup DSI_Lane_Group DSI Lane Group + * @{ + */ +#define DSI_CLOCK_LANE 0x00000000U +#define DSI_DATA_LANES 0x00000001U +/** + * @} + */ + +/** @defgroup DSI_Communication_Delay DSI Communication Delay + * @{ + */ +#define DSI_SLEW_RATE_HSTX 0x00000000U +#define DSI_SLEW_RATE_LPTX 0x00000001U +#define DSI_HS_DELAY 0x00000002U +/** + * @} + */ + +/** @defgroup DSI_CustomLane DSI CustomLane + * @{ + */ +#define DSI_SWAP_LANE_PINS 0x00000000U +#define DSI_INVERT_HS_SIGNAL 0x00000001U +/** + * @} + */ + +/** @defgroup DSI_Lane_Select DSI Lane Select + * @{ + */ +#define DSI_CLK_LANE 0x00000000U +#define DSI_DATA_LANE0 0x00000001U +#define DSI_DATA_LANE1 0x00000002U +/** + * @} + */ + +/** @defgroup DSI_PHY_Timing DSI PHY Timing + * @{ + */ +#define DSI_TCLK_POST 0x00000000U +#define DSI_TLPX_CLK 0x00000001U +#define DSI_THS_EXIT 0x00000002U +#define DSI_TLPX_DATA 0x00000003U +#define DSI_THS_ZERO 0x00000004U +#define DSI_THS_TRAIL 0x00000005U +#define DSI_THS_PREPARE 0x00000006U +#define DSI_TCLK_ZERO 0x00000007U +#define DSI_TCLK_PREPARE 0x00000008U +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** + * @brief Reset DSI handle state. + * @param __HANDLE__: DSI handle + * @retval None + */ +#define __HAL_DSI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DSI_STATE_RESET) + +/** + * @brief Enables the DSI host. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_ENABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT((__HANDLE__)->Instance->CR, DSI_CR_EN);\ + /* Delay after an DSI Host enabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->CR, DSI_CR_EN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Disables the DSI host. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_DISABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + CLEAR_BIT((__HANDLE__)->Instance->CR, DSI_CR_EN);\ + /* Delay after an DSI Host disabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->CR, DSI_CR_EN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Enables the DSI wrapper. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_WRAPPER_ENABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT((__HANDLE__)->Instance->WCR, DSI_WCR_DSIEN);\ + /* Delay after an DSI warpper enabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WCR, DSI_WCR_DSIEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Disable the DSI wrapper. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_WRAPPER_DISABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + CLEAR_BIT((__HANDLE__)->Instance->WCR, DSI_WCR_DSIEN);\ + /* Delay after an DSI warpper disabling*/ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WCR, DSI_WCR_DSIEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Enables the DSI PLL. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_PLL_ENABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_PLLEN);\ + /* Delay after an DSI PLL enabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_PLLEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Disables the DSI PLL. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_PLL_DISABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + CLEAR_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_PLLEN);\ + /* Delay after an DSI PLL disabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_PLLEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Enables the DSI regulator. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_REG_ENABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + SET_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_REGEN);\ + /* Delay after an DSI regulator enabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_REGEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Disables the DSI regulator. + * @param __HANDLE__: DSI handle + * @retval None. + */ +#define __HAL_DSI_REG_DISABLE(__HANDLE__) do { \ + __IO uint32_t tmpreg = 0x00U; \ + CLEAR_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_REGEN);\ + /* Delay after an DSI regulator disabling */ \ + tmpreg = READ_BIT((__HANDLE__)->Instance->WRPCR, DSI_WRPCR_REGEN);\ + UNUSED(tmpreg); \ + }while(0U) + +/** + * @brief Get the DSI pending flags. + * @param __HANDLE__: DSI handle. + * @param __FLAG__: Get the specified flag. + * This parameter can be any combination of the following values: + * @arg DSI_FLAG_TE : Tearing Effect Interrupt Flag + * @arg DSI_FLAG_ER : End of Refresh Interrupt Flag + * @arg DSI_FLAG_BUSY : Busy Flag + * @arg DSI_FLAG_PLLLS: PLL Lock Status + * @arg DSI_FLAG_PLLL : PLL Lock Interrupt Flag + * @arg DSI_FLAG_PLLU : PLL Unlock Interrupt Flag + * @arg DSI_FLAG_RRS : Regulator Ready Flag + * @arg DSI_FLAG_RR : Regulator Ready Interrupt Flag + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_DSI_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->WISR & (__FLAG__)) + +/** + * @brief Clears the DSI pending flags. + * @param __HANDLE__: DSI handle. + * @param __FLAG__: specifies the flag to clear. + * This parameter can be any combination of the following values: + * @arg DSI_FLAG_TE : Tearing Effect Interrupt Flag + * @arg DSI_FLAG_ER : End of Refresh Interrupt Flag + * @arg DSI_FLAG_PLLL : PLL Lock Interrupt Flag + * @arg DSI_FLAG_PLLU : PLL Unlock Interrupt Flag + * @arg DSI_FLAG_RR : Regulator Ready Interrupt Flag + * @retval None + */ +#define __HAL_DSI_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->WIFCR = (__FLAG__)) + +/** + * @brief Enables the specified DSI interrupts. + * @param __HANDLE__: DSI handle. + * @param __INTERRUPT__: specifies the DSI interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg DSI_IT_TE : Tearing Effect Interrupt + * @arg DSI_IT_ER : End of Refresh Interrupt + * @arg DSI_IT_PLLL: PLL Lock Interrupt + * @arg DSI_IT_PLLU: PLL Unlock Interrupt + * @arg DSI_IT_RR : Regulator Ready Interrupt + * @retval None + */ +#define __HAL_DSI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->WIER |= (__INTERRUPT__)) + +/** + * @brief Disables the specified DSI interrupts. + * @param __HANDLE__: DSI handle + * @param __INTERRUPT__: specifies the DSI interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg DSI_IT_TE : Tearing Effect Interrupt + * @arg DSI_IT_ER : End of Refresh Interrupt + * @arg DSI_IT_PLLL: PLL Lock Interrupt + * @arg DSI_IT_PLLU: PLL Unlock Interrupt + * @arg DSI_IT_RR : Regulator Ready Interrupt + * @retval None + */ +#define __HAL_DSI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->WIER &= ~(__INTERRUPT__)) + +/** + * @brief Checks whether the specified DSI interrupt source is enabled or not. + * @param __HANDLE__: DSI handle + * @param __INTERRUPT__: specifies the DSI interrupt source to check. + * This parameter can be one of the following values: + * @arg DSI_IT_TE : Tearing Effect Interrupt + * @arg DSI_IT_ER : End of Refresh Interrupt + * @arg DSI_IT_PLLL: PLL Lock Interrupt + * @arg DSI_IT_PLLU: PLL Unlock Interrupt + * @arg DSI_IT_RR : Regulator Ready Interrupt + * @retval The state of INTERRUPT (SET or RESET). + */ +#define __HAL_DSI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->WIER & (__INTERRUPT__)) + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup DSI_Exported_Functions DSI Exported Functions + * @{ + */ +HAL_StatusTypeDef HAL_DSI_Init(DSI_HandleTypeDef *hdsi, DSI_PLLInitTypeDef *PLLInit); +HAL_StatusTypeDef HAL_DSI_DeInit(DSI_HandleTypeDef *hdsi); +void HAL_DSI_MspInit(DSI_HandleTypeDef *hdsi); +void HAL_DSI_MspDeInit(DSI_HandleTypeDef *hdsi); + +void HAL_DSI_IRQHandler(DSI_HandleTypeDef *hdsi); +void HAL_DSI_TearingEffectCallback(DSI_HandleTypeDef *hdsi); +void HAL_DSI_EndOfRefreshCallback(DSI_HandleTypeDef *hdsi); +void HAL_DSI_ErrorCallback(DSI_HandleTypeDef *hdsi); + +HAL_StatusTypeDef HAL_DSI_SetGenericVCID(DSI_HandleTypeDef *hdsi, uint32_t VirtualChannelID); +HAL_StatusTypeDef HAL_DSI_ConfigVideoMode(DSI_HandleTypeDef *hdsi, DSI_VidCfgTypeDef *VidCfg); +HAL_StatusTypeDef HAL_DSI_ConfigAdaptedCommandMode(DSI_HandleTypeDef *hdsi, DSI_CmdCfgTypeDef *CmdCfg); +HAL_StatusTypeDef HAL_DSI_ConfigCommand(DSI_HandleTypeDef *hdsi, DSI_LPCmdTypeDef *LPCmd); +HAL_StatusTypeDef HAL_DSI_ConfigFlowControl(DSI_HandleTypeDef *hdsi, uint32_t FlowControl); +HAL_StatusTypeDef HAL_DSI_ConfigPhyTimer(DSI_HandleTypeDef *hdsi, DSI_PHY_TimerTypeDef *PhyTimers); +HAL_StatusTypeDef HAL_DSI_ConfigHostTimeouts(DSI_HandleTypeDef *hdsi, DSI_HOST_TimeoutTypeDef *HostTimeouts); +HAL_StatusTypeDef HAL_DSI_Start(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_Stop(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_Refresh(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_ColorMode(DSI_HandleTypeDef *hdsi, uint32_t ColorMode); +HAL_StatusTypeDef HAL_DSI_Shutdown(DSI_HandleTypeDef *hdsi, uint32_t Shutdown); +HAL_StatusTypeDef HAL_DSI_ShortWrite(DSI_HandleTypeDef *hdsi, + uint32_t ChannelID, + uint32_t Mode, + uint32_t Param1, + uint32_t Param2); +HAL_StatusTypeDef HAL_DSI_LongWrite(DSI_HandleTypeDef *hdsi, + uint32_t ChannelID, + uint32_t Mode, + uint32_t NbParams, + uint32_t Param1, + uint8_t* ParametersTable); +HAL_StatusTypeDef HAL_DSI_Read(DSI_HandleTypeDef *hdsi, + uint32_t ChannelNbr, + uint8_t* Array, + uint32_t Size, + uint32_t Mode, + uint32_t DCSCmd, + uint8_t* ParametersTable); +HAL_StatusTypeDef HAL_DSI_EnterULPMData(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_ExitULPMData(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_EnterULPM(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_ExitULPM(DSI_HandleTypeDef *hdsi); + +HAL_StatusTypeDef HAL_DSI_PatternGeneratorStart(DSI_HandleTypeDef *hdsi, uint32_t Mode, uint32_t Orientation); +HAL_StatusTypeDef HAL_DSI_PatternGeneratorStop(DSI_HandleTypeDef *hdsi); + +HAL_StatusTypeDef HAL_DSI_SetSlewRateAndDelayTuning(DSI_HandleTypeDef *hdsi, uint32_t CommDelay, uint32_t Lane, uint32_t Value); +HAL_StatusTypeDef HAL_DSI_SetLowPowerRXFilter(DSI_HandleTypeDef *hdsi, uint32_t Frequency); +HAL_StatusTypeDef HAL_DSI_SetSDD(DSI_HandleTypeDef *hdsi, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_SetLanePinsConfiguration(DSI_HandleTypeDef *hdsi, uint32_t CustomLane, uint32_t Lane, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_SetPHYTimings(DSI_HandleTypeDef *hdsi, uint32_t Timing, FunctionalState State, uint32_t Value); +HAL_StatusTypeDef HAL_DSI_ForceTXStopMode(DSI_HandleTypeDef *hdsi, uint32_t Lane, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_ForceRXLowPower(DSI_HandleTypeDef *hdsi, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_ForceDataLanesInRX(DSI_HandleTypeDef *hdsi, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_SetPullDown(DSI_HandleTypeDef *hdsi, FunctionalState State); +HAL_StatusTypeDef HAL_DSI_SetContentionDetectionOff(DSI_HandleTypeDef *hdsi, FunctionalState State); + +uint32_t HAL_DSI_GetError(DSI_HandleTypeDef *hdsi); +HAL_StatusTypeDef HAL_DSI_ConfigErrorMonitor(DSI_HandleTypeDef *hdsi, uint32_t ActiveErrors); +HAL_DSI_StateTypeDef HAL_DSI_GetState(DSI_HandleTypeDef *hdsi); +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/** @defgroup DSI_Private_Types DSI Private Types + * @{ + */ + +/** + * @} + */ + +/* Private defines -----------------------------------------------------------*/ +/** @defgroup DSI_Private_Defines DSI Private Defines + * @{ + */ + +/** + * @} + */ + +/* Private variables ---------------------------------------------------------*/ +/** @defgroup DSI_Private_Variables DSI Private Variables + * @{ + */ + +/** + * @} + */ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup DSI_Private_Constants DSI Private Constants + * @{ + */ +#define DSI_MAX_RETURN_PKT_SIZE (0x00000037U) /*!< Maximum return packet configuration */ +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup DSI_Private_Macros DSI Private Macros + * @{ + */ +#define IS_DSI_PLL_NDIV(NDIV) ((10U <= (NDIV)) && ((NDIV) <= 125U)) +#define IS_DSI_PLL_IDF(IDF) (((IDF) == DSI_PLL_IN_DIV1) || \ + ((IDF) == DSI_PLL_IN_DIV2) || \ + ((IDF) == DSI_PLL_IN_DIV3) || \ + ((IDF) == DSI_PLL_IN_DIV4) || \ + ((IDF) == DSI_PLL_IN_DIV5) || \ + ((IDF) == DSI_PLL_IN_DIV6) || \ + ((IDF) == DSI_PLL_IN_DIV7)) +#define IS_DSI_PLL_ODF(ODF) (((ODF) == DSI_PLL_OUT_DIV1) || \ + ((ODF) == DSI_PLL_OUT_DIV2) || \ + ((ODF) == DSI_PLL_OUT_DIV4) || \ + ((ODF) == DSI_PLL_OUT_DIV8)) +#define IS_DSI_AUTO_CLKLANE_CONTROL(AutoClkLane) (((AutoClkLane) == DSI_AUTO_CLK_LANE_CTRL_DISABLE) || ((AutoClkLane) == DSI_AUTO_CLK_LANE_CTRL_ENABLE)) +#define IS_DSI_NUMBER_OF_LANES(NumberOfLanes) (((NumberOfLanes) == DSI_ONE_DATA_LANE) || ((NumberOfLanes) == DSI_TWO_DATA_LANES)) +#define IS_DSI_FLOW_CONTROL(FlowControl) (((FlowControl) | DSI_FLOW_CONTROL_ALL) == DSI_FLOW_CONTROL_ALL) +#define IS_DSI_COLOR_CODING(ColorCoding) ((ColorCoding) <= 5U) +#define IS_DSI_LOOSELY_PACKED(LooselyPacked) (((LooselyPacked) == DSI_LOOSELY_PACKED_ENABLE) || ((LooselyPacked) == DSI_LOOSELY_PACKED_DISABLE)) +#define IS_DSI_DE_POLARITY(DataEnable) (((DataEnable) == DSI_DATA_ENABLE_ACTIVE_HIGH) || ((DataEnable) == DSI_DATA_ENABLE_ACTIVE_LOW)) +#define IS_DSI_VSYNC_POLARITY(VSYNC) (((VSYNC) == DSI_VSYNC_ACTIVE_HIGH) || ((VSYNC) == DSI_VSYNC_ACTIVE_LOW)) +#define IS_DSI_HSYNC_POLARITY(HSYNC) (((HSYNC) == DSI_HSYNC_ACTIVE_HIGH) || ((HSYNC) == DSI_HSYNC_ACTIVE_LOW)) +#define IS_DSI_VIDEO_MODE_TYPE(VideoModeType) (((VideoModeType) == DSI_VID_MODE_NB_PULSES) || \ + ((VideoModeType) == DSI_VID_MODE_NB_EVENTS) || \ + ((VideoModeType) == DSI_VID_MODE_BURST)) +#define IS_DSI_COLOR_MODE(ColorMode) (((ColorMode) == DSI_COLOR_MODE_FULL) || ((ColorMode) == DSI_COLOR_MODE_EIGHT)) +#define IS_DSI_SHUT_DOWN(ShutDown) (((ShutDown) == DSI_DISPLAY_ON) || ((ShutDown) == DSI_DISPLAY_OFF)) +#define IS_DSI_LP_COMMAND(LPCommand) (((LPCommand) == DSI_LP_COMMAND_DISABLE) || ((LPCommand) == DSI_LP_COMMAND_ENABLE)) +#define IS_DSI_LP_HFP(LPHFP) (((LPHFP) == DSI_LP_HFP_DISABLE) || ((LPHFP) == DSI_LP_HFP_ENABLE)) +#define IS_DSI_LP_HBP(LPHBP) (((LPHBP) == DSI_LP_HBP_DISABLE) || ((LPHBP) == DSI_LP_HBP_ENABLE)) +#define IS_DSI_LP_VACTIVE(LPVActive) (((LPVActive) == DSI_LP_VACT_DISABLE) || ((LPVActive) == DSI_LP_VACT_ENABLE)) +#define IS_DSI_LP_VFP(LPVFP) (((LPVFP) == DSI_LP_VFP_DISABLE) || ((LPVFP) == DSI_LP_VFP_ENABLE)) +#define IS_DSI_LP_VBP(LPVBP) (((LPVBP) == DSI_LP_VBP_DISABLE) || ((LPVBP) == DSI_LP_VBP_ENABLE)) +#define IS_DSI_LP_VSYNC(LPVSYNC) (((LPVSYNC) == DSI_LP_VSYNC_DISABLE) || ((LPVSYNC) == DSI_LP_VSYNC_ENABLE)) +#define IS_DSI_FBTAA(FrameBTAAcknowledge) (((FrameBTAAcknowledge) == DSI_FBTAA_DISABLE) || ((FrameBTAAcknowledge) == DSI_FBTAA_ENABLE)) +#define IS_DSI_TE_SOURCE(TESource) (((TESource) == DSI_TE_DSILINK) || ((TESource) == DSI_TE_EXTERNAL)) +#define IS_DSI_TE_POLARITY(TEPolarity) (((TEPolarity) == DSI_TE_RISING_EDGE) || ((TEPolarity) == DSI_TE_FALLING_EDGE)) +#define IS_DSI_AUTOMATIC_REFRESH(AutomaticRefresh) (((AutomaticRefresh) == DSI_AR_DISABLE) || ((AutomaticRefresh) == DSI_AR_ENABLE)) +#define IS_DSI_VS_POLARITY(VSPolarity) (((VSPolarity) == DSI_VSYNC_FALLING) || ((VSPolarity) == DSI_VSYNC_RISING)) +#define IS_DSI_TE_ACK_REQUEST(TEAcknowledgeRequest) (((TEAcknowledgeRequest) == DSI_TE_ACKNOWLEDGE_DISABLE) || ((TEAcknowledgeRequest) == DSI_TE_ACKNOWLEDGE_ENABLE)) +#define IS_DSI_ACK_REQUEST(AcknowledgeRequest) (((AcknowledgeRequest) == DSI_ACKNOWLEDGE_DISABLE) || ((AcknowledgeRequest) == DSI_ACKNOWLEDGE_ENABLE)) +#define IS_DSI_LP_GSW0P(LP_GSW0P) (((LP_GSW0P) == DSI_LP_GSW0P_DISABLE) || ((LP_GSW0P) == DSI_LP_GSW0P_ENABLE)) +#define IS_DSI_LP_GSW1P(LP_GSW1P) (((LP_GSW1P) == DSI_LP_GSW1P_DISABLE) || ((LP_GSW1P) == DSI_LP_GSW1P_ENABLE)) +#define IS_DSI_LP_GSW2P(LP_GSW2P) (((LP_GSW2P) == DSI_LP_GSW2P_DISABLE) || ((LP_GSW2P) == DSI_LP_GSW2P_ENABLE)) +#define IS_DSI_LP_GSR0P(LP_GSR0P) (((LP_GSR0P) == DSI_LP_GSR0P_DISABLE) || ((LP_GSR0P) == DSI_LP_GSR0P_ENABLE)) +#define IS_DSI_LP_GSR1P(LP_GSR1P) (((LP_GSR1P) == DSI_LP_GSR1P_DISABLE) || ((LP_GSR1P) == DSI_LP_GSR1P_ENABLE)) +#define IS_DSI_LP_GSR2P(LP_GSR2P) (((LP_GSR2P) == DSI_LP_GSR2P_DISABLE) || ((LP_GSR2P) == DSI_LP_GSR2P_ENABLE)) +#define IS_DSI_LP_GLW(LP_GLW) (((LP_GLW) == DSI_LP_GLW_DISABLE) || ((LP_GLW) == DSI_LP_GLW_ENABLE)) +#define IS_DSI_LP_DSW0P(LP_DSW0P) (((LP_DSW0P) == DSI_LP_DSW0P_DISABLE) || ((LP_DSW0P) == DSI_LP_DSW0P_ENABLE)) +#define IS_DSI_LP_DSW1P(LP_DSW1P) (((LP_DSW1P) == DSI_LP_DSW1P_DISABLE) || ((LP_DSW1P) == DSI_LP_DSW1P_ENABLE)) +#define IS_DSI_LP_DSR0P(LP_DSR0P) (((LP_DSR0P) == DSI_LP_DSR0P_DISABLE) || ((LP_DSR0P) == DSI_LP_DSR0P_ENABLE)) +#define IS_DSI_LP_DLW(LP_DLW) (((LP_DLW) == DSI_LP_DLW_DISABLE) || ((LP_DLW) == DSI_LP_DLW_ENABLE)) +#define IS_DSI_LP_MRDP(LP_MRDP) (((LP_MRDP) == DSI_LP_MRDP_DISABLE) || ((LP_MRDP) == DSI_LP_MRDP_ENABLE)) +#define IS_DSI_SHORT_WRITE_PACKET_TYPE(MODE) (((MODE) == DSI_DCS_SHORT_PKT_WRITE_P0) || \ + ((MODE) == DSI_DCS_SHORT_PKT_WRITE_P1) || \ + ((MODE) == DSI_GEN_SHORT_PKT_WRITE_P0) || \ + ((MODE) == DSI_GEN_SHORT_PKT_WRITE_P1) || \ + ((MODE) == DSI_GEN_SHORT_PKT_WRITE_P2)) +#define IS_DSI_LONG_WRITE_PACKET_TYPE(MODE) (((MODE) == DSI_DCS_LONG_PKT_WRITE) || \ + ((MODE) == DSI_GEN_LONG_PKT_WRITE)) +#define IS_DSI_READ_PACKET_TYPE(MODE) (((MODE) == DSI_DCS_SHORT_PKT_READ) || \ + ((MODE) == DSI_GEN_SHORT_PKT_READ_P0) || \ + ((MODE) == DSI_GEN_SHORT_PKT_READ_P1) || \ + ((MODE) == DSI_GEN_SHORT_PKT_READ_P2)) +#define IS_DSI_COMMUNICATION_DELAY(CommDelay) (((CommDelay) == DSI_SLEW_RATE_HSTX) || ((CommDelay) == DSI_SLEW_RATE_LPTX) || ((CommDelay) == DSI_HS_DELAY)) +#define IS_DSI_LANE_GROUP(Lane) (((Lane) == DSI_CLOCK_LANE) || ((Lane) == DSI_DATA_LANES)) +#define IS_DSI_CUSTOM_LANE(CustomLane) (((CustomLane) == DSI_SWAP_LANE_PINS) || ((CustomLane) == DSI_INVERT_HS_SIGNAL)) +#define IS_DSI_LANE(Lane) (((Lane) == DSI_CLOCK_LANE) || ((Lane) == DSI_DATA_LANE0) || ((Lane) == DSI_DATA_LANE1)) +#define IS_DSI_PHY_TIMING(Timing) (((Timing) == DSI_TCLK_POST ) || \ + ((Timing) == DSI_TLPX_CLK ) || \ + ((Timing) == DSI_THS_EXIT ) || \ + ((Timing) == DSI_TLPX_DATA ) || \ + ((Timing) == DSI_THS_ZERO ) || \ + ((Timing) == DSI_THS_TRAIL ) || \ + ((Timing) == DSI_THS_PREPARE ) || \ + ((Timing) == DSI_TCLK_ZERO ) || \ + ((Timing) == DSI_TCLK_PREPARE)) + +/** + * @} + */ + +/* Private functions prototypes ----------------------------------------------*/ +/** @defgroup DSI_Private_Functions_Prototypes DSI Private Functions Prototypes + * @{ + */ + +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup DSI_Private_Functions DSI Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* DSI */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_DSI_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.c index 7f385889cc..f3fd43776a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_firewall.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief FIREWALL HAL module driver. * This file provides firmware functions to manage the Firewall * Peripheral initialization and enabling. @@ -11,19 +9,19 @@ * @verbatim =============================================================================== - ##### How to use this driver ##### + ##### How to use this driver ##### =============================================================================== [..] The FIREWALL HAL driver can be used as follows: - + (#) Declare a FIREWALL_InitTypeDef initialization structure. - + (#) Resort to HAL_FIREWALL_Config() API to initialize the Firewall (#) Enable the FIREWALL in calling HAL_FIREWALL_EnableFirewall() API - + (#) To ensure that any code executed outside the protected segment closes the - FIREWALL, the user must set the flag FIREWALL_PRE_ARM_SET in calling + FIREWALL, the user must set the flag FIREWALL_PRE_ARM_SET in calling __HAL_FIREWALL_PREARM_ENABLE() macro if called within a protected code segment or HAL_FIREWALL_EnablePreArmFlag() API if called outside of protected code segment @@ -58,7 +56,7 @@ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - ****************************************************************************** + ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ @@ -68,12 +66,12 @@ * @{ */ -/** @defgroup FIREWALL FIREWALL +/** @defgroup FIREWALL FIREWALL * @brief HAL FIREWALL module driver * @{ */ #ifdef HAL_FIREWALL_MODULE_ENABLED - + /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ @@ -86,27 +84,27 @@ * @{ */ -/** @defgroup FIREWALL_Exported_Functions_Group1 Initialization Functions - * @brief Initialization and Configuration Functions +/** @defgroup FIREWALL_Exported_Functions_Group1 Initialization Functions + * @brief Initialization and Configuration Functions * -@verbatim +@verbatim =============================================================================== ##### Initialization and Configuration functions ##### =============================================================================== [..] This subsection provides the functions allowing to initialize the Firewall. - Initialization is done by HAL_FIREWALL_Config(): + Initialization is done by HAL_FIREWALL_Config(): (+) Enable the Firewall clock thru __HAL_RCC_FIREWALL_CLK_ENABLE() macro. - + (+) Set the protected code segment address start and length. - - (+) Set the protected non-volatile and/or volatile data segments - address starts and lengths if applicable. - + + (+) Set the protected non-volatile and/or volatile data segments + address starts and lengths if applicable. + (+) Set the volatile data segment execution and sharing status. - - (+) Length must be set to 0 for an unprotected segment. + + (+) Length must be set to 0 for an unprotected segment. @endverbatim * @{ @@ -115,7 +113,7 @@ /** * @brief Initialize the Firewall according to the FIREWALL_InitTypeDef structure parameters. * @param fw_init: Firewall initialization structure - * @note The API returns HAL_ERROR if the Firewall is already enabled. + * @note The API returns HAL_ERROR if the Firewall is already enabled. * @retval HAL status */ HAL_StatusTypeDef HAL_FIREWALL_Config(FIREWALL_InitTypeDef * fw_init) @@ -125,7 +123,7 @@ HAL_StatusTypeDef HAL_FIREWALL_Config(FIREWALL_InitTypeDef * fw_init) { return HAL_ERROR; } - + /* Enable Firewall clock */ __HAL_RCC_FIREWALL_CLK_ENABLE(); @@ -134,53 +132,58 @@ HAL_StatusTypeDef HAL_FIREWALL_Config(FIREWALL_InitTypeDef * fw_init) { return HAL_ERROR; } - + /* Check Firewall configuration addresses and lengths when segment is protected */ /* Code segment */ if (fw_init->CodeSegmentLength != 0) { assert_param(IS_FIREWALL_CODE_SEGMENT_ADDRESS(fw_init->CodeSegmentStartAddress)); - assert_param(IS_FIREWALL_CODE_SEGMENT_LENGTH(fw_init->CodeSegmentStartAddress, fw_init->CodeSegmentLength)); + assert_param(IS_FIREWALL_CODE_SEGMENT_LENGTH(fw_init->CodeSegmentStartAddress, fw_init->CodeSegmentLength)); + /* Make sure that NonVDataSegmentLength is properly set to prevent code segment access */ + if (fw_init->NonVDataSegmentLength < 0x100) + { + return HAL_ERROR; + } } /* Non volatile data segment */ if (fw_init->NonVDataSegmentLength != 0) { assert_param(IS_FIREWALL_NONVOLATILEDATA_SEGMENT_ADDRESS(fw_init->NonVDataSegmentStartAddress)); - assert_param(IS_FIREWALL_NONVOLATILEDATA_SEGMENT_LENGTH(fw_init->NonVDataSegmentStartAddress, fw_init->NonVDataSegmentLength)); + assert_param(IS_FIREWALL_NONVOLATILEDATA_SEGMENT_LENGTH(fw_init->NonVDataSegmentStartAddress, fw_init->NonVDataSegmentLength)); } /* Volatile data segment */ if (fw_init->VDataSegmentLength != 0) { assert_param(IS_FIREWALL_VOLATILEDATA_SEGMENT_ADDRESS(fw_init->VDataSegmentStartAddress)); - assert_param(IS_FIREWALL_VOLATILEDATA_SEGMENT_LENGTH(fw_init->VDataSegmentStartAddress, fw_init->VDataSegmentLength)); + assert_param(IS_FIREWALL_VOLATILEDATA_SEGMENT_LENGTH(fw_init->VDataSegmentStartAddress, fw_init->VDataSegmentLength)); } - + /* Check Firewall Configuration Register parameters */ assert_param(IS_FIREWALL_VOLATILEDATA_EXECUTE(fw_init->VolatileDataExecution)); assert_param(IS_FIREWALL_VOLATILEDATA_SHARE(fw_init->VolatileDataShared)); - - + + /* Configuration */ - + /* Protected code segment start address configuration */ WRITE_REG(FIREWALL->CSSA, (FW_CSSA_ADD & fw_init->CodeSegmentStartAddress)); /* Protected code segment length configuration */ WRITE_REG(FIREWALL->CSL, (FW_CSL_LENG & fw_init->CodeSegmentLength)); - + /* Protected non volatile data segment start address configuration */ WRITE_REG(FIREWALL->NVDSSA, (FW_NVDSSA_ADD & fw_init->NonVDataSegmentStartAddress)); /* Protected non volatile data segment length configuration */ WRITE_REG(FIREWALL->NVDSL, (FW_NVDSL_LENG & fw_init->NonVDataSegmentLength)); - + /* Protected volatile data segment start address configuration */ WRITE_REG(FIREWALL->VDSSA, (FW_VDSSA_ADD & fw_init->VDataSegmentStartAddress)); /* Protected volatile data segment length configuration */ - WRITE_REG(FIREWALL->VDSL, (FW_VDSL_LENG & fw_init->VDataSegmentLength)); - + WRITE_REG(FIREWALL->VDSL, (FW_VDSL_LENG & fw_init->VDataSegmentLength)); + /* Set Firewall Configuration Register VDE and VDS bits - (volatile data execution and shared configuration) */ + (volatile data execution and shared configuration) */ MODIFY_REG(FIREWALL->CR, FW_CR_VDS|FW_CR_VDE, fw_init->VolatileDataExecution|fw_init->VolatileDataShared); - + return HAL_OK; } @@ -189,71 +192,71 @@ HAL_StatusTypeDef HAL_FIREWALL_Config(FIREWALL_InitTypeDef * fw_init) * @param fw_config: Firewall configuration, type is same as initialization structure * @note This API can't be executed inside a code area protected by the Firewall * when the Firewall is enabled - * @note If NVDSL register is different from 0, that is, if the non volatile data segment - * is defined, this API can't be executed when the Firewall is enabled. - * @note User should resort to __HAL_FIREWALL_GET_PREARM() macro to retrieve FPA bit status + * @note If NVDSL register is different from 0, that is, if the non volatile data segment + * is defined, this API can't be executed when the Firewall is enabled. + * @note User should resort to __HAL_FIREWALL_GET_PREARM() macro to retrieve FPA bit status * @retval None */ void HAL_FIREWALL_GetConfig(FIREWALL_InitTypeDef * fw_config) { - /* Enable Firewall clock, in case no Firewall configuration has been carried + /* Enable Firewall clock, in case no Firewall configuration has been carried out up to this point */ __HAL_RCC_FIREWALL_CLK_ENABLE(); /* Retrieve code segment protection setting */ fw_config->CodeSegmentStartAddress = (READ_REG(FIREWALL->CSSA) & FW_CSSA_ADD); fw_config->CodeSegmentLength = (READ_REG(FIREWALL->CSL) & FW_CSL_LENG); - + /* Retrieve non volatile data segment protection setting */ fw_config->NonVDataSegmentStartAddress = (READ_REG(FIREWALL->NVDSSA) & FW_NVDSSA_ADD); fw_config->NonVDataSegmentLength = (READ_REG(FIREWALL->NVDSL) & FW_NVDSL_LENG); - + /* Retrieve volatile data segment protection setting */ fw_config->VDataSegmentStartAddress = (READ_REG(FIREWALL->VDSSA) & FW_VDSSA_ADD); - fw_config->VDataSegmentLength = (READ_REG(FIREWALL->VDSL) & FW_VDSL_LENG); - + fw_config->VDataSegmentLength = (READ_REG(FIREWALL->VDSL) & FW_VDSL_LENG); + /* Retrieve volatile data execution setting */ fw_config->VolatileDataExecution = (READ_REG(FIREWALL->CR) & FW_CR_VDE); - + /* Retrieve volatile data shared setting */ fw_config->VolatileDataShared = (READ_REG(FIREWALL->CR) & FW_CR_VDS); - + return; } /** - * @brief Enable FIREWALL. + * @brief Enable FIREWALL. * @note Firewall is enabled in clearing FWDIS bit of SYSCFG CFGR1 register. - * Once enabled, the Firewall cannot be disabled by software. Only a - * system reset can set again FWDIS bit. + * Once enabled, the Firewall cannot be disabled by software. Only a + * system reset can set again FWDIS bit. * @retval None */ void HAL_FIREWALL_EnableFirewall(void) { /* Clears FWDIS bit of SYSCFG CFGR1 register */ CLEAR_BIT(SYSCFG->CFGR1, SYSCFG_CFGR1_FWDIS); - + } /** - * @brief Enable FIREWALL pre arm. - * @note When FPA bit is set, any code executed outside the protected segment - * will close the Firewall. + * @brief Enable FIREWALL pre arm. + * @note When FPA bit is set, any code executed outside the protected segment + * will close the Firewall. * @note This API provides the same service as __HAL_FIREWALL_PREARM_ENABLE() macro - * but can't be executed inside a code area protected by the Firewall. - * @note When the Firewall is disabled, user can resort to HAL_FIREWALL_EnablePreArmFlag() API any time. - * @note When the Firewall is enabled and NVDSL register is equal to 0 (that is, + * but can't be executed inside a code area protected by the Firewall. + * @note When the Firewall is disabled, user can resort to HAL_FIREWALL_EnablePreArmFlag() API any time. + * @note When the Firewall is enabled and NVDSL register is equal to 0 (that is, * when the non volatile data segment is not defined), * ** this API can be executed when the Firewall is closed - * ** when the Firewall is opened, user should resort to + * ** when the Firewall is opened, user should resort to * __HAL_FIREWALL_PREARM_ENABLE() macro instead * @note When the Firewall is enabled and NVDSL register is different from 0 * (that is, when the non volatile data segment is defined) - * ** FW_CR register can be accessed only when the Firewall is opened: - * user should resort to __HAL_FIREWALL_PREARM_ENABLE() macro instead. + * ** FW_CR register can be accessed only when the Firewall is opened: + * user should resort to __HAL_FIREWALL_PREARM_ENABLE() macro instead. * @retval None */ void HAL_FIREWALL_EnablePreArmFlag(void) @@ -265,21 +268,21 @@ void HAL_FIREWALL_EnablePreArmFlag(void) /** * @brief Disable FIREWALL pre arm. - * @note When FPA bit is reset, any code executed outside the protected segment + * @note When FPA bit is reset, any code executed outside the protected segment * when the Firewall is opened will generate a system reset. * @note This API provides the same service as __HAL_FIREWALL_PREARM_DISABLE() macro * but can't be executed inside a code area protected by the Firewall. - * @note When the Firewall is disabled, user can resort to HAL_FIREWALL_EnablePreArmFlag() API any time. - * @note When the Firewall is enabled and NVDSL register is equal to 0 (that is, + * @note When the Firewall is disabled, user can resort to HAL_FIREWALL_EnablePreArmFlag() API any time. + * @note When the Firewall is enabled and NVDSL register is equal to 0 (that is, * when the non volatile data segment is not defined), * ** this API can be executed when the Firewall is closed - * ** when the Firewall is opened, user should resort to + * ** when the Firewall is opened, user should resort to * __HAL_FIREWALL_PREARM_DISABLE() macro instead * @note When the Firewall is enabled and NVDSL register is different from 0 * (that is, when the non volatile data segment is defined) - * ** FW_CR register can be accessed only when the Firewall is opened: - * user should resort to __HAL_FIREWALL_PREARM_DISABLE() macro instead. - + * ** FW_CR register can be accessed only when the Firewall is opened: + * user should resort to __HAL_FIREWALL_PREARM_DISABLE() macro instead. + * @retval None */ void HAL_FIREWALL_DisablePreArmFlag(void) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.h index 77add8b1dc..00954474b9 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_firewall.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_firewall.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of FIREWALL HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.c index d95af67b92..ec118ec837 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief FLASH HAL module driver. * This file provides firmware functions to manage the following * functionalities of the internal FLASH memory: @@ -120,7 +118,11 @@ /* Private typedef -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define FLASH_NB_DOUBLE_WORDS_IN_ROW 64 +#else #define FLASH_NB_DOUBLE_WORDS_IN_ROW 32 +#endif /* Private macros ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /** @defgroup FLASH_Private_Variables FLASH Private Variables @@ -320,7 +322,8 @@ void HAL_FLASH_IRQHandler(void) /* If the operation is completed, disable the PG, PNB, MER1, MER2 and PER Bit */ CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_MER1 | FLASH_CR_PER | FLASH_CR_PNB)); #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) CLEAR_BIT(FLASH->CR, FLASH_CR_MER2); #endif @@ -337,7 +340,8 @@ void HAL_FLASH_IRQHandler(void) (__HAL_FLASH_GET_FLAG(FLASH_FLAG_MISERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_FASTERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) || #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PEMPTY))) #else (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD))) @@ -500,18 +504,22 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) */ HAL_StatusTypeDef HAL_FLASH_Unlock(void) { + HAL_StatusTypeDef status = HAL_OK; + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) { /* Authorize the FLASH Registers access */ WRITE_REG(FLASH->KEYR, FLASH_KEY1); WRITE_REG(FLASH->KEYR, FLASH_KEY2); - } - else - { - return HAL_ERROR; + + /* Verify Flash is unlocked */ + if(READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) + { + status = HAL_ERROR; + } } - return HAL_OK; + return status; } /** @@ -642,13 +650,13 @@ HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) Even if the FLASH operation fails, the BUSY flag will be reset and an error flag will be set */ - uint32_t timeout = HAL_GetTick() + Timeout; + uint32_t tickstart = HAL_GetTick(); while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) { if(Timeout != HAL_MAX_DELAY) { - if(HAL_GetTick() >= timeout) + if((HAL_GetTick() - tickstart) >= Timeout) { return HAL_TIMEOUT; } @@ -661,7 +669,8 @@ HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) (__HAL_FLASH_GET_FLAG(FLASH_FLAG_MISERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_FASTERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) || #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD)) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PEMPTY))) #else (__HAL_FLASH_GET_FLAG(FLASH_FLAG_ECCD))) @@ -746,7 +755,8 @@ static void FLASH_SetErrorCode(void) } #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_PEMPTY)) { pFlash.ErrorCode |= HAL_FLASH_ERROR_PEMPTY; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.h index b74c513b77..e05c897baa 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of FLASH HAL module. ****************************************************************************** * @attention @@ -176,7 +174,8 @@ typedef struct #define HAL_FLASH_ERROR_OPTV ((uint32_t)0x00000200) #define HAL_FLASH_ERROR_ECCD ((uint32_t)0x00000400) #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define HAL_FLASH_ERROR_PEMPTY ((uint32_t)0x00000800) #endif /** @@ -197,7 +196,8 @@ typedef struct */ #define FLASH_BANK_1 ((uint32_t)0x01) /*!< Bank 1 */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define FLASH_BANK_2 ((uint32_t)0x02) /*!< Bank 2 */ #define FLASH_BANK_BOTH ((uint32_t)(FLASH_BANK_1 | FLASH_BANK_2)) /*!< Bank1 and Bank2 */ #else @@ -237,7 +237,8 @@ typedef struct #define OB_WRPAREA_BANK1_AREAA ((uint32_t)0x00) /*!< Flash Bank 1 Area A */ #define OB_WRPAREA_BANK1_AREAB ((uint32_t)0x01) /*!< Flash Bank 1 Area B */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define OB_WRPAREA_BANK2_AREAA ((uint32_t)0x02) /*!< Flash Bank 2 Area A */ #define OB_WRPAREA_BANK2_AREAB ((uint32_t)0x04) /*!< Flash Bank 2 Area B */ #endif @@ -267,20 +268,29 @@ typedef struct #define OB_USER_IWDG_STDBY ((uint32_t)0x0020) /*!< Independent watchdog counter freeze in standby mode */ #define OB_USER_WWDG_SW ((uint32_t)0x0040) /*!< Window watchdog selection */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define OB_USER_BFB2 ((uint32_t)0x0080) /*!< Dual-bank boot */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define OB_USER_DUALBANK ((uint32_t)0x0100) /*!< Dual-Bank on 1MB or 512kB Flash memory devices */ +#else #define OB_USER_DUALBANK ((uint32_t)0x0100) /*!< Dual-Bank on 512KB or 256KB Flash memory devices */ #endif +#endif #define OB_USER_nBOOT1 ((uint32_t)0x0200) /*!< Boot configuration */ #define OB_USER_SRAM2_PE ((uint32_t)0x0400) /*!< SRAM2 parity check enable */ #define OB_USER_SRAM2_RST ((uint32_t)0x0800) /*!< SRAM2 Erase when system reset */ #define OB_USER_nRST_SHDW ((uint32_t)0x1000) /*!< Reset generated when entering the shutdown mode */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || \ defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define OB_USER_nSWBOOT0 ((uint32_t)0x2000) /*!< Software BOOT0 */ #define OB_USER_nBOOT0 ((uint32_t)0x4000) /*!< nBOOT0 option bit */ #endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define OB_USER_DBANK ((uint32_t)0x8000) /*!< Single bank with 128-bits data or two banks with 64-bits data */ +#endif /** * @} */ @@ -361,7 +371,8 @@ typedef struct */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @defgroup FLASH_OB_USER_BFB2 FLASH Option Bytes User BFB2 Mode * @{ */ @@ -370,6 +381,16 @@ typedef struct /** * @} */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/** @defgroup FLASH_OB_USER_DUALBANK FLASH Option Bytes User Dual-bank Type + * @{ + */ +#define OB_DUALBANK_SINGLE ((uint32_t)0x000000) /*!< 1 MB/512 kB Single-bank Flash */ +#define OB_DUALBANK_DUAL ((uint32_t)FLASH_OPTR_DB1M) /*!< 1 MB/512 kB Dual-bank Flash */ +/** + * @} + */ +#else /** @defgroup FLASH_OB_USER_DUALBANK FLASH Option Bytes User Dual-bank Type * @{ */ @@ -379,7 +400,18 @@ typedef struct * @} */ #endif +#endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/** @defgroup FLASH_OB_USER_DBANK FLASH Option Bytes User DBANK Type + * @{ + */ +#define OB_DBANK_128_BITS ((uint32_t)0x000000) /*!< Single-bank with 128-bits data */ +#define OB_DBANK_64_BITS ((uint32_t)FLASH_OPTR_DBANK) /*!< Dual-bank with 64-bits data */ +#endif +/** + * @} + */ /** @defgroup FLASH_OB_USER_nBOOT1 FLASH Option Bytes User BOOT1 Type * @{ */ @@ -409,7 +441,8 @@ typedef struct #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || \ defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @defgroup OB_USER_nSWBOOT0 FLASH Option Bytes User Software BOOT0 * @{ */ @@ -448,6 +481,19 @@ typedef struct #define FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two wait states */ #define FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three wait states */ #define FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four wait states */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH Five wait state */ +#define FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH Six wait state */ +#define FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH Seven wait states */ +#define FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS /*!< FLASH Eight wait states */ +#define FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS /*!< FLASH Nine wait states */ +#define FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS /*!< FLASH Ten wait state */ +#define FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS /*!< FLASH Eleven wait state */ +#define FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS /*!< FLASH Twelve wait states */ +#define FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS /*!< FLASH Thirteen wait states */ +#define FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS /*!< FLASH Fourteen wait states */ +#define FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS /*!< FLASH Fifteen wait states */ +#endif /** * @} */ @@ -455,16 +501,16 @@ typedef struct /** @defgroup FLASH_Keys FLASH Keys * @{ */ -#define FLASH_KEY1 ((uint32_t)0x45670123U) /*!< Flash key1 */ -#define FLASH_KEY2 ((uint32_t)0xCDEF89ABU) /*!< Flash key2: used with FLASH_KEY1 +#define FLASH_KEY1 0x45670123U /*!< Flash key1 */ +#define FLASH_KEY2 0xCDEF89ABU /*!< Flash key2: used with FLASH_KEY1 to unlock the FLASH registers access */ -#define FLASH_PDKEY1 ((uint32_t)0x04152637U) /*!< Flash power down key1 */ -#define FLASH_PDKEY2 ((uint32_t)0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1 +#define FLASH_PDKEY1 0x04152637U /*!< Flash power down key1 */ +#define FLASH_PDKEY2 0xFAFBFCFDU /*!< Flash power down key2: used with FLASH_PDKEY1 to unlock the RUN_PD bit in FLASH_ACR */ -#define FLASH_OPTKEY1 ((uint32_t)0x08192A3BU) /*!< Flash option byte key1 */ -#define FLASH_OPTKEY2 ((uint32_t)0x4C5D6E7FU) /*!< Flash option byte key2: used with FLASH_OPTKEY1 +#define FLASH_OPTKEY1 0x08192A3BU /*!< Flash option byte key1 */ +#define FLASH_OPTKEY2 0x4C5D6E7FU /*!< Flash option byte key2: used with FLASH_OPTKEY1 to allow option bytes operations */ /** * @} @@ -486,7 +532,8 @@ typedef struct #define FLASH_FLAG_OPTVERR FLASH_SR_OPTVERR /*!< FLASH Option validity error flag */ #define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ - defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define FLASH_FLAG_PEMPTY FLASH_SR_PEMPTY /*!< FLASH Program empty */ #endif #define FLASH_FLAG_ECCC FLASH_ECCR_ECCC /*!< FLASH ECC correction */ @@ -512,10 +559,6 @@ typedef struct * @} */ -/** - * @} - */ - /* Exported macros -----------------------------------------------------------*/ /** @defgroup FLASH_Exported_Macros FLASH Exported Macros * @brief macros to control FLASH features @@ -779,7 +822,10 @@ uint32_t HAL_FLASH_GetError(void); */ #define FLASH_SIZE_DATA_REGISTER ((uint32_t)0x1FFF75E0) -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define FLASH_SIZE ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0xFFFF)) ? (0x800 << 10) : \ + (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) << 10)) +#elif defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define FLASH_SIZE ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0xFFFF)) ? (0x200 << 10) : \ (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) << 10)) #else @@ -788,13 +834,19 @@ uint32_t HAL_FLASH_GetError(void); #endif #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define FLASH_BANK_SIZE (FLASH_SIZE >> 1) #else #define FLASH_BANK_SIZE (FLASH_SIZE) #endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define FLASH_PAGE_SIZE ((uint32_t)0x1000) +#define FLASH_PAGE_SIZE_128_BITS ((uint32_t)0x2000) +#else #define FLASH_PAGE_SIZE ((uint32_t)0x800) +#endif #define FLASH_TIMEOUT_VALUE ((uint32_t)50000)/* 50 s */ /** @@ -810,7 +862,8 @@ uint32_t HAL_FLASH_GetError(void); ((VALUE) == FLASH_TYPEERASE_MASSERASE)) #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || \ ((BANK) == FLASH_BANK_2) || \ ((BANK) == FLASH_BANK_BOTH)) @@ -827,17 +880,23 @@ uint32_t HAL_FLASH_GetError(void); ((VALUE) == FLASH_TYPEPROGRAM_FAST) || \ ((VALUE) == FLASH_TYPEPROGRAM_FAST_AND_LAST)) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define IS_FLASH_MAIN_MEM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && ((ADDRESS) <= FLASH_BASE+0x1FFFFF)) +#else #define IS_FLASH_MAIN_MEM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x400) ? \ ((ADDRESS) <= FLASH_BASE+0xFFFFF) : ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x200) ? \ ((ADDRESS) <= FLASH_BASE+0x7FFFF) : ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x100) ? \ ((ADDRESS) <= FLASH_BASE+0x3FFFF) : ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x80) ? \ ((ADDRESS) <= FLASH_BASE+0x1FFFF) : ((ADDRESS) <= FLASH_BASE+0xFFFFF)))))) +#endif #define IS_FLASH_OTP_ADDRESS(ADDRESS) (((ADDRESS) >= 0x1FFF7000) && ((ADDRESS) <= 0x1FFF73FF)) #define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (IS_FLASH_MAIN_MEM_ADDRESS(ADDRESS) || IS_FLASH_OTP_ADDRESS(ADDRESS)) -#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define IS_FLASH_PAGE(PAGE) ((PAGE) < 256) +#elif defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) #define IS_FLASH_PAGE(PAGE) (((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x400) ? ((PAGE) < 256) : \ ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x200) ? ((PAGE) < 128) : \ ((((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) & (0x0FFF)) == 0x100) ? ((PAGE) < 64) : \ @@ -855,7 +914,8 @@ uint32_t HAL_FLASH_GetError(void); #define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_PCROP))) #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_OB_WRPAREA(VALUE) (((VALUE) == OB_WRPAREA_BANK1_AREAA) || ((VALUE) == OB_WRPAREA_BANK1_AREAB) || \ ((VALUE) == OB_WRPAREA_BANK2_AREAA) || ((VALUE) == OB_WRPAREA_BANK2_AREAB)) #else @@ -866,7 +926,9 @@ uint32_t HAL_FLASH_GetError(void); ((LEVEL) == OB_RDP_LEVEL_1)/* ||\ ((LEVEL) == OB_RDP_LEVEL_2)*/) -#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define IS_OB_USER_TYPE(TYPE) (((TYPE) <= (uint32_t)0xFFFF) && ((TYPE) != 0)) +#elif defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) #define IS_OB_USER_TYPE(TYPE) (((TYPE) <= (uint32_t)0x1FFF) && ((TYPE) != 0)) #else #define IS_OB_USER_TYPE(TYPE) (((TYPE) <= (uint32_t)0x7E7F) && ((TYPE) != 0) && (((TYPE)&0x0180) == 0)) @@ -891,12 +953,17 @@ uint32_t HAL_FLASH_GetError(void); #define IS_OB_USER_WWDG(VALUE) (((VALUE) == OB_WWDG_HW) || ((VALUE) == OB_WWDG_SW)) #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_OB_USER_BFB2(VALUE) (((VALUE) == OB_BFB2_DISABLE) || ((VALUE) == OB_BFB2_ENABLE)) #define IS_OB_USER_DUALBANK(VALUE) (((VALUE) == OB_DUALBANK_SINGLE) || ((VALUE) == OB_DUALBANK_DUAL)) #endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define IS_OB_USER_DBANK(VALUE) (((VALUE) == OB_DBANK_128_BITS) || ((VALUE) == OB_DBANK_64_BITS)) +#endif + #define IS_OB_USER_BOOT1(VALUE) (((VALUE) == OB_BOOT1_SRAM) || ((VALUE) == OB_BOOT1_SYSTEM)) #define IS_OB_USER_SRAM2_PARITY(VALUE) (((VALUE) == OB_SRAM2_PARITY_ENABLE) || ((VALUE) == OB_SRAM2_PARITY_DISABLE)) @@ -905,7 +972,8 @@ uint32_t HAL_FLASH_GetError(void); #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || \ defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_OB_USER_SWBOOT0(VALUE) (((VALUE) == OB_BOOT0_FROM_OB) || ((VALUE) == OB_BOOT0_FROM_PIN)) #define IS_OB_USER_BOOT0(VALUE) (((VALUE) == OB_BOOT0_RESET) || ((VALUE) == OB_BOOT0_SET)) @@ -913,11 +981,26 @@ uint32_t HAL_FLASH_GetError(void); #define IS_OB_PCROP_RDP(VALUE) (((VALUE) == OB_PCROP_RDP_NOT_ERASE) || ((VALUE) == OB_PCROP_RDP_ERASE)) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || ((LATENCY) == FLASH_LATENCY_1) || \ + ((LATENCY) == FLASH_LATENCY_2) || ((LATENCY) == FLASH_LATENCY_3) || \ + ((LATENCY) == FLASH_LATENCY_4) || ((LATENCY) == FLASH_LATENCY_5) || \ + ((LATENCY) == FLASH_LATENCY_6) || ((LATENCY) == FLASH_LATENCY_7) || \ + ((LATENCY) == FLASH_LATENCY_8) || ((LATENCY) == FLASH_LATENCY_9) || \ + ((LATENCY) == FLASH_LATENCY_10) || ((LATENCY) == FLASH_LATENCY_11) || \ + ((LATENCY) == FLASH_LATENCY_12) || ((LATENCY) == FLASH_LATENCY_13) || \ + ((LATENCY) == FLASH_LATENCY_14) || ((LATENCY) == FLASH_LATENCY_15)) +#else #define IS_FLASH_LATENCY(LATENCY) (((LATENCY) == FLASH_LATENCY_0) || \ ((LATENCY) == FLASH_LATENCY_1) || \ ((LATENCY) == FLASH_LATENCY_2) || \ ((LATENCY) == FLASH_LATENCY_3) || \ ((LATENCY) == FLASH_LATENCY_4)) +#endif +/** + * @} + */ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.c index bd6efe7288..1ba98a0c1b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended FLASH HAL module driver. * This file provides firmware functions to manage the following * functionalities of the FLASH extended peripheral: @@ -85,7 +83,7 @@ */ /** @defgroup FLASHEx FLASHEx - * @brief FALSH Extended HAL module driver + * @brief FLASH Extended HAL module driver * @{ */ @@ -124,7 +122,7 @@ static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PC */ /* Exported functions -------------------------------------------------------*/ -/** @defgroup FLASHEx_Exported_Functions FLASH Extended Exported Functions +/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions * @{ */ @@ -208,7 +206,8 @@ HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* If the erase operation is completed, disable the MER1 and MER2 Bits */ CLEAR_BIT(FLASH->CR, (FLASH_CR_MER1 | FLASH_CR_MER2)); #else @@ -405,7 +404,8 @@ void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) pOBInit->OptionType = (OPTIONBYTE_RDP | OPTIONBYTE_USER); #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if((pOBInit->WRPArea == OB_WRPAREA_BANK1_AREAA) || (pOBInit->WRPArea == OB_WRPAREA_BANK1_AREAB) || (pOBInit->WRPArea == OB_WRPAREA_BANK2_AREAA) || (pOBInit->WRPArea == OB_WRPAREA_BANK2_AREAB)) #else @@ -424,7 +424,8 @@ void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) pOBInit->USERConfig = FLASH_OB_GetUser(); #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if((pOBInit->PCROPConfig == FLASH_BANK_1) || (pOBInit->PCROPConfig == FLASH_BANK_2)) #else if(pOBInit->PCROPConfig == FLASH_BANK_1) @@ -440,9 +441,83 @@ void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) * @} */ +#if defined (FLASH_CFGR_LVEN) +/** @defgroup FLASHEx_Exported_Functions_Group2 Extended specific configuration functions + * @brief Extended specific configuration functions + * +@verbatim + =============================================================================== + ##### Extended specific configuration functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to manage the Extended FLASH + specific configurations. + +@endverbatim + * @{ + */ + +/** + * @brief Configuration of the LVE pin of the Flash (managed by power controller + * or forced to low in order to use an external SMPS) + * @param ConfigLVE: Configuration of the LVE pin, + * This parameter can be one of the following values: + * @arg FLASH_LVE_PIN_CTRL: LVE FLASH pin controlled by power controller + * @arg FLASH_LVE_PIN_FORCED: LVE FLASH pin enforced to low (external SMPS used) + * + * @note Before enforcing the LVE pin to low, the SOC should be in low voltage + * range 2 and the voltage VDD12 should be higher than 1.08V and SMPS is ON. + * + * @retval HAL Status + */ +HAL_StatusTypeDef HAL_FLASHEx_ConfigLVEPin(uint32_t ConfigLVE) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check the parameters */ + assert_param(IS_FLASH_LVE_PIN(ConfigLVE)); + + /* Wait for last operation to be completed */ + status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); + + if (status == HAL_OK) + { + /* Check that the voltage scaling is range 2 */ + if (HAL_PWREx_GetVoltageRange() == PWR_REGULATOR_VOLTAGE_SCALE2) + { + /* Configure the LVEN bit */ + MODIFY_REG(FLASH->CFGR, FLASH_CFGR_LVEN, ConfigLVE); + + /* Check that the bit has been correctly configured */ + if (READ_BIT(FLASH->CFGR, FLASH_CFGR_LVEN) != ConfigLVE) + { + status = HAL_ERROR; + } + } + else + { + /* Not allow to force Flash LVE pin if not in voltage range 2 */ + status = HAL_ERROR; + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} + /** * @} - */ + */ +#endif /* FLASH_CFGR_LVEN */ + +/** + * @} + */ /* Private functions ---------------------------------------------------------*/ @@ -460,6 +535,9 @@ void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) */ static void FLASH_MassErase(uint32_t Banks) { +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) != RESET) +#endif { /* Check the parameters */ assert_param(IS_FLASH_BANK(Banks)); @@ -471,7 +549,8 @@ static void FLASH_MassErase(uint32_t Banks) } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* Set the Mass Erase Bit for the bank 2 if requested */ if((Banks & FLASH_BANK_2) != RESET) { @@ -479,6 +558,12 @@ static void FLASH_MassErase(uint32_t Banks) } #endif } +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + else + { + SET_BIT(FLASH->CR, (FLASH_CR_MER1 | FLASH_CR_MER2)); + } +#endif /* Proceed to erase all sectors */ SET_BIT(FLASH->CR, FLASH_CR_STRT); @@ -500,7 +585,15 @@ void FLASH_PageErase(uint32_t Page, uint32_t Banks) assert_param(IS_FLASH_PAGE(Page)); #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + if(READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == RESET) + { + CLEAR_BIT(FLASH->CR, FLASH_CR_BKER); + } + else +#endif { assert_param(IS_FLASH_BANK_EXCLUSIVE(Banks)); @@ -604,7 +697,8 @@ static HAL_StatusTypeDef FLASH_OB_WRPConfig(uint32_t WRPArea, uint32_t WRPStartO (WRPStartOffset | (WRDPEndOffset << 16))); } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) else if(WRPArea == OB_WRPAREA_BANK2_AREAA) { MODIFY_REG(FLASH->WRP2AR, (FLASH_WRP2AR_WRP2A_STRT | FLASH_WRP2AR_WRP2A_END), @@ -787,7 +881,8 @@ static HAL_StatusTypeDef FLASH_OB_UserConfig(uint32_t UserType, uint32_t UserCon } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if((UserType & OB_USER_BFB2) != RESET) { /* BFB2 option byte should be modified */ @@ -800,12 +895,21 @@ static HAL_StatusTypeDef FLASH_OB_UserConfig(uint32_t UserType, uint32_t UserCon if((UserType & OB_USER_DUALBANK) != RESET) { +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + /* DUALBANK option byte should be modified */ + assert_param(IS_OB_USER_DUALBANK(UserConfig & FLASH_OPTR_DB1M)); + + /* Set value and mask for DUALBANK option byte */ + optr_reg_val |= (UserConfig & FLASH_OPTR_DB1M); + optr_reg_mask |= FLASH_OPTR_DB1M; +#else /* DUALBANK option byte should be modified */ assert_param(IS_OB_USER_DUALBANK(UserConfig & FLASH_OPTR_DUALBANK)); /* Set value and mask for DUALBANK option byte */ optr_reg_val |= (UserConfig & FLASH_OPTR_DUALBANK); optr_reg_mask |= FLASH_OPTR_DUALBANK; +#endif } #endif @@ -841,7 +945,8 @@ static HAL_StatusTypeDef FLASH_OB_UserConfig(uint32_t UserType, uint32_t UserCon #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || \ defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if((UserType & OB_USER_nSWBOOT0) != RESET) { /* nSWBOOT0 option byte should be modified */ @@ -905,7 +1010,8 @@ static HAL_StatusTypeDef FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCR uint32_t reg_value = 0; uint32_t bank1_addr; #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) uint32_t bank2_addr; #endif @@ -921,7 +1027,8 @@ static HAL_StatusTypeDef FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCR if(status == HAL_OK) { #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* Get the information about the bank swapping */ if (READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE) == 0) { @@ -937,6 +1044,29 @@ static HAL_StatusTypeDef FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCR bank1_addr = FLASH_BASE; #endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == RESET) + { + /* Configure the Proprietary code readout protection */ + if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_1) + { + reg_value = ((PCROPStartAddr - FLASH_BASE) >> 4); + MODIFY_REG(FLASH->PCROP1SR, FLASH_PCROP1SR_PCROP1_STRT, reg_value); + + reg_value = ((PCROPEndAddr - FLASH_BASE) >> 4); + MODIFY_REG(FLASH->PCROP1ER, FLASH_PCROP1ER_PCROP1_END, reg_value); + } + else if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_2) + { + reg_value = ((PCROPStartAddr - FLASH_BASE) >> 4); + MODIFY_REG(FLASH->PCROP2SR, FLASH_PCROP2SR_PCROP2_STRT, reg_value); + + reg_value = ((PCROPEndAddr - FLASH_BASE) >> 4); + MODIFY_REG(FLASH->PCROP2ER, FLASH_PCROP2ER_PCROP2_END, reg_value); + } + } + else +#endif { /* Configure the Proprietary code readout protection */ if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_1) @@ -948,7 +1078,8 @@ static HAL_StatusTypeDef FLASH_OB_PCROPConfig(uint32_t PCROPConfig, uint32_t PCR MODIFY_REG(FLASH->PCROP1ER, FLASH_PCROP1ER_PCROP1_END, reg_value); } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) else if((PCROPConfig & FLASH_BANK_BOTH) == FLASH_BANK_2) { reg_value = ((PCROPStartAddr - bank2_addr) >> 3); @@ -1007,7 +1138,8 @@ static void FLASH_OB_GetWRP(uint32_t WRPArea, uint32_t * WRPStartOffset, uint32_ *WRDPEndOffset = (READ_BIT(FLASH->WRP1BR, FLASH_WRP1BR_WRP1B_END) >> 16); } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) else if(WRPArea == OB_WRPAREA_BANK2_AREAA) { *WRPStartOffset = READ_BIT(FLASH->WRP2AR, FLASH_WRP2AR_WRP2A_STRT); @@ -1082,12 +1214,14 @@ static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PCROPStartAddr, uint32_t reg_value = 0; uint32_t bank1_addr; #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) uint32_t bank2_addr; #endif #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* Get the information about the bank swapping */ if (READ_BIT(SYSCFG->MEMRMP, SYSCFG_MEMRMP_FB_MODE) == 0) { @@ -1103,6 +1237,28 @@ static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PCROPStartAddr, bank1_addr = FLASH_BASE; #endif +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + if (READ_BIT(FLASH->OPTR, FLASH_OPTR_DBANK) == RESET) + { + if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_1) + { + reg_value = (READ_REG(FLASH->PCROP1SR) & FLASH_PCROP1SR_PCROP1_STRT); + *PCROPStartAddr = (reg_value << 4) + FLASH_BASE; + + reg_value = (READ_REG(FLASH->PCROP1ER) & FLASH_PCROP1ER_PCROP1_END); + *PCROPEndAddr = (reg_value << 4) + FLASH_BASE; + } + else if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_2) + { + reg_value = (READ_REG(FLASH->PCROP2SR) & FLASH_PCROP2SR_PCROP2_STRT); + *PCROPStartAddr = (reg_value << 4) + FLASH_BASE; + + reg_value = (READ_REG(FLASH->PCROP2ER) & FLASH_PCROP2ER_PCROP2_END); + *PCROPEndAddr = (reg_value << 4) + FLASH_BASE; + } + } + else +#endif { if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_1) { @@ -1113,7 +1269,8 @@ static void FLASH_OB_GetPCROP(uint32_t * PCROPConfig, uint32_t * PCROPStartAddr, *PCROPEndAddr = (reg_value << 3) + bank1_addr; } #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) else if(((*PCROPConfig) & FLASH_BANK_BOTH) == FLASH_BANK_2) { reg_value = (READ_REG(FLASH->PCROP2SR) & FLASH_PCROP2SR_PCROP2_STRT); diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.h index 80e85f1720..63d5c9fcd1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of FLASH HAL Extended module. ****************************************************************************** * @attention @@ -52,15 +50,32 @@ /** @addtogroup FLASHEx * @{ - */ + */ /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ +#if defined (FLASH_CFGR_LVEN) +/** @addtogroup FLASHEx_Exported_Constants + * @{ + */ +/** @defgroup FLASHEx_LVE_PIN_CFG FLASHEx LVE pin configuration + * @{ + */ +#define FLASH_LVE_PIN_CTRL 0x00000000U /*!< LVE FLASH pin controlled by power controller */ +#define FLASH_LVE_PIN_FORCED FLASH_CFGR_LVEN /*!< LVE FLASH pin enforced to low (external SMPS used) */ +/** + * @} + */ + +/** + * @} + */ +#endif /* FLASH_CFGR_LVEN */ /* Exported macro ------------------------------------------------------------*/ -/* Exported functions --------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @addtogroup FLASHEx_Exported_Functions * @{ */ @@ -75,19 +90,40 @@ HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit); void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit); /** * @} - */ + */ + +#if defined (FLASH_CFGR_LVEN) +/** @addtogroup FLASHEx_Exported_Functions_Group2 + * @{ + */ +HAL_StatusTypeDef HAL_FLASHEx_ConfigLVEPin(uint32_t ConfigLVE); +/** + * @} + */ +#endif /* FLASH_CFGR_LVEN */ /** * @} - */ + */ + +/* Private macros ------------------------------------------------------------*/ +/** + @cond 0 + */ +#if defined (FLASH_CFGR_LVEN) +#define IS_FLASH_LVE_PIN(CFG) (((CFG) == FLASH_LVE_PIN_CTRL) || ((CFG) == FLASH_LVE_PIN_FORCED)) +#endif /* FLASH_CFGR_LVEN */ +/** + @endcond + */ /** * @} - */ + */ /** * @} - */ + */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.c index 6382464fc4..fbd9462a1a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash_ramfunc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief FLASH RAMFUNC driver. * This file provides a Flash firmware functions which should be * executed from internal SRAM @@ -132,6 +130,122 @@ __RAM_FUNC HAL_FLASHEx_DisableRunPowerDown(void) return HAL_OK; } +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/** + * @brief Program the FLASH DBANK User Option Byte. + * + * @note To configure the user option bytes, the option lock bit OPTLOCK must + * be cleared with the call of the HAL_FLASH_OB_Unlock() function. + * @note To modify the DBANK option byte, no PCROP region should be defined. + * To deactivate PCROP, user should perform RDP changing + * + * @param DBankConfig: The FLASH DBANK User Option Byte value. + * This parameter can be one of the following values: + * @arg OB_DBANK_128_BITS: Single-bank with 128-bits data + * @arg OB_DBANK_64_BITS: Dual-bank with 64-bits data + * + * @retval HAL status + */ +__RAM_FUNC HAL_FLASHEx_OB_DBankConfig(uint32_t DBankConfig) +{ + register uint32_t count, reg; + HAL_StatusTypeDef status = HAL_ERROR; + + /* Process Locked */ + __HAL_LOCK(&pFlash); + + /* Check if the PCROP is disabled */ + reg = FLASH->PCROP1SR; + if (reg > FLASH->PCROP1ER) + { + reg = FLASH->PCROP2SR; + if (reg > FLASH->PCROP2ER) + { + /* Disable Flash prefetch */ + __HAL_FLASH_PREFETCH_BUFFER_DISABLE(); + + if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) != RESET) + { + /* Disable Flash instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_DISABLE(); + + /* Flush Flash instruction cache */ + __HAL_FLASH_INSTRUCTION_CACHE_RESET(); + } + + if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != RESET) + { + /* Disable Flash data cache */ + __HAL_FLASH_DATA_CACHE_DISABLE(); + + /* Flush Flash data cache */ + __HAL_FLASH_DATA_CACHE_RESET(); + } + + /* Disable WRP zone 1 of 1st bank if needed */ + reg = FLASH->WRP1AR; + if (((reg & FLASH_WRP1AR_WRP1A_STRT) >> POSITION_VAL(FLASH_WRP1AR_WRP1A_STRT)) <= + ((reg & FLASH_WRP1AR_WRP1A_END) >> POSITION_VAL(FLASH_WRP1AR_WRP1A_END))) + { + MODIFY_REG(FLASH->WRP1AR, (FLASH_WRP1AR_WRP1A_STRT | FLASH_WRP1AR_WRP1A_END), FLASH_WRP1AR_WRP1A_STRT); + } + + /* Disable WRP zone 2 of 1st bank if needed */ + reg = FLASH->WRP1BR; + if (((reg & FLASH_WRP1BR_WRP1B_STRT) >> POSITION_VAL(FLASH_WRP1BR_WRP1B_STRT)) <= + ((reg & FLASH_WRP1BR_WRP1B_END) >> POSITION_VAL(FLASH_WRP1BR_WRP1B_END))) + { + MODIFY_REG(FLASH->WRP1BR, (FLASH_WRP1BR_WRP1B_STRT | FLASH_WRP1BR_WRP1B_END), FLASH_WRP1BR_WRP1B_STRT); + } + + /* Disable WRP zone 1 of 2nd bank if needed */ + reg = FLASH->WRP2AR; + if (((reg & FLASH_WRP2AR_WRP2A_STRT) >> POSITION_VAL(FLASH_WRP2AR_WRP2A_STRT)) <= + ((reg & FLASH_WRP2AR_WRP2A_END) >> POSITION_VAL(FLASH_WRP2AR_WRP2A_END))) + { + MODIFY_REG(FLASH->WRP2AR, (FLASH_WRP2AR_WRP2A_STRT | FLASH_WRP2AR_WRP2A_END), FLASH_WRP2AR_WRP2A_STRT); + } + + /* Disable WRP zone 2 of 2nd bank if needed */ + reg = FLASH->WRP2BR; + if (((reg & FLASH_WRP2BR_WRP2B_STRT) >> POSITION_VAL(FLASH_WRP2BR_WRP2B_STRT)) <= + ((reg & FLASH_WRP2BR_WRP2B_END) >> POSITION_VAL(FLASH_WRP2BR_WRP2B_END))) + { + MODIFY_REG(FLASH->WRP2BR, (FLASH_WRP2BR_WRP2B_STRT | FLASH_WRP2BR_WRP2B_END), FLASH_WRP2BR_WRP2B_STRT); + } + + /* Modify the DBANK user option byte */ + MODIFY_REG(FLASH->OPTR, FLASH_OPTR_DBANK, DBankConfig); + + /* Set OPTSTRT Bit */ + SET_BIT(FLASH->CR, FLASH_CR_OPTSTRT); + + /* Wait for last operation to be completed */ + /* 8 is the number of required instruction cycles for the below loop statement (timeout expressed in ms) */ + count = FLASH_TIMEOUT_VALUE * (SystemCoreClock / 8 / 1000); + do + { + if (count-- == 0) + { + break; + } + } while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET); + + /* If the option byte program operation is completed, disable the OPTSTRT Bit */ + CLEAR_BIT(FLASH->CR, FLASH_CR_OPTSTRT); + + /* Set the bit to force the option byte reloading */ + SET_BIT(FLASH->CR, FLASH_CR_OBL_LAUNCH); + } + } + + /* Process Unlocked */ + __HAL_UNLOCK(&pFlash); + + return status; +} +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.h index a09dd20d66..b0988b0278 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_flash_ramfunc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_flash_ramfunc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of FLASH RAMFUNC driver. ****************************************************************************** * @attention @@ -100,6 +98,9 @@ /* Peripheral Control functions ************************************************/ __RAM_FUNC HAL_FLASHEx_EnableRunPowerDown(void); __RAM_FUNC HAL_FLASHEx_DisableRunPowerDown(void); +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +__RAM_FUNC HAL_FLASHEx_OB_DBankConfig(uint32_t DBankConfig); +#endif /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.c new file mode 100644 index 0000000000..1a8dd03657 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.c @@ -0,0 +1,567 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_gfxmmu.c + * @author MCD Application Team + * @brief This file provides firmware functions to manage the following + * functionalities of the Graphic MMU (GFXMMU) peripheral: + * + Initialization and De-initialization. + * + LUT configuration. + * + Modify physical buffer adresses. + * + Error management. + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + *** Initialization *** + ====================== + [..] + (#) As prerequisite, fill in the HAL_GFXMMU_MspInit() : + (++) Enable GFXMMU clock interface with __HAL_RCC_GFXMMU_CLK_ENABLE(). + (++) If interrupts are used, enable and configure GFXMMU global + interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ(). + (#) Configure the number of blocks per line, default value, physical + buffer addresses and interrupts using the HAL_GFXMMU_Init() function. + + *** LUT configuration *** + ========================= + [..] + (#) Use HAL_GFXMMU_DisableLutLines() to deactivate all LUT lines (or a + range of lines). + (#) Use HAL_GFXMMU_ConfigLut() to copy LUT from flash to look up RAM. + (#) Use HAL_GFXMMU_ConfigLutLine() to configure one line of LUT. + + *** Modify physical buffer adresses *** + ======================================= + [..] + (#) Use HAL_GFXMMU_ModifyBuffers() to modify physical buffer addresses. + + *** Error management *** + ======================== + [..] + (#) If interrupts are used, HAL_GFXMMU_IRQHandler() will be called when + an error occurs. This function will call HAL_GFXMMU_ErrorCallback(). + Use HAL_GFXMMU_GetError() to get the error code. + + *** De-initialization *** + ========================= + [..] + (#) As prerequisite, fill in the HAL_GFXMMU_MspDeInit() : + (++) Disable GFXMMU clock interface with __HAL_RCC_GFXMMU_CLK_ENABLE(). + (++) If interrupts has been used, disable GFXMMU global interrupt with + HAL_NVIC_DisableIRQ(). + (#) De-initialize GFXMMU using the HAL_GFXMMU_DeInit() function. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ +#ifdef HAL_GFXMMU_MODULE_ENABLED +#if defined(GFXMMU) +/** @defgroup GFXMMU GFXMMU + * @brief GFXMMU HAL driver module + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define GFXMMU_LUTXL_FVB_OFFSET 8U +#define GFXMMU_LUTXL_LVB_OFFSET 16U +#define GFXMMU_CR_ITS_MASK 0x1FU +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup GFXMMU_Exported_Functions GFXMMU Exported Functions + * @{ + */ + +/** @defgroup GFXMMU_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and de-initialization functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Initialize the GFXMMU. + (+) De-initialize the GFXMMU. +@endverbatim + * @{ + */ + +/** + * @brief Initialize the GFXMMU according to the specified parameters in the + * GFXMMU_InitTypeDef structure and initialize the associated handle. + * @param hgfxmmu GFXMMU handle. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_Init(GFXMMU_HandleTypeDef *hgfxmmu) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check GFXMMU handle */ + if(hgfxmmu == NULL) + { + status = HAL_ERROR; + } + else + { + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + assert_param(IS_GFXMMU_BLOCKS_PER_LINE(hgfxmmu->Init.BlocksPerLine)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(hgfxmmu->Init.Buffers.Buf0Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(hgfxmmu->Init.Buffers.Buf1Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(hgfxmmu->Init.Buffers.Buf2Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(hgfxmmu->Init.Buffers.Buf3Address)); + assert_param(IS_FUNCTIONAL_STATE(hgfxmmu->Init.Interrupts.Activation)); + + /* Call GFXMMU MSP init function */ + HAL_GFXMMU_MspInit(hgfxmmu); + + /* Configure blocks per line and interrupts parameters on GFXMMU_CR register */ + hgfxmmu->Instance->CR &= ~(GFXMMU_CR_B0OIE | GFXMMU_CR_B1OIE | GFXMMU_CR_B2OIE | GFXMMU_CR_B3OIE | + GFXMMU_CR_AMEIE | GFXMMU_CR_192BM); + hgfxmmu->Instance->CR |= (hgfxmmu->Init.BlocksPerLine); + if(hgfxmmu->Init.Interrupts.Activation == ENABLE) + { + assert_param(IS_GFXMMU_INTERRUPTS(hgfxmmu->Init.Interrupts.UsedInterrupts)); + hgfxmmu->Instance->CR |= hgfxmmu->Init.Interrupts.UsedInterrupts; + } + + /* Configure default value on GFXMMU_DVR register */ + hgfxmmu->Instance->DVR = hgfxmmu->Init.DefaultValue; + + /* Configure physical buffer adresses on GFXMMU_BxCR registers */ + hgfxmmu->Instance->B0CR = hgfxmmu->Init.Buffers.Buf0Address; + hgfxmmu->Instance->B1CR = hgfxmmu->Init.Buffers.Buf1Address; + hgfxmmu->Instance->B2CR = hgfxmmu->Init.Buffers.Buf2Address; + hgfxmmu->Instance->B3CR = hgfxmmu->Init.Buffers.Buf3Address; + + /* Reset GFXMMU error code */ + hgfxmmu->ErrorCode = GFXMMU_ERROR_NONE; + + /* Set GFXMMU to ready state */ + hgfxmmu->State = HAL_GFXMMU_STATE_READY; + } + /* Return function status */ + return status; +} + +/** + * @brief De-initialize the GFXMMU. + * @param hgfxmmu GFXMMU handle. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_DeInit(GFXMMU_HandleTypeDef *hgfxmmu) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check GFXMMU handle */ + if(hgfxmmu == NULL) + { + status = HAL_ERROR; + } + else + { + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + + /* Disable all interrupts on GFXMMU_CR register */ + hgfxmmu->Instance->CR &= ~(GFXMMU_CR_B0OIE | GFXMMU_CR_B1OIE | GFXMMU_CR_B2OIE | GFXMMU_CR_B3OIE | + GFXMMU_CR_AMEIE); + + /* Call GFXMMU MSP de-init function */ + HAL_GFXMMU_MspDeInit(hgfxmmu); + + /* Set GFXMMU to reset state */ + hgfxmmu->State = HAL_GFXMMU_STATE_RESET; + } + /* Return function status */ + return status; +} + +/** + * @brief Initialize the GFXMMU MSP. + * @param hgfxmmu GFXMMU handle. + * @retval None. + */ +__weak void HAL_GFXMMU_MspInit(GFXMMU_HandleTypeDef *hgfxmmu) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hgfxmmu); + + /* NOTE : This function should not be modified, when the function is needed, + the HAL_GFXMMU_MspInit could be implemented in the user file. + */ +} + +/** + * @brief De-initialize the GFXMMU MSP. + * @param hgfxmmu GFXMMU handle. + * @retval None. + */ +__weak void HAL_GFXMMU_MspDeInit(GFXMMU_HandleTypeDef *hgfxmmu) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hgfxmmu); + + /* NOTE : This function should not be modified, when the function is needed, + the HAL_GFXMMU_MspDeInit could be implemented in the user file. + */ +} + +/** + * @} + */ + +/** @defgroup GFXMMU_Exported_Functions_Group2 Operations functions + * @brief GFXMMU operation functions + * +@verbatim + ============================================================================== + ##### Operation functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Configure LUT. + (+) Modify physical buffer adresses. + (+) Manage error. +@endverbatim + * @{ + */ + +/** + * @brief This function allows to copy LUT from flash to look up RAM. + * @param hgfxmmu GFXMMU handle. + * @param FirstLine First line enabled on LUT. + * This parameter must be a number between Min_Data = 0 and Max_Data = 1023. + * @param LinesNumber Number of lines enabled on LUT. + * This parameter must be a number between Min_Data = 1 and Max_Data = 1024. + * @param Address Start address of LUT in flash. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_ConfigLut(GFXMMU_HandleTypeDef *hgfxmmu, + uint32_t FirstLine, + uint32_t LinesNumber, + uint32_t Address) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + assert_param(IS_GFXMMU_LUT_LINE(FirstLine)); + assert_param(IS_GFXMMU_LUT_LINES_NUMBER(LinesNumber)); + + /* Check GFXMMU state and coherent parameters */ + if((hgfxmmu->State != HAL_GFXMMU_STATE_READY) || ((FirstLine + LinesNumber) > 1024U)) + { + status = HAL_ERROR; + } + else + { + uint32_t current_address, current_line, lutxl_address, lutxh_address; + + /* Initialize local variables */ + current_address = Address; + current_line = 0U; + lutxl_address = (uint32_t) &(hgfxmmu->Instance->LUT[2U * FirstLine]); + lutxh_address = (uint32_t) &(hgfxmmu->Instance->LUT[(2U * FirstLine) + 1U]); + + /* Copy LUT from flash to look up RAM */ + while(current_line < LinesNumber) + { + *((uint32_t *)lutxl_address) = *((uint32_t *)current_address); + current_address += 4U; + *((uint32_t *)lutxh_address) = *((uint32_t *)current_address); + current_address += 4U; + lutxl_address += 8U; + lutxh_address += 8U; + current_line++; + } + } + /* Return function status */ + return status; +} + +/** + * @brief This function allows to disable a range of LUT lines. + * @param hgfxmmu GFXMMU handle. + * @param FirstLine First line to disable on LUT. + * This parameter must be a number between Min_Data = 0 and Max_Data = 1023. + * @param LinesNumber Number of lines to disable on LUT. + * This parameter must be a number between Min_Data = 1 and Max_Data = 1024. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_DisableLutLines(GFXMMU_HandleTypeDef *hgfxmmu, + uint32_t FirstLine, + uint32_t LinesNumber) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + assert_param(IS_GFXMMU_LUT_LINE(FirstLine)); + assert_param(IS_GFXMMU_LUT_LINES_NUMBER(LinesNumber)); + + /* Check GFXMMU state and coherent parameters */ + if((hgfxmmu->State != HAL_GFXMMU_STATE_READY) || ((FirstLine + LinesNumber) > 1024U)) + { + status = HAL_ERROR; + } + else + { + uint32_t current_line, lutxl_address, lutxh_address; + + /* Initialize local variables */ + current_line = 0U; + lutxl_address = (uint32_t) &(hgfxmmu->Instance->LUT[2U * FirstLine]); + lutxh_address = (uint32_t) &(hgfxmmu->Instance->LUT[(2U * FirstLine) + 1U]); + + /* Disable LUT lines */ + while(current_line < LinesNumber) + { + *((uint32_t *)lutxl_address) = 0U; + *((uint32_t *)lutxh_address) = 0U; + lutxl_address += 8U; + lutxh_address += 8U; + current_line++; + } + } + /* Return function status */ + return status; +} + +/** + * @brief This function allows to configure one line of LUT. + * @param hgfxmmu GFXMMU handle. + * @param lutLine LUT line parameters. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_ConfigLutLine(GFXMMU_HandleTypeDef *hgfxmmu, GFXMMU_LutLineTypeDef *lutLine) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + assert_param(IS_GFXMMU_LUT_LINE(lutLine->LineNumber)); + assert_param(IS_GFXMMU_LUT_LINE_STATUS(lutLine->LineStatus)); + assert_param(IS_GFXMMU_LUT_BLOCK(lutLine->FirstVisibleBlock)); + assert_param(IS_GFXMMU_LUT_BLOCK(lutLine->LastVisibleBlock)); + assert_param(IS_GFXMMU_LUT_LINE_OFFSET(lutLine->LineOffset)); + + /* Check GFXMMU state */ + if(hgfxmmu->State != HAL_GFXMMU_STATE_READY) + { + status = HAL_ERROR; + } + else + { + uint32_t lutxl_address, lutxh_address; + + /* Initialize local variables */ + lutxl_address = (uint32_t) &(hgfxmmu->Instance->LUT[2U * lutLine->LineNumber]); + lutxh_address = (uint32_t) &(hgfxmmu->Instance->LUT[(2U * lutLine->LineNumber) + 1U]); + + /* Configure LUT line */ + if(lutLine->LineStatus == GFXMMU_LUT_LINE_ENABLE) + { + /* Enable and configure LUT line */ + *((uint32_t *)lutxl_address) = (lutLine->LineStatus | + (lutLine->FirstVisibleBlock << GFXMMU_LUTXL_FVB_OFFSET) | + (lutLine->LastVisibleBlock << GFXMMU_LUTXL_LVB_OFFSET)); + *((uint32_t *)lutxh_address) = lutLine->LineOffset; + } + else + { + /* Disable LUT line */ + *((uint32_t *)lutxl_address) = 0U; + *((uint32_t *)lutxh_address) = 0U; + } + } + /* Return function status */ + return status; +} + +/** + * @brief This function allows to modify physical buffer addresses. + * @param hgfxmmu GFXMMU handle. + * @param Buffers Buffers parameters. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_GFXMMU_ModifyBuffers(GFXMMU_HandleTypeDef *hgfxmmu, GFXMMU_BuffersTypeDef *Buffers) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check parameters */ + assert_param(IS_GFXMMU_ALL_INSTANCE(hgfxmmu->Instance)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(Buffers->Buf0Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(Buffers->Buf1Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(Buffers->Buf2Address)); + assert_param(IS_GFXMMU_BUFFER_ADDRESS(Buffers->Buf3Address)); + + /* Check GFXMMU state */ + if(hgfxmmu->State != HAL_GFXMMU_STATE_READY) + { + status = HAL_ERROR; + } + else + { + /* Modify physical buffer adresses on GFXMMU_BxCR registers */ + hgfxmmu->Instance->B0CR = Buffers->Buf0Address; + hgfxmmu->Instance->B1CR = Buffers->Buf1Address; + hgfxmmu->Instance->B2CR = Buffers->Buf2Address; + hgfxmmu->Instance->B3CR = Buffers->Buf3Address; + } + /* Return function status */ + return status; +} + +/** + * @brief This function handles the GFXMMU interrupts. + * @param hgfxmmu GFXMMU handle. + * @retval None. + */ +void HAL_GFXMMU_IRQHandler(GFXMMU_HandleTypeDef *hgfxmmu) +{ + uint32_t flags, interrupts, error; + + /* Read current flags and interrupts and determine which error occurs */ + flags = hgfxmmu->Instance->SR; + interrupts = (hgfxmmu->Instance->CR & GFXMMU_CR_ITS_MASK); + error = (flags & interrupts); + + if(error != 0U) + { + /* Clear flags on GFXMMU_FCR register */ + hgfxmmu->Instance->FCR = error; + + /* Update GFXMMU error code */ + hgfxmmu->ErrorCode |= error; + + /* Call GFXMMU error callback */ + HAL_GFXMMU_ErrorCallback(hgfxmmu); + } +} + +/** + * @brief Error callback. + * @param hgfxmmu GFXMMU handle. + * @retval None. + */ +__weak void HAL_GFXMMU_ErrorCallback(GFXMMU_HandleTypeDef *hgfxmmu) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hgfxmmu); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_GFXMMU_ErrorCallback could be implemented in the user file. + */ +} + +/** + * @} + */ + +/** @defgroup GFXMMU_Exported_Functions_Group3 State functions + * @brief GFXMMU state functions + * +@verbatim + ============================================================================== + ##### State functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Get GFXMMU handle state. + (+) Get GFXMMU error code. +@endverbatim + * @{ + */ + +/** + * @brief This function allows to get the current GFXMMU handle state. + * @param hgfxmmu GFXMMU handle. + * @retval GFXMMU state. + */ +HAL_GFXMMU_StateTypeDef HAL_GFXMMU_GetState(GFXMMU_HandleTypeDef *hgfxmmu) +{ + /* Return GFXMMU handle state */ + return hgfxmmu->State; +} + +/** + * @brief This function allows to get the current GFXMMU error code. + * @param hgfxmmu GFXMMU handle. + * @retval GFXMMU error code. + */ +uint32_t HAL_GFXMMU_GetError(GFXMMU_HandleTypeDef *hgfxmmu) +{ + uint32_t error_code; + + /* Enter in critical section */ + __disable_irq(); + + /* Store and reset GFXMMU error code */ + error_code = hgfxmmu->ErrorCode; + hgfxmmu->ErrorCode = GFXMMU_ERROR_NONE; + + /* Exit from critical section */ + __enable_irq(); + + /* Return GFXMMU error code */ + return error_code; +} + +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* End of private functions --------------------------------------------------*/ + +/** + * @} + */ +#endif /* GFXMMU */ +#endif /* HAL_GFXMMU_MODULE_ENABLED */ +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.h new file mode 100644 index 0000000000..7c8e6622b3 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gfxmmu.h @@ -0,0 +1,306 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_gfxmmu.h + * @author MCD Application Team + * @brief Header file of GFXMMU HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_GFXMMU_H +#define __STM32L4xx_HAL_GFXMMU_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +#if defined(GFXMMU) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup GFXMMU + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup GFXMMU_Exported_Types GFXMMU Exported Types + * @{ + */ + +/** + * @brief HAL GFXMMU states definition + */ +typedef enum +{ + HAL_GFXMMU_STATE_RESET = 0x00U, /*!< GFXMMU not initialized */ + HAL_GFXMMU_STATE_READY = 0x01U, /*!< GFXMMU initialized and ready for use */ +}HAL_GFXMMU_StateTypeDef; + +/** + * @brief GFXMMU buffers structure definition + */ +typedef struct +{ + uint32_t Buf0Address; /*!< Physical address of buffer 0. */ + uint32_t Buf1Address; /*!< Physical address of buffer 1. */ + uint32_t Buf2Address; /*!< Physical address of buffer 2. */ + uint32_t Buf3Address; /*!< Physical address of buffer 3. */ +}GFXMMU_BuffersTypeDef; + +/** + * @brief GFXMMU interrupts structure definition + */ +typedef struct +{ + FunctionalState Activation; /*!< Interrupts enable/disable */ + uint32_t UsedInterrupts; /*!< Interrupts used. + This parameter can be a values combination of @ref GFXMMU_Interrupts. + @note: Usefull only when interrupts are enabled. */ +}GFXMMU_InterruptsTypeDef; + +/** + * @brief GFXMMU init structure definition + */ +typedef struct +{ + uint32_t BlocksPerLine; /*!< Number of blocks of 16 bytes per line. + This parameter can be a value of @ref GFXMMU_BlocksPerLine. */ + uint32_t DefaultValue; /*!< Value returned when virtual memory location not physically mapped. */ + GFXMMU_BuffersTypeDef Buffers; /*!< Physical buffers addresses. */ + GFXMMU_InterruptsTypeDef Interrupts; /*!< Interrupts parameters. */ +}GFXMMU_InitTypeDef; + +/** + * @brief GFXMMU handle structure definition + */ +typedef struct +{ + GFXMMU_TypeDef *Instance; /*!< GFXMMU instance */ + GFXMMU_InitTypeDef Init; /*!< GFXMMU init parameters */ + HAL_GFXMMU_StateTypeDef State; /*!< GFXMMU state */ + __IO uint32_t ErrorCode; /*!< GFXMMU error code */ +}GFXMMU_HandleTypeDef; + +/** + * @brief GFXMMU LUT line structure definition + */ +typedef struct +{ + uint32_t LineNumber; /*!< LUT line number. + This parameter must be a number between Min_Data = 0 and Max_Data = 1023. */ + uint32_t LineStatus; /*!< LUT line enable/disable. + This parameter can be a value of @ref GFXMMU_LutLineStatus. */ + uint32_t FirstVisibleBlock; /*!< First visible block on this line. + This parameter must be a number between Min_Data = 0 and Max_Data = 255. */ + uint32_t LastVisibleBlock; /*!< Last visible block on this line. + This parameter must be a number between Min_Data = 0 and Max_Data = 255. */ + int32_t LineOffset; /*!< Offset of block 0 of the current line in physical buffer. + This parameter must be a number between Min_Data = -4080 and Max_Data = 4190208. + @note: Line offset has to be computed with the following formula: + LineOffset = [(Blocks already used) - (1st visible block)]*BlockSize. */ +}GFXMMU_LutLineTypeDef; + +/** + * @} + */ +/* End of exported types -----------------------------------------------------*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup GFXMMU_Exported_Constants GFXMMU Exported Constants + * @{ + */ + +/** @defgroup GFXMMU_BlocksPerLine GFXMMU blocks per line + * @{ + */ +#define GFXMMU_256BLOCKS 0x00000000U /*!< 256 blocks of 16 bytes per line */ +#define GFXMMU_192BLOCKS GFXMMU_CR_192BM /*!< 192 blocks of 16 bytes per line */ +/** + * @} + */ + +/** @defgroup GFXMMU_Interrupts GFXMMU interrupts + * @{ + */ +#define GFXMMU_AHB_MASTER_ERROR_IT GFXMMU_CR_AMEIE /*!< AHB master error interrupt */ +#define GFXMMU_BUFFER0_OVERFLOW_IT GFXMMU_CR_B0OIE /*!< Buffer 0 overflow interrupt */ +#define GFXMMU_BUFFER1_OVERFLOW_IT GFXMMU_CR_B1OIE /*!< Buffer 1 overflow interrupt */ +#define GFXMMU_BUFFER2_OVERFLOW_IT GFXMMU_CR_B2OIE /*!< Buffer 2 overflow interrupt */ +#define GFXMMU_BUFFER3_OVERFLOW_IT GFXMMU_CR_B3OIE /*!< Buffer 3 overflow interrupt */ +/** + * @} + */ + +/** @defgroup GFXMMU_Error_Code GFXMMU Error Code + * @{ + */ +#define GFXMMU_ERROR_NONE 0x00000000U /*!< No error */ +#define GFXMMU_ERROR_BUFFER0_OVERFLOW GFXMMU_SR_B0OF /*!< Buffer 0 overflow */ +#define GFXMMU_ERROR_BUFFER1_OVERFLOW GFXMMU_SR_B1OF /*!< Buffer 1 overflow */ +#define GFXMMU_ERROR_BUFFER2_OVERFLOW GFXMMU_SR_B2OF /*!< Buffer 2 overflow */ +#define GFXMMU_ERROR_BUFFER3_OVERFLOW GFXMMU_SR_B3OF /*!< Buffer 3 overflow */ +#define GFXMMU_ERROR_AHB_MASTER GFXMMU_SR_AMEF /*!< AHB master error */ +/** + * @} + */ + +/** @defgroup GFXMMU_LutLineStatus GFXMMU LUT line status + * @{ + */ +#define GFXMMU_LUT_LINE_DISABLE 0x00000000U /*!< LUT line disabled */ +#define GFXMMU_LUT_LINE_ENABLE GFXMMU_LUTxL_EN /*!< LUT line enabled */ +/** + * @} + */ + +/** + * @} + */ +/* End of exported constants -------------------------------------------------*/ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup GFXMMU_Exported_Macros GFXMMU Exported Macros + * @{ + */ + +/** @brief Reset GFXMMU handle state. + * @param __HANDLE__ GFXMMU handle. + * @retval None + */ +#define __HAL_GFXMMU_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_GFXMMU_STATE_RESET) + +/** + * @} + */ +/* End of exported macros ----------------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup GFXMMU_Exported_Functions GFXMMU Exported Functions + * @{ + */ + +/** @addtogroup GFXMMU_Exported_Functions_Group1 Initialization and de-initialization functions + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_GFXMMU_Init(GFXMMU_HandleTypeDef *hgfxmmu); +HAL_StatusTypeDef HAL_GFXMMU_DeInit(GFXMMU_HandleTypeDef *hgfxmmu); +void HAL_GFXMMU_MspInit(GFXMMU_HandleTypeDef *hgfxmmu); +void HAL_GFXMMU_MspDeInit(GFXMMU_HandleTypeDef *hgfxmmu); +/** + * @} + */ + +/** @addtogroup GFXMMU_Exported_Functions_Group2 Operations functions + * @{ + */ +/* Operation functions ********************************************************/ +HAL_StatusTypeDef HAL_GFXMMU_ConfigLut(GFXMMU_HandleTypeDef *hgfxmmu, + uint32_t FirstLine, + uint32_t LinesNumber, + uint32_t Address); + +HAL_StatusTypeDef HAL_GFXMMU_DisableLutLines(GFXMMU_HandleTypeDef *hgfxmmu, + uint32_t FirstLine, + uint32_t LinesNumber); + +HAL_StatusTypeDef HAL_GFXMMU_ConfigLutLine(GFXMMU_HandleTypeDef *hgfxmmu, GFXMMU_LutLineTypeDef *lutLine); + +HAL_StatusTypeDef HAL_GFXMMU_ModifyBuffers(GFXMMU_HandleTypeDef *hgfxmmu, GFXMMU_BuffersTypeDef *Buffers); + +void HAL_GFXMMU_IRQHandler(GFXMMU_HandleTypeDef *hgfxmmu); + +void HAL_GFXMMU_ErrorCallback(GFXMMU_HandleTypeDef *hgfxmmu); +/** + * @} + */ + +/** @defgroup GFXMMU_Exported_Functions_Group3 State functions + * @{ + */ +/* State function *************************************************************/ +HAL_GFXMMU_StateTypeDef HAL_GFXMMU_GetState(GFXMMU_HandleTypeDef *hgfxmmu); + +uint32_t HAL_GFXMMU_GetError(GFXMMU_HandleTypeDef *hgfxmmu); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup GFXMMU_Private_Macros GFXMMU Private Macros +* @{ +*/ +#define IS_GFXMMU_BLOCKS_PER_LINE(VALUE) (((VALUE) == GFXMMU_256BLOCKS) || \ + ((VALUE) == GFXMMU_192BLOCKS)) + +#define IS_GFXMMU_BUFFER_ADDRESS(VALUE) (((VALUE) & 0xFU) == 0U) + +#define IS_GFXMMU_INTERRUPTS(VALUE) (((VALUE) & 0x1FU) != 0U) + +#define IS_GFXMMU_LUT_LINE(VALUE) ((VALUE) < 1024U) + +#define IS_GFXMMU_LUT_LINES_NUMBER(VALUE) (((VALUE) > 0U) && ((VALUE) <= 1024U)) + +#define IS_GFXMMU_LUT_LINE_STATUS(VALUE) (((VALUE) == GFXMMU_LUT_LINE_DISABLE) || \ + ((VALUE) == GFXMMU_LUT_LINE_ENABLE)) + +#define IS_GFXMMU_LUT_BLOCK(VALUE) ((VALUE) < 256U) + +#define IS_GFXMMU_LUT_LINE_OFFSET(VALUE) (((VALUE) >= -4080) && ((VALUE) <= 4190208)) +/** + * @} + */ +/* End of private macros -----------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ +#endif /* GFXMMU */ +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_GFXMMU_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.c index 7b52c96902..280eb31cfc 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_gpio.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief GPIO HAL module driver. * This file provides firmware functions to manage the following * functionalities of the General Purpose Input/Output (GPIO) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.h index d386421f53..9f4bbac544 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_gpio.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of GPIO HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio_ex.h index b58d43c787..63c69cb9e0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_gpio_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_gpio_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of GPIO HAL Extended module. ****************************************************************************** * @attention @@ -572,6 +570,150 @@ #endif /* STM32L496xx || STM32L4A6xx */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +/*---STM32L4R5xx/STM32L4R7xx/STM32L4R9xx/STM32L4S5xx/STM32L4S7xx/STM32L4S9xx--*/ +/** + * @brief AF 0 selection + */ +#define GPIO_AF0_RTC_50Hz ((uint8_t)0x00) /* RTC_50Hz Alternate Function mapping */ +#define GPIO_AF0_MCO ((uint8_t)0x00) /* MCO (MCO1 and MCO2) Alternate Function mapping */ +#define GPIO_AF0_SWJ ((uint8_t)0x00) /* SWJ (SWD and JTAG) Alternate Function mapping */ +#define GPIO_AF0_TRACE ((uint8_t)0x00) /* TRACE Alternate Function mapping */ + +/** + * @brief AF 1 selection + */ +#define GPIO_AF1_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */ +#define GPIO_AF1_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */ +#define GPIO_AF1_TIM5 ((uint8_t)0x01) /* TIM5 Alternate Function mapping */ +#define GPIO_AF1_TIM8 ((uint8_t)0x01) /* TIM8 Alternate Function mapping */ +#define GPIO_AF1_LPTIM1 ((uint8_t)0x01) /* LPTIM1 Alternate Function mapping */ +#define GPIO_AF1_IR ((uint8_t)0x01) /* IR Alternate Function mapping */ + +/** + * @brief AF 2 selection + */ +#define GPIO_AF2_TIM1 ((uint8_t)0x02) /* TIM1 Alternate Function mapping */ +#define GPIO_AF2_TIM2 ((uint8_t)0x02) /* TIM2 Alternate Function mapping */ +#define GPIO_AF2_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */ +#define GPIO_AF2_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */ +#define GPIO_AF2_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */ + +/** + * @brief AF 3 selection + */ +#define GPIO_AF3_I2C4 ((uint8_t)0x03) /* I2C4 Alternate Function mapping */ +#define GPIO_AF3_OCTOSPIM_P1 ((uint8_t)0x03) /* OctoSPI Manager Port 1 Alternate Function mapping */ +#define GPIO_AF3_SAI1 ((uint8_t)0x03) /* SAI1 Alternate Function mapping */ +#define GPIO_AF3_SPI2 ((uint8_t)0x03) /* SPI2 Alternate Function mapping */ +#define GPIO_AF3_TIM1_COMP1 ((uint8_t)0x03) /* TIM1/COMP1 Break in Alternate Function mapping */ +#define GPIO_AF3_TIM1_COMP2 ((uint8_t)0x03) /* TIM1/COMP2 Break in Alternate Function mapping */ +#define GPIO_AF3_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */ +#define GPIO_AF3_TIM8_COMP1 ((uint8_t)0x03) /* TIM8/COMP1 Break in Alternate Function mapping */ +#define GPIO_AF3_TIM8_COMP2 ((uint8_t)0x03) /* TIM8/COMP2 Break in Alternate Function mapping */ +#define GPIO_AF3_USART2 ((uint8_t)0x03) /* USART2 Alternate Function mapping */ + +/** + * @brief AF 4 selection + */ +#define GPIO_AF4_I2C1 ((uint8_t)0x04) /* I2C1 Alternate Function mapping */ +#define GPIO_AF4_I2C2 ((uint8_t)0x04) /* I2C2 Alternate Function mapping */ +#define GPIO_AF4_I2C3 ((uint8_t)0x04) /* I2C3 Alternate Function mapping */ +#define GPIO_AF4_I2C4 ((uint8_t)0x04) /* I2C4 Alternate Function mapping */ +#define GPIO_AF4_DCMI ((uint8_t)0x04) /* DCMI Alternate Function mapping */ + +/** + * @brief AF 5 selection + */ +#define GPIO_AF5_DCMI ((uint8_t)0x05) /* DCMI Alternate Function mapping */ +#define GPIO_AF5_DFSDM1 ((uint8_t)0x05) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF5_I2C4 ((uint8_t)0x05) /* I2C4 Alternate Function mapping */ +#define GPIO_AF5_OCTOSPIM_P1 ((uint8_t)0x05) /* OctoSPI Manager Port 1 Alternate Function mapping */ +#define GPIO_AF5_OCTOSPIM_P2 ((uint8_t)0x05) /* OctoSPI Manager Port 2 Alternate Function mapping */ +#define GPIO_AF5_SPI1 ((uint8_t)0x05) /* SPI1 Alternate Function mapping */ +#define GPIO_AF5_SPI2 ((uint8_t)0x05) /* SPI2 Alternate Function mapping */ +#define GPIO_AF5_SPI3 ((uint8_t)0x05) /* SPI2 Alternate Function mapping */ + +/** + * @brief AF 6 selection + */ +#define GPIO_AF6_DFSDM1 ((uint8_t)0x06) /* DFSDM1 Alternate Function mapping */ +#define GPIO_AF6_I2C3 ((uint8_t)0x06) /* I2C3 Alternate Function mapping */ +#define GPIO_AF6_SPI3 ((uint8_t)0x06) /* SPI3 Alternate Function mapping */ + +/** + * @brief AF 7 selection + */ +#define GPIO_AF7_USART1 ((uint8_t)0x07) /* USART1 Alternate Function mapping */ +#define GPIO_AF7_USART2 ((uint8_t)0x07) /* USART2 Alternate Function mapping */ +#define GPIO_AF7_USART3 ((uint8_t)0x07) /* USART3 Alternate Function mapping */ + +/** + * @brief AF 8 selection + */ +#define GPIO_AF8_LPUART1 ((uint8_t)0x08) /* LPUART1 Alternate Function mapping */ +#define GPIO_AF8_SDMMC1 ((uint8_t)0x08) /* SDMMC1 Alternate Function mapping */ +#define GPIO_AF8_UART4 ((uint8_t)0x08) /* UART4 Alternate Function mapping */ +#define GPIO_AF8_UART5 ((uint8_t)0x08) /* UART5 Alternate Function mapping */ + +/** + * @brief AF 9 selection + */ +#define GPIO_AF9_CAN1 ((uint8_t)0x09) /* CAN1 Alternate Function mapping */ +#define GPIO_AF9_LTDC ((uint8_t)0x09) /* LTDC Alternate Function mapping */ +#define GPIO_AF9_TSC ((uint8_t)0x09) /* TSC Alternate Function mapping */ + +/** + * @brief AF 10 selection + */ +#define GPIO_AF10_DCMI ((uint8_t)0x0A) /* DCMI Alternate Function mapping */ +#define GPIO_AF10_OCTOSPIM_P1 ((uint8_t)0x0A) /* OctoSPI Manager Port 1 Alternate Function mapping */ +#define GPIO_AF10_OCTOSPIM_P2 ((uint8_t)0x0A) /* OctoSPI Manager Port 2 Alternate Function mapping */ +#define GPIO_AF10_OTG_FS ((uint8_t)0x0A) /* OTG_FS Alternate Function mapping */ + +/** + * @brief AF 11 selection + */ +#define GPIO_AF11_DSI ((uint8_t)0x0B) /* DSI Alternate Function mapping */ +#define GPIO_AF11_LTDC ((uint8_t)0x0B) /* LTDC Alternate Function mapping */ + +/** + * @brief AF 12 selection + */ +#define GPIO_AF12_COMP1 ((uint8_t)0x0C) /* COMP1 Alternate Function mapping */ +#define GPIO_AF12_COMP2 ((uint8_t)0x0C) /* COMP2 Alternate Function mapping */ +#define GPIO_AF12_DSI ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_FMC ((uint8_t)0x0C) /* FMC Alternate Function mapping */ +#define GPIO_AF12_SDMMC1 ((uint8_t)0x0C) /* SDMMC1 Alternate Function mapping */ +#define GPIO_AF12_TIM1_COMP1 ((uint8_t)0x0C) /* TIM1/COMP1 Break in Alternate Function mapping */ +#define GPIO_AF12_TIM1_COMP2 ((uint8_t)0x0C) /* TIM1/COMP2 Break in Alternate Function mapping */ +#define GPIO_AF12_TIM8_COMP2 ((uint8_t)0x0C) /* TIM8/COMP2 Break in Alternate Function mapping */ + +/** + * @brief AF 13 selection + */ +#define GPIO_AF13_SAI1 ((uint8_t)0x0D) /* SAI1 Alternate Function mapping */ +#define GPIO_AF13_SAI2 ((uint8_t)0x0D) /* SAI2 Alternate Function mapping */ +#define GPIO_AF13_TIM8_COMP1 ((uint8_t)0x0D) /* TIM8/COMP1 Break in Alternate Function mapping */ + +/** + * @brief AF 14 selection + */ +#define GPIO_AF14_TIM15 ((uint8_t)0x0E) /* TIM15 Alternate Function mapping */ +#define GPIO_AF14_TIM16 ((uint8_t)0x0E) /* TIM16 Alternate Function mapping */ +#define GPIO_AF14_TIM17 ((uint8_t)0x0E) /* TIM17 Alternate Function mapping */ +#define GPIO_AF14_LPTIM2 ((uint8_t)0x0E) /* LPTIM2 Alternate Function mapping */ +#define GPIO_AF14_TIM8_COMP2 ((uint8_t)0x0E) /* TIM8/COMP2 Break in Alternate Function mapping */ + +/** + * @brief AF 15 selection + */ +#define GPIO_AF15_EVENTOUT ((uint8_t)0x0F) /* EVENTOUT Alternate Function mapping */ + +#define IS_GPIO_AF(AF) ((AF) <= (uint8_t)0x0F) + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** * @} */ @@ -641,6 +783,18 @@ #endif /* STM32L496xx || STM32L4A6xx */ +#if defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + +#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA))? 0U :\ + ((__GPIOx__) == (GPIOB))? 1U :\ + ((__GPIOx__) == (GPIOC))? 2U :\ + ((__GPIOx__) == (GPIOD))? 3U :\ + ((__GPIOx__) == (GPIOE))? 4U :\ + ((__GPIOx__) == (GPIOF))? 5U :\ + ((__GPIOx__) == (GPIOG))? 6U :\ + ((__GPIOx__) == (GPIOH))? 7U : 8U) + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.c index 2b84bd69cc..7fbd5f94f0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hash.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief HASH HAL module driver. * This file provides firmware functions to manage the following * functionalities of the HASH peripheral: @@ -140,7 +138,7 @@ #ifdef HAL_HASH_MODULE_ENABLED -#if defined (STM32L4A6xx) +#if defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -182,6 +180,14 @@ * @} */ +/** @defgroup HASH_DMA_Suspension_Words_Limit HASH DMA suspension words limit + * @{ + */ +#define HASH_DMA_SUSPENSION_WORDS_LIMIT 20 /*!< Number of words below which DMA suspension is aborted */ +/** + * @} + */ + /** * @} */ @@ -1083,9 +1089,32 @@ HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash) } else { - /* Set State as suspended (it may be required to update it if suspension failed). - The context saving operations must be carried out to be able to resume later on. */ - hhash->State = HAL_HASH_STATE_SUSPENDED; + + /* Make sure there is enough time to suspend the processing */ + tmp_remaining_DMATransferSize_inWords = hhash->hdmain->Instance->CNDTR; + if (tmp_remaining_DMATransferSize_inWords <= HASH_DMA_SUSPENSION_WORDS_LIMIT) + { + /* No suspension attempted since almost to the end of the transferred data. */ + /* Best option for user code is to wrap up low priority message hashing */ + return HAL_ERROR; + } + + /* Wait for DMAS to be reset */ + if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK) + { + return HAL_TIMEOUT; + } + + if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET) + { + return HAL_ERROR; + } + + /* Wait for DMAS to be set */ + if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, RESET, HASH_TIMEOUTVALUE) != HAL_OK) + { + return HAL_TIMEOUT; + } /* Disable DMA channel */ HAL_DMA_Abort(hhash->hdmain); @@ -1093,6 +1122,16 @@ HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash) /* Clear DMAE bit */ CLEAR_BIT(HASH->CR,HASH_CR_DMAE); + if (HASH_WaitOnFlagUntilTimeout(hhash, HASH_FLAG_BUSY, SET, HASH_TIMEOUTVALUE) != HAL_OK) + { + return HAL_TIMEOUT; + } + + if (__HAL_HASH_GET_FLAG(HASH_FLAG_DCIS) != RESET) + { + return HAL_ERROR; + } + /* At this point, DMA interface is disabled and no transfer is on-going */ /* Retrieve from the DMA handle how many words remain to be written */ tmp_remaining_DMATransferSize_inWords = hhash->hdmain->Instance->CNDTR; @@ -1108,7 +1147,6 @@ HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash) priority block processing (HASH case) - re-attempt a new suspension (HMAC case) */ - hhash->State = HAL_HASH_STATE_READY; return HAL_ERROR; } else @@ -1126,6 +1164,7 @@ HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash) { tmp_remaining_DMATransferSize_inWords--; /* one less word to be transferred again */ } + /* Accordingly, update the input pointer that points at the next word to be transferred to the IP by DMA */ hhash->pHashInBuffPtr += 4 * (tmp_initial_DMATransferSize_inWords - tmp_remaining_DMATransferSize_inWords) ; @@ -1134,6 +1173,9 @@ HAL_StatusTypeDef HAL_HASH_DMAFeed_ProcessSuspend(HASH_HandleTypeDef *hhash) } + /* Set State as suspended */ + hhash->State = HAL_HASH_STATE_SUSPENDED; + return HAL_OK; } @@ -2250,6 +2292,7 @@ HAL_StatusTypeDef HASH_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, processing was suspended */ inputaddr = (uint32_t)hhash->pHashInBuffPtr; /* DMA transfer start address */ inputSize = hhash->HashInCount; /* DMA transfer size (in bytes) */ + } /* Set the HASH DMA transfert complete callback */ @@ -2668,7 +2711,7 @@ HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, * @} */ -#endif /* defined (STM32L4A6xx) */ +#endif /* defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) */ #endif /* HAL_HASH_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.h index 17682fa6af..be9bb69822 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hash.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of HASH HAL module. ****************************************************************************** * @attention @@ -43,7 +41,7 @@ extern "C" { #endif -#if defined (STM32L4A6xx) +#if defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -570,7 +568,7 @@ HAL_StatusTypeDef HMAC_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, * @} */ -#endif /* defined (STM32L4A6xx) */ +#endif /* defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.c index ffa5eecfca..0b5fe23b97 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hash_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended HASH HAL module driver. * This file provides firmware functions to manage the following * functionalities of the HASH peripheral for SHA-224 and SHA-256 @@ -99,7 +97,7 @@ #ifdef HAL_HASH_MODULE_ENABLED -#if defined (STM32L4A6xx) +#if defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -927,7 +925,7 @@ HAL_StatusTypeDef HAL_HMACEx_SHA256_Step2_3_DMA(HASH_HandleTypeDef *hhash, uint8 * @} */ -#endif /* defined (STM32L4A6xx) */ +#endif /* defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) */ #endif /* HAL_HASH_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.h index 3e930ed5ac..8a0011e62c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hash_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hash_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of HASH HAL module. ****************************************************************************** * @attention @@ -43,7 +41,7 @@ extern "C" { #endif -#if defined (STM32L4A6xx) +#if defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -170,7 +168,7 @@ HAL_StatusTypeDef HAL_HMACEx_SHA256_Step2_3_DMA(HASH_HandleTypeDef *hhash, uint8 * @} */ -#endif /* defined (STM32L4A6xx) */ +#endif /* defined (STM32L4A6xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c index e909779e37..a1b683449b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hcd.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief HCD HAL module driver. * This file provides firmware functions to manage the following * functionalities of the USB Peripheral Controller: @@ -73,7 +71,8 @@ #include "stm32l4xx_hal.h" #if defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -1279,6 +1278,7 @@ static void HCD_Port_IRQHandler (HCD_HandleTypeDef *hhcd) */ #endif /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.h index 2c34736126..d79b1e531e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_hcd.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of HCD HAL module. ****************************************************************************** * @attention @@ -44,7 +42,8 @@ #endif #if defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_usb.h" @@ -252,7 +251,8 @@ uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd); */ #endif /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c index 7b6fb65d98..f46bff66fa 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_i2c.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief I2C HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Inter Integrated Circuit (I2C) peripheral: @@ -238,7 +236,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** - */ + */ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal.h" @@ -303,8 +301,8 @@ /* Private macro -------------------------------------------------------------*/ #define I2C_GET_DMA_REMAIN_DATA(__HANDLE__) ((((__HANDLE__)->State) == HAL_I2C_STATE_BUSY_TX) ? \ - ((uint32_t)((__HANDLE__)->hdmatx->Instance->CNDTR)) : \ - ((uint32_t)((__HANDLE__)->hdmarx->Instance->CNDTR))) + ((uint32_t)(((DMA_Channel_TypeDef *)(__HANDLE__)->hdmatx->Instance)->CNDTR)) : \ + ((uint32_t)(((DMA_Channel_TypeDef *)(__HANDLE__)->hdmarx->Instance)->CNDTR))) /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ @@ -366,7 +364,7 @@ static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, ui */ /** @defgroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + * @brief Initialization and Configuration functions * @verbatim =============================================================================== @@ -406,7 +404,7 @@ static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, ui HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) { /* Check the I2C handle allocation */ - if(hi2c == NULL) + if (hi2c == NULL) { return HAL_ERROR; } @@ -421,7 +419,7 @@ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode)); assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode)); - if(hi2c->State == HAL_I2C_STATE_RESET) + if (hi2c->State == HAL_I2C_STATE_RESET) { /* Allocate lock resource and initialize it */ hi2c->Lock = HAL_UNLOCKED; @@ -444,7 +442,7 @@ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) hi2c->Instance->OAR1 &= ~I2C_OAR1_OA1EN; /* Configure I2Cx: Own Address1 and ack own address1 mode */ - if(hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) { hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1); } @@ -455,7 +453,7 @@ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) /*---------------------------- I2Cx CR2 Configuration ----------------------*/ /* Configure I2Cx: Addressing Master mode */ - if(hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) { hi2c->Instance->CR2 = (I2C_CR2_ADD10); } @@ -493,7 +491,7 @@ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c) { /* Check the I2C handle allocation */ - if(hi2c == NULL) + if (hi2c == NULL) { return HAL_ERROR; } @@ -557,7 +555,7 @@ __weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) */ /** @defgroup I2C_Exported_Functions_Group2 Input and Output operation functions - * @brief Data transfers functions + * @brief Data transfers functions * @verbatim =============================================================================== @@ -569,7 +567,7 @@ __weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) (#) There are two modes of transfer: (++) Blocking mode : The communication is performed in the polling mode. - The status of all data processing is returned by the same function + The status of all data processing is returned by the same function after finishing transfer. (++) No-Blocking mode : The communication is performed using Interrupts or DMA. These functions return the status of the transfer startup. @@ -630,7 +628,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA { uint32_t tickstart = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -638,7 +636,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -646,7 +644,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA hi2c->State = HAL_I2C_STATE_BUSY_TX; hi2c->Mode = HAL_I2C_MODE_MASTER; hi2c->ErrorCode = HAL_I2C_ERROR_NONE; - + /* Prepare transfer parameters */ hi2c->pBuffPtr = pData; hi2c->XferCount = Size; @@ -654,7 +652,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA /* Send Slave Address */ /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); @@ -665,12 +663,12 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_AUTOEND_MODE, I2C_GENERATE_START_WRITE); } - while(hi2c->XferCount > 0U) + while (hi2c->XferCount > 0U) { /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -684,15 +682,15 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA hi2c->XferCount--; hi2c->XferSize--; - if((hi2c->XferSize == 0U) && (hi2c->XferCount!=0U)) + if ((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) { /* Wait until TCR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -707,9 +705,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevA /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ /* Wait until STOPF flag is set */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -754,7 +752,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd { uint32_t tickstart = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -762,7 +760,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -778,7 +776,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd /* Send Slave Address */ /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_GENERATE_START_READ); @@ -789,12 +787,12 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_AUTOEND_MODE, I2C_GENERATE_START_READ); } - while(hi2c->XferCount > 0U) + while (hi2c->XferCount > 0U) { /* Wait until RXNE flag is set */ - if(I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -809,15 +807,15 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd hi2c->XferSize--; hi2c->XferCount--; - if((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) + if ((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) { /* Wait until TCR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -832,9 +830,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ /* Wait until STOPF flag is set */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -865,7 +863,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAd } /** - * @brief Transmits in slave mode an amount of data in blocking mode. + * @brief Transmits in slave mode an amount of data in blocking mode. * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains * the configuration information for the specified I2C. * @param pData Pointer to data buffer @@ -877,9 +875,9 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData { uint32_t tickstart = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -902,7 +900,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData hi2c->Instance->CR2 &= ~I2C_CR2_NACK; /* Wait until ADDR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -910,13 +908,13 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData } /* Clear ADDR flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); /* If 10bit addressing mode is selected */ - if(hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) { /* Wait until ADDR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -924,26 +922,26 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData } /* Clear ADDR flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); } /* Wait until DIR flag is set Transmitter mode */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, RESET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; return HAL_TIMEOUT; } - while(hi2c->XferCount > 0U) + while (hi2c->XferCount > 0U) { /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -959,12 +957,12 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData } /* Wait until STOP flag is set */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Normal use case for Transmitter mode */ /* A NACK is generated to confirm the end of transfer */ @@ -977,10 +975,10 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData } /* Clear STOP flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_STOPF); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); - /* Wait until BUSY flag is reset */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + /* Wait until BUSY flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -1017,9 +1015,9 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, { uint32_t tickstart = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -1042,7 +1040,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, hi2c->Instance->CR2 &= ~I2C_CR2_NACK; /* Wait until ADDR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -1050,33 +1048,33 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, } /* Clear ADDR flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); /* Wait until DIR flag is reset Receiver mode */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, SET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_DIR, SET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; return HAL_TIMEOUT; } - while(hi2c->XferCount > 0U) + while (hi2c->XferCount > 0U) { /* Wait until RXNE flag is set */ - if(I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; /* Store Last receive data if any */ - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) { /* Read data from RXDR */ (*hi2c->pBuffPtr++) = hi2c->Instance->RXDR; hi2c->XferCount--; } - if(hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) + if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) { return HAL_TIMEOUT; } @@ -1092,12 +1090,12 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, } /* Wait until STOP flag is set */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -1108,10 +1106,10 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, } /* Clear STOP flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_STOPF); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); /* Wait until BUSY flag is reset */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK) { /* Disable Address Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -1149,9 +1147,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t D { uint32_t xfermode = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -1168,8 +1166,8 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t D hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_IT; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -1185,7 +1183,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t D I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_WRITE); /* Process Unlocked */ - __HAL_UNLOCK(hi2c); + __HAL_UNLOCK(hi2c); /* Note : The I2C interrupts must be enabled after unlocking current process to avoid the risk of I2C interrupt handle execution before current @@ -1218,9 +1216,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t De { uint32_t xfermode = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -1237,8 +1235,8 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t De hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_IT; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -1252,7 +1250,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t De /* Send Slave Address */ /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); - + /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -1283,7 +1281,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t De */ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) { - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -1323,7 +1321,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pD } /** - * @brief Receive in slave mode an amount of data in non-blocking mode with Interrupt + * @brief Receive in slave mode an amount of data in non-blocking mode with Interrupt * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains * the configuration information for the specified I2C. * @param pData Pointer to data buffer @@ -1332,7 +1330,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pD */ HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) { - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -1385,9 +1383,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t { uint32_t xfermode = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -1404,8 +1402,8 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_DMA; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -1416,7 +1414,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t xfermode = I2C_AUTOEND_MODE; } - if(hi2c->XferSize > 0U) + if (hi2c->XferSize > 0U) { /* Set the I2C DMA transfer complete callback */ hi2c->hdmatx->XferCpltCallback = I2C_DMAMasterTransmitCplt; @@ -1454,7 +1452,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t { /* Update Transfer ISR function pointer */ hi2c->XferISR = I2C_Master_ISR_IT; - + /* Send Slave Address */ /* Set NBYTES to write and generate START condition */ I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_AUTOEND_MODE, I2C_GENERATE_START_WRITE); @@ -1493,9 +1491,9 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D { uint32_t xfermode = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -1512,8 +1510,8 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_DMA; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -1524,7 +1522,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D xfermode = I2C_AUTOEND_MODE; } - if(hi2c->XferSize > 0U) + if (hi2c->XferSize > 0U) { /* Set the I2C DMA transfer complete callback */ hi2c->hdmarx->XferCpltCallback = I2C_DMAMasterReceiveCplt; @@ -1541,7 +1539,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D /* Send Slave Address */ /* Set NBYTES to read and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - I2C_TransferConfig(hi2c,DevAddress,hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); /* Update XferCount value */ hi2c->XferCount -= hi2c->XferSize; @@ -1562,7 +1560,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D { /* Update Transfer ISR function pointer */ hi2c->XferISR = I2C_Master_ISR_IT; - + /* Send Slave Address */ /* Set NBYTES to read and generate START condition */ I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_AUTOEND_MODE, I2C_GENERATE_START_READ); @@ -1596,12 +1594,12 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D */ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) { - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; - } + } /* Process Locked */ __HAL_LOCK(hi2c); @@ -1642,7 +1640,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *p I2C_Enable_IRQ(hi2c, I2C_XFER_LISTEN_IT); /* Enable DMA Request */ - hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; + hi2c->Instance->CR1 |= I2C_CR1_TXDMAEN; return HAL_OK; } @@ -1662,9 +1660,9 @@ HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *p */ HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) { - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -1737,9 +1735,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -1750,7 +1748,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -1765,9 +1763,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress hi2c->XferISR = NULL; /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -1782,7 +1780,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress } /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -1796,9 +1794,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress do { /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -1813,15 +1811,15 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress hi2c->XferCount--; hi2c->XferSize--; - if((hi2c->XferSize == 0U) && (hi2c->XferCount!=0U)) + if ((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) { /* Wait until TCR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -1833,13 +1831,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress } } - }while(hi2c->XferCount > 0U); + } + while (hi2c->XferCount > 0U); /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ - /* Wait until STOPF flag is reset */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -1889,9 +1888,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -1902,7 +1901,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -1917,9 +1916,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, hi2c->XferISR = NULL; /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -1935,7 +1934,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, /* Send Slave Address */ /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_GENERATE_START_READ); @@ -1949,7 +1948,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, do { /* Wait until RXNE flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -1959,15 +1958,15 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, hi2c->XferSize--; hi2c->XferCount--; - if((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) + if ((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) { /* Wait until TCR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -1978,13 +1977,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, I2C_AUTOEND_MODE, I2C_NO_STARTSTOP); } } - }while(hi2c->XferCount > 0U); + } + while (hi2c->XferCount > 0U); /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ - /* Wait until STOPF flag is reset */ - if(I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -2033,14 +2033,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddr /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } - - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -2060,8 +2060,8 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddr hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_IT; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2073,9 +2073,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddr } /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2090,12 +2090,12 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddr } /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - I2C_TransferConfig(hi2c,DevAddress, hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); + I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_NO_STARTSTOP); /* Process Unlocked */ - __HAL_UNLOCK(hi2c); + __HAL_UNLOCK(hi2c); - /* Note : The I2C interrupts must be enabled after unlocking current process + /* Note : The I2C interrupts must be enabled after unlocking current process to avoid the risk of I2C interrupt handle execution before current process unlock */ @@ -2132,14 +2132,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddre /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } - - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -2159,8 +2159,8 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddre hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_IT; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2172,9 +2172,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddre } /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2189,7 +2189,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddre } /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - I2C_TransferConfig(hi2c,DevAddress,hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2230,14 +2230,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -2257,8 +2257,8 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd hi2c->XferCount = Size; hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_DMA; - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2270,9 +2270,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd } /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2346,14 +2346,14 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr /* Check the parameters */ assert_param(IS_I2C_MEMADD_SIZE(MemAddSize)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -2374,7 +2374,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->XferISR = I2C_Master_ISR_DMA; - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2386,9 +2386,9 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr } /* Send Slave Address and Memory Address */ - if(I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) + if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2416,7 +2416,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->RXDR, (uint32_t)pData, hi2c->XferSize); /* Set NBYTES to write and reload if hi2c->XferCount > MAX_NBYTE_SIZE and generate RESTART */ - I2C_TransferConfig(hi2c,DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); + I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, I2C_GENERATE_START_READ); /* Update XferCount value */ hi2c->XferCount -= hi2c->XferSize; @@ -2458,9 +2458,9 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd __IO uint32_t I2C_Trials = 0U; - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } @@ -2474,16 +2474,16 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd do { /* Generate Start */ - hi2c->Instance->CR2 = I2C_GENERATE_START(hi2c->Init.AddressingMode,DevAddress); + hi2c->Instance->CR2 = I2C_GENERATE_START(hi2c->Init.AddressingMode, DevAddress); /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ /* Wait until STOPF flag is set or a NACK flag is set*/ tickstart = HAL_GetTick(); - while((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) && (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET) && (hi2c->State != HAL_I2C_STATE_TIMEOUT)) + while ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) && (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET) && (hi2c->State != HAL_I2C_STATE_TIMEOUT)) { - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + if (Timeout != HAL_MAX_DELAY) + { + if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) { /* Device is ready */ hi2c->State = HAL_I2C_STATE_READY; @@ -2491,14 +2491,14 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd __HAL_UNLOCK(hi2c); return HAL_TIMEOUT; } - } + } } /* Check if the NACKF flag has not been set */ if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == RESET) { - /* Wait until STOPF flag is reset */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -2517,7 +2517,7 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd else { /* Wait until STOPF flag is reset */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -2535,8 +2535,8 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd /* Generate Stop */ hi2c->Instance->CR2 |= I2C_CR2_STOP; - /* Wait until STOPF flag is reset */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK) { return HAL_TIMEOUT; } @@ -2544,7 +2544,8 @@ HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAdd /* Clear STOP Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); } - }while(I2C_Trials < Trials); + } + while (I2C_Trials < Trials); hi2c->State = HAL_I2C_STATE_READY; @@ -2579,7 +2580,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, /* Check the parameters */ assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -2595,7 +2596,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, hi2c->XferISR = I2C_Master_ISR_IT; /* If size > MAX_NBYTE_SIZE, use reload mode */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2606,6 +2607,13 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, xfermode = hi2c->XferOptions; } + /* If transfer direction not change, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) + { + xferrequest = I2C_NO_STARTSTOP; + } + /* Send Slave Address and set NBYTES to write */ I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, xferrequest); @@ -2645,7 +2653,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, /* Check the parameters */ assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -2661,7 +2669,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, hi2c->XferISR = I2C_Master_ISR_IT; /* If hi2c->XferCount > MAX_NBYTE_SIZE, use reload mode */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -2672,8 +2680,15 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, xfermode = hi2c->XferOptions; } + /* If transfer direction not change, do not generate Restart Condition */ + /* Mean Previous state is same as current state */ + if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) + { + xferrequest = I2C_NO_STARTSTOP; + } + /* Send Slave Address and set NBYTES to read */ - I2C_TransferConfig(hi2c,DevAddress, hi2c->XferSize, xfermode, xferrequest); + I2C_TransferConfig(hi2c, DevAddress, hi2c->XferSize, xfermode, xferrequest); /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -2706,9 +2721,9 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, /* Check the parameters */ assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) + if ((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -2718,10 +2733,10 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, /* Process Locked */ __HAL_LOCK(hi2c); - + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ /* and then toggle the HAL slave RX state to TX state */ - if(hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) { /* Disable associated Interrupts */ I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT); @@ -2741,11 +2756,11 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, hi2c->XferOptions = XferOptions; hi2c->XferISR = I2C_Slave_ISR_IT; - if(I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_RECEIVE) { /* Clear ADDR flag after prepare the transfer parameters */ /* This action will generate an acknowledge to the Master */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); } /* Process Unlocked */ @@ -2780,9 +2795,9 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, u /* Check the parameters */ assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) + if ((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } @@ -2792,15 +2807,15 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, u /* Process Locked */ __HAL_LOCK(hi2c); - + /* I2C cannot manage full duplex exchange so disable previous IT enabled if any */ /* and then toggle the HAL slave TX state to RX state */ - if(hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) { /* Disable associated Interrupts */ I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT); } - + hi2c->State = HAL_I2C_STATE_BUSY_RX_LISTEN; hi2c->Mode = HAL_I2C_MODE_SLAVE; hi2c->ErrorCode = HAL_I2C_ERROR_NONE; @@ -2815,11 +2830,11 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, u hi2c->XferOptions = XferOptions; hi2c->XferISR = I2C_Slave_ISR_IT; - if(I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) + if (I2C_GET_DIR(hi2c) == I2C_DIRECTION_TRANSMIT) { /* Clear ADDR flag after prepare the transfer parameters */ /* This action will generate an acknowledge to the Master */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); } /* Process Unlocked */ @@ -2847,7 +2862,7 @@ HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, u */ HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c) { - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { hi2c->State = HAL_I2C_STATE_LISTEN; hi2c->XferISR = I2C_Slave_ISR_IT; @@ -2875,7 +2890,7 @@ HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) uint32_t tmp; /* Disable Address listen mode only if a transfer is not ongoing */ - if(hi2c->State == HAL_I2C_STATE_LISTEN) + if (hi2c->State == HAL_I2C_STATE_LISTEN) { tmp = (uint32_t)(hi2c->State) & I2C_STATE_MSK; hi2c->PreviousState = tmp | (uint32_t)(hi2c->Mode); @@ -2904,7 +2919,7 @@ HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) */ HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress) { - if(hi2c->Mode == HAL_I2C_MODE_MASTER) + if (hi2c->Mode == HAL_I2C_MODE_MASTER) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -2923,7 +2938,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevA /* Process Unlocked */ __HAL_UNLOCK(hi2c); - /* Note : The I2C interrupts must be enabled after unlocking current process + /* Note : The I2C interrupts must be enabled after unlocking current process to avoid the risk of I2C interrupt handle execution before current process unlock */ I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); @@ -2944,7 +2959,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevA /** @defgroup I2C_IRQ_Handler_and_Callbacks IRQ Handler and Callbacks * @{ - */ + */ /** * @brief This function handles I2C event interrupt request. @@ -2959,7 +2974,7 @@ void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c) uint32_t itsources = READ_REG(hi2c->Instance->CR1); /* I2C events treatment -------------------------------------*/ - if(hi2c->XferISR != NULL) + if (hi2c->XferISR != NULL) { hi2c->XferISR(hi2c, itflags, itsources); } @@ -2977,7 +2992,7 @@ void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) uint32_t itsources = READ_REG(hi2c->Instance->CR1); /* I2C Bus error interrupt occurred ------------------------------------*/ - if(((itflags & I2C_FLAG_BERR) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) + if (((itflags & I2C_FLAG_BERR) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) { hi2c->ErrorCode |= HAL_I2C_ERROR_BERR; @@ -2986,7 +3001,7 @@ void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) } /* I2C Over-Run/Under-Run interrupt occurred ----------------------------------------*/ - if(((itflags & I2C_FLAG_OVR) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) + if (((itflags & I2C_FLAG_OVR) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) { hi2c->ErrorCode |= HAL_I2C_ERROR_OVR; @@ -2995,7 +3010,7 @@ void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) } /* I2C Arbitration Loss error interrupt occurred -------------------------------------*/ - if(((itflags & I2C_FLAG_ARLO) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) + if (((itflags & I2C_FLAG_ARLO) != RESET) && ((itsources & I2C_IT_ERRI) != RESET)) { hi2c->ErrorCode |= HAL_I2C_ERROR_ARLO; @@ -3004,7 +3019,7 @@ void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) } /* Call the Error Callback in case of Error detected */ - if((hi2c->ErrorCode & (HAL_I2C_ERROR_BERR | HAL_I2C_ERROR_OVR | HAL_I2C_ERROR_ARLO)) != HAL_I2C_ERROR_NONE) + if ((hi2c->ErrorCode & (HAL_I2C_ERROR_BERR | HAL_I2C_ERROR_OVR | HAL_I2C_ERROR_ARLO)) != HAL_I2C_ERROR_NONE) { I2C_ITError(hi2c, hi2c->ErrorCode); } @@ -3077,8 +3092,8 @@ __weak void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) * @brief Slave Address Match callback. * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains * the configuration information for the specified I2C. - * @param TransferDirection: Master request Transfer Direction (Write/Read), value of @ref I2C_XFERDIRECTION - * @param AddrMatchCode: Address Match Code + * @param TransferDirection Master request Transfer Direction (Write/Read), value of @ref I2C_XFERDIRECTION + * @param AddrMatchCode Address Match Code * @retval None */ __weak void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) @@ -3228,7 +3243,7 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c) /** * @} - */ + */ /** * @} @@ -3246,14 +3261,14 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c) * @param ITSources Interrupt sources enabled. * @retval HAL status */ -static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) +static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) { uint16_t devaddress = 0U; /* Process Locked */ __HAL_LOCK(hi2c); - if(((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) + if (((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) { /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); @@ -3266,27 +3281,27 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin /* Flush TX register */ I2C_Flush_TXDR(hi2c); } - else if(((ITFlags & I2C_FLAG_RXNE) != RESET) && ((ITSources & I2C_IT_RXI) != RESET)) + else if (((ITFlags & I2C_FLAG_RXNE) != RESET) && ((ITSources & I2C_IT_RXI) != RESET)) { /* Read data from RXDR */ (*hi2c->pBuffPtr++) = hi2c->Instance->RXDR; hi2c->XferSize--; hi2c->XferCount--; } - else if(((ITFlags & I2C_FLAG_TXIS) != RESET) && ((ITSources & I2C_IT_TXI) != RESET)) + else if (((ITFlags & I2C_FLAG_TXIS) != RESET) && ((ITSources & I2C_IT_TXI) != RESET)) { /* Write data to TXDR */ hi2c->Instance->TXDR = (*hi2c->pBuffPtr++); hi2c->XferSize--; hi2c->XferCount--; } - else if(((ITFlags & I2C_FLAG_TCR) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) + else if (((ITFlags & I2C_FLAG_TCR) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) { - if((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) + if ((hi2c->XferSize == 0U) && (hi2c->XferCount != 0U)) { devaddress = (hi2c->Instance->CR2 & I2C_CR2_SADD); - - if(hi2c->XferCount > MAX_NBYTE_SIZE) + + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; I2C_TransferConfig(hi2c, devaddress, hi2c->XferSize, I2C_RELOAD_MODE, I2C_NO_STARTSTOP); @@ -3294,7 +3309,7 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin else { hi2c->XferSize = hi2c->XferCount; - if(hi2c->XferOptions != I2C_NO_OPTION_FRAME) + if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) { I2C_TransferConfig(hi2c, devaddress, hi2c->XferSize, hi2c->XferOptions, I2C_NO_STARTSTOP); } @@ -3307,7 +3322,7 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin else { /* Call TxCpltCallback() if no stop mode is set */ - if(I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) { /* Call I2C Master Sequential complete process */ I2C_ITMasterSequentialCplt(hi2c); @@ -3320,14 +3335,14 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin } } } - else if(((ITFlags & I2C_FLAG_TC) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) + else if (((ITFlags & I2C_FLAG_TC) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) { - if(hi2c->XferCount == 0U) + if (hi2c->XferCount == 0U) { - if(I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) + if (I2C_GET_STOP_MODE(hi2c) != I2C_AUTOEND_MODE) { /* Generate a stop condition in case of no transfer option */ - if(hi2c->XferOptions == I2C_NO_OPTION_FRAME) + if (hi2c->XferOptions == I2C_NO_OPTION_FRAME) { /* Generate Stop */ hi2c->Instance->CR2 |= I2C_CR2_STOP; @@ -3347,7 +3362,7 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin } } - if(((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) + if (((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) { /* Call I2C Master complete process */ I2C_ITMasterCplt(hi2c, ITFlags); @@ -3367,26 +3382,26 @@ static HAL_StatusTypeDef I2C_Master_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uin * @param ITSources Interrupt sources enabled. * @retval HAL status */ -static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) +static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) { /* Process locked */ __HAL_LOCK(hi2c); - - if(((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) + + if (((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) { /* Check that I2C transfer finished */ /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ /* Mean XferCount == 0*/ /* So clear Flag NACKF only */ - if(hi2c->XferCount == 0U) + if (hi2c->XferCount == 0U) { - if(((hi2c->XferOptions == I2C_FIRST_AND_LAST_FRAME) || (hi2c->XferOptions == I2C_LAST_FRAME)) && \ - (hi2c->State == HAL_I2C_STATE_LISTEN)) + if (((hi2c->XferOptions == I2C_FIRST_AND_LAST_FRAME) || (hi2c->XferOptions == I2C_LAST_FRAME)) && \ + (hi2c->State == HAL_I2C_STATE_LISTEN)) { /* Call I2C Listen complete process */ I2C_ITListenCplt(hi2c, ITFlags); } - else if((hi2c->XferOptions != I2C_NO_OPTION_FRAME) && (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN)) + else if ((hi2c->XferOptions != I2C_NO_OPTION_FRAME) && (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN)) { /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); @@ -3414,9 +3429,9 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint hi2c->ErrorCode |= HAL_I2C_ERROR_AF; } } - else if(((ITFlags & I2C_FLAG_RXNE) != RESET) && ((ITSources & I2C_IT_RXI) != RESET)) + else if (((ITFlags & I2C_FLAG_RXNE) != RESET) && ((ITSources & I2C_IT_RXI) != RESET)) { - if(hi2c->XferCount > 0U) + if (hi2c->XferCount > 0U) { /* Read data from RXDR */ (*hi2c->pBuffPtr++) = hi2c->Instance->RXDR; @@ -3424,24 +3439,24 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint hi2c->XferCount--; } - if((hi2c->XferCount == 0U) && \ - (hi2c->XferOptions != I2C_NO_OPTION_FRAME)) + if ((hi2c->XferCount == 0U) && \ + (hi2c->XferOptions != I2C_NO_OPTION_FRAME)) { /* Call I2C Slave Sequential complete process */ I2C_ITSlaveSequentialCplt(hi2c); - } + } } - else if(((ITFlags & I2C_FLAG_ADDR) != RESET) && ((ITSources & I2C_IT_ADDRI) != RESET)) + else if (((ITFlags & I2C_FLAG_ADDR) != RESET) && ((ITSources & I2C_IT_ADDRI) != RESET)) { I2C_ITAddrCplt(hi2c, ITFlags); } - else if(((ITFlags & I2C_FLAG_TXIS) != RESET) && ((ITSources & I2C_IT_TXI) != RESET)) + else if (((ITFlags & I2C_FLAG_TXIS) != RESET) && ((ITSources & I2C_IT_TXI) != RESET)) { /* Write data to TXDR only if XferCount not reach "0" */ /* A TXIS flag can be set, during STOP treatment */ /* Check if all Datas have already been sent */ /* If it is the case, this last write in TXDR is not sent, correspond to a dummy TXIS event */ - if(hi2c->XferCount > 0U) + if (hi2c->XferCount > 0U) { /* Write data to TXDR */ hi2c->Instance->TXDR = (*hi2c->pBuffPtr++); @@ -3450,7 +3465,7 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint } else { - if((hi2c->XferOptions == I2C_NEXT_FRAME) || (hi2c->XferOptions == I2C_FIRST_FRAME)) + if ((hi2c->XferOptions == I2C_NEXT_FRAME) || (hi2c->XferOptions == I2C_FIRST_FRAME)) { /* Last Byte is Transmitted */ /* Call I2C Slave Sequential complete process */ @@ -3460,7 +3475,7 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint } /* Check if STOPF is set */ - if(((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) + if (((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) { /* Call I2C Slave complete process */ I2C_ITSlaveCplt(hi2c, ITFlags); @@ -3480,7 +3495,7 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint * @param ITSources Interrupt sources enabled. * @retval HAL status */ -static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) +static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) { uint16_t devaddress = 0U; uint32_t xfermode = 0U; @@ -3488,14 +3503,14 @@ static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, ui /* Process Locked */ __HAL_LOCK(hi2c); - if(((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) + if (((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) { /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); /* Set corresponding Error Code */ hi2c->ErrorCode |= HAL_I2C_ERROR_AF; - + /* No need to generate STOP, it is automatically done */ /* But enable STOP interrupt, to treat it */ /* Error callback will be send during stop flag treatment */ @@ -3504,18 +3519,18 @@ static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, ui /* Flush TX register */ I2C_Flush_TXDR(hi2c); } - else if(((ITFlags & I2C_FLAG_TCR) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) + else if (((ITFlags & I2C_FLAG_TCR) != RESET) && ((ITSources & I2C_IT_TCI) != RESET)) { /* Disable TC interrupt */ __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_TCI); - - if(hi2c->XferCount != 0U) + + if (hi2c->XferCount != 0U) { /* Recover Slave address */ devaddress = (hi2c->Instance->CR2 & I2C_CR2_SADD); - + /* Prepare the new XferSize to transfer */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; xfermode = I2C_RELOAD_MODE; @@ -3533,7 +3548,7 @@ static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, ui hi2c->XferCount -= hi2c->XferSize; /* Enable DMA Request */ - if(hi2c->State == HAL_I2C_STATE_BUSY_RX) + if (hi2c->State == HAL_I2C_STATE_BUSY_RX) { hi2c->Instance->CR1 |= I2C_CR1_RXDMAEN; } @@ -3549,7 +3564,7 @@ static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, ui I2C_ITError(hi2c, HAL_I2C_ERROR_SIZE); } } - else if(((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) + else if (((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) { /* Call I2C Master complete process */ I2C_ITMasterCplt(hi2c, ITFlags); @@ -3569,18 +3584,18 @@ static HAL_StatusTypeDef I2C_Master_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, ui * @param ITSources Interrupt sources enabled. * @retval HAL status */ -static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) +static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources) { /* Process locked */ __HAL_LOCK(hi2c); - - if(((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) + + if (((ITFlags & I2C_FLAG_AF) != RESET) && ((ITSources & I2C_IT_NACKI) != RESET)) { /* Check that I2C transfer finished */ /* if yes, normal use case, a NACK is sent by the MASTER when Transfer is finished */ /* Mean XferCount == 0 */ /* So clear Flag NACKF only */ - if(I2C_GET_DMA_REMAIN_DATA(hi2c) == 0U) + if (I2C_GET_DMA_REMAIN_DATA(hi2c) == 0U) { /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); @@ -3590,17 +3605,17 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin /* if no, error use case, a Non-Acknowledge of last Data is generated by the MASTER*/ /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); - + /* Set ErrorCode corresponding to a Non-Acknowledge */ hi2c->ErrorCode |= HAL_I2C_ERROR_AF; } } - else if(((ITFlags & I2C_FLAG_ADDR) != RESET) && ((ITSources & I2C_IT_ADDRI) != RESET)) + else if (((ITFlags & I2C_FLAG_ADDR) != RESET) && ((ITSources & I2C_IT_ADDRI) != RESET)) { /* Clear ADDR flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); } - else if(((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) + else if (((ITFlags & I2C_FLAG_STOPF) != RESET) && ((ITSources & I2C_IT_STOPI) != RESET)) { /* Call I2C Slave complete process */ I2C_ITSlaveCplt(hi2c, ITFlags); @@ -3626,12 +3641,12 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin */ static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) { - I2C_TransferConfig(hi2c,DevAddress,MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); + I2C_TransferConfig(hi2c, DevAddress, MemAddSize, I2C_RELOAD_MODE, I2C_GENERATE_START_WRITE); /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -3642,7 +3657,7 @@ static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_ } /* If Memory address size is 8Bit */ - if(MemAddSize == I2C_MEMADD_SIZE_8BIT) + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) { /* Send Memory Address */ hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); @@ -3654,9 +3669,9 @@ static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_ hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -3665,18 +3680,18 @@ static HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_ return HAL_TIMEOUT; } } - + /* Send LSB of Memory Address */ hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); } /* Wait until TCR flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK) { return HAL_TIMEOUT; } -return HAL_OK; + return HAL_OK; } /** @@ -3693,12 +3708,12 @@ return HAL_OK; */ static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) { - I2C_TransferConfig(hi2c,DevAddress,MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); + I2C_TransferConfig(hi2c, DevAddress, MemAddSize, I2C_SOFTEND_MODE, I2C_GENERATE_START_WRITE); /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -3709,7 +3724,7 @@ static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t } /* If Memory address size is 8Bit */ - if(MemAddSize == I2C_MEMADD_SIZE_8BIT) + if (MemAddSize == I2C_MEMADD_SIZE_8BIT) { /* Send Memory Address */ hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); @@ -3721,9 +3736,9 @@ static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t hi2c->Instance->TXDR = I2C_MEM_ADD_MSB(MemAddress); /* Wait until TXIS flag is set */ - if(I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) { - if(hi2c->ErrorCode == HAL_I2C_ERROR_AF) + if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) { return HAL_ERROR; } @@ -3732,17 +3747,17 @@ static HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t return HAL_TIMEOUT; } } - + /* Send LSB of Memory Address */ hi2c->Instance->TXDR = I2C_MEM_ADD_LSB(MemAddress); } /* Wait until TC flag is set */ - if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) + if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK) { return HAL_TIMEOUT; } - + return HAL_OK; } @@ -3763,7 +3778,7 @@ static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) UNUSED(ITFlags); /* In case of Listen state, need to inform upper layer of address match code event */ - if((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) + if ((hi2c->State & HAL_I2C_STATE_LISTEN) == HAL_I2C_STATE_LISTEN) { transferdirection = I2C_GET_DIR(hi2c); slaveaddrcode = I2C_GET_ADDR_MATCH(hi2c); @@ -3771,19 +3786,19 @@ static void I2C_ITAddrCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) ownadd2code = I2C_GET_OWN_ADDRESS2(hi2c); /* If 10bits addressing mode is selected */ - if(hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) + if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT) { - if((slaveaddrcode & SlaveAddr_MSK) == ((ownadd1code >> SlaveAddr_SHIFT) & SlaveAddr_MSK)) + if ((slaveaddrcode & SlaveAddr_MSK) == ((ownadd1code >> SlaveAddr_SHIFT) & SlaveAddr_MSK)) { slaveaddrcode = ownadd1code; hi2c->AddrEventCount++; - if(hi2c->AddrEventCount == 2U) + if (hi2c->AddrEventCount == 2U) { /* Reset Address Event counter */ hi2c->AddrEventCount = 0U; /* Clear ADDR flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -3885,7 +3900,7 @@ static void I2C_ITSlaveSequentialCplt(I2C_HandleTypeDef *hi2c) /* Reset I2C handle mode */ hi2c->Mode = HAL_I2C_MODE_NONE; - if(hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) + if (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) { /* Remove HAL_I2C_STATE_SLAVE_BUSY_TX, keep only HAL_I2C_STATE_LISTEN */ hi2c->State = HAL_I2C_STATE_LISTEN; @@ -3901,7 +3916,7 @@ static void I2C_ITSlaveSequentialCplt(I2C_HandleTypeDef *hi2c) HAL_I2C_SlaveTxCpltCallback(hi2c); } - else if(hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN) { /* Remove HAL_I2C_STATE_SLAVE_BUSY_RX, keep only HAL_I2C_STATE_LISTEN */ hi2c->State = HAL_I2C_STATE_LISTEN; @@ -3937,7 +3952,7 @@ static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) hi2c->XferISR = NULL; hi2c->XferOptions = I2C_NO_OPTION_FRAME; - if((ITFlags & I2C_FLAG_AF) != RESET) + if ((ITFlags & I2C_FLAG_AF) != RESET) { /* Clear NACK Flag */ __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF); @@ -3950,16 +3965,16 @@ static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) I2C_Flush_TXDR(hi2c); /* Disable Interrupts */ - I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT| I2C_XFER_RX_IT); + I2C_Disable_IRQ(hi2c, I2C_XFER_TX_IT | I2C_XFER_RX_IT); /* Call the corresponding callback to inform upper layer of End of Transfer */ - if((hi2c->ErrorCode != HAL_I2C_ERROR_NONE) || (hi2c->State == HAL_I2C_STATE_ABORT)) + if ((hi2c->ErrorCode != HAL_I2C_ERROR_NONE) || (hi2c->State == HAL_I2C_STATE_ABORT)) { /* Call the corresponding callback to inform upper layer of End of Transfer */ I2C_ITError(hi2c, hi2c->ErrorCode); } /* hi2c->State == HAL_I2C_STATE_BUSY_TX */ - else if(hi2c->State == HAL_I2C_STATE_BUSY_TX) + else if (hi2c->State == HAL_I2C_STATE_BUSY_TX) { hi2c->State = HAL_I2C_STATE_READY; @@ -3985,7 +4000,7 @@ static void I2C_ITMasterCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) } } /* hi2c->State == HAL_I2C_STATE_BUSY_RX */ - else if(hi2c->State == HAL_I2C_STATE_BUSY_RX) + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) { hi2c->State = HAL_I2C_STATE_READY; @@ -4022,7 +4037,7 @@ static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); /* Clear ADDR flag */ - __HAL_I2C_CLEAR_FLAG(hi2c,I2C_FLAG_ADDR); + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR); /* Disable all interrupts */ I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_TX_IT | I2C_XFER_RX_IT); @@ -4037,26 +4052,26 @@ static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) I2C_Flush_TXDR(hi2c); /* If a DMA is ongoing, Update handle size context */ - if(((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) || - ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)) + if (((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) || + ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN)) { hi2c->XferCount = I2C_GET_DMA_REMAIN_DATA(hi2c); } /* All data are not transferred, so set error code accordingly */ - if(hi2c->XferCount != 0U) + if (hi2c->XferCount != 0U) { /* Set ErrorCode corresponding to a Non-Acknowledge */ hi2c->ErrorCode |= HAL_I2C_ERROR_AF; } /* Store Last receive data if any */ - if(((ITFlags & I2C_FLAG_RXNE) != RESET)) + if (((ITFlags & I2C_FLAG_RXNE) != RESET)) { /* Read data from RXDR */ (*hi2c->pBuffPtr++) = hi2c->Instance->RXDR; - if((hi2c->XferSize > 0U)) + if ((hi2c->XferSize > 0U)) { hi2c->XferSize--; hi2c->XferCount--; @@ -4070,19 +4085,19 @@ static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) hi2c->Mode = HAL_I2C_MODE_NONE; hi2c->XferISR = NULL; - if(hi2c->ErrorCode != HAL_I2C_ERROR_NONE) + if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) { /* Call the corresponding callback to inform upper layer of End of Transfer */ I2C_ITError(hi2c, hi2c->ErrorCode); /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ - if(hi2c->State == HAL_I2C_STATE_LISTEN) + if (hi2c->State == HAL_I2C_STATE_LISTEN) { /* Call I2C Listen complete process */ I2C_ITListenCplt(hi2c, ITFlags); } } - else if(hi2c->XferOptions != I2C_NO_OPTION_FRAME) + else if (hi2c->XferOptions != I2C_NO_OPTION_FRAME) { hi2c->XferOptions = I2C_NO_OPTION_FRAME; hi2c->State = HAL_I2C_STATE_READY; @@ -4094,7 +4109,7 @@ static void I2C_ITSlaveCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) HAL_I2C_ListenCpltCallback(hi2c); } /* Call the corresponding callback to inform upper layer of End of Transfer */ - else if(hi2c->State == HAL_I2C_STATE_BUSY_RX) + else if (hi2c->State == HAL_I2C_STATE_BUSY_RX) { hi2c->State = HAL_I2C_STATE_READY; @@ -4132,12 +4147,12 @@ static void I2C_ITListenCplt(I2C_HandleTypeDef *hi2c, uint32_t ITFlags) hi2c->XferISR = NULL; /* Store Last receive data if any */ - if(((ITFlags & I2C_FLAG_RXNE) != RESET)) + if (((ITFlags & I2C_FLAG_RXNE) != RESET)) { /* Read data from RXDR */ (*hi2c->pBuffPtr++) = hi2c->Instance->RXDR; - if((hi2c->XferSize > 0U)) + if ((hi2c->XferSize > 0U)) { hi2c->XferSize--; hi2c->XferCount--; @@ -4177,9 +4192,9 @@ static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) hi2c->ErrorCode |= ErrorCode; /* Disable Interrupts */ - if((hi2c->State == HAL_I2C_STATE_LISTEN) || - (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) || - (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN)) + if ((hi2c->State == HAL_I2C_STATE_LISTEN) || + (hi2c->State == HAL_I2C_STATE_BUSY_TX_LISTEN) || + (hi2c->State == HAL_I2C_STATE_BUSY_RX_LISTEN)) { /* Disable all interrupts, except interrupts related to LISTEN state */ I2C_Disable_IRQ(hi2c, I2C_XFER_RX_IT | I2C_XFER_TX_IT); @@ -4193,10 +4208,10 @@ static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) { /* Disable all interrupts */ I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT | I2C_XFER_RX_IT | I2C_XFER_TX_IT); - + /* If state is an abort treatment on goind, don't change state */ /* This change will be do later */ - if(hi2c->State != HAL_I2C_STATE_ABORT) + if (hi2c->State != HAL_I2C_STATE_ABORT) { /* Set HAL_I2C_STATE_READY */ hi2c->State = HAL_I2C_STATE_READY; @@ -4206,7 +4221,7 @@ static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) } /* Abort DMA TX transfer if any */ - if((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) + if ((hi2c->Instance->CR1 & I2C_CR1_TXDMAEN) == I2C_CR1_TXDMAEN) { hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; @@ -4218,14 +4233,14 @@ static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) __HAL_UNLOCK(hi2c); /* Abort DMA TX */ - if(HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) + if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) { /* Call Directly XferAbortCallback function in case of error */ hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx); } } /* Abort DMA RX transfer if any */ - else if((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) + else if ((hi2c->Instance->CR1 & I2C_CR1_RXDMAEN) == I2C_CR1_RXDMAEN) { hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; @@ -4237,16 +4252,16 @@ static void I2C_ITError(I2C_HandleTypeDef *hi2c, uint32_t ErrorCode) __HAL_UNLOCK(hi2c); /* Abort DMA RX */ - if(HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) + if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) { /* Call Directly hi2c->hdmarx->XferAbortCallback function in case of error */ hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx); } } - else if(hi2c->State == HAL_I2C_STATE_ABORT) + else if (hi2c->State == HAL_I2C_STATE_ABORT) { hi2c->State = HAL_I2C_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -4272,13 +4287,13 @@ static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c) { /* If a pending TXIS flag is set */ /* Write a dummy data in TXDR to clear it */ - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) != RESET) { - hi2c->Instance->TXDR = 0x00U; + hi2c->Instance->TXDR = 0x00U; } /* Flush TX register if not empty */ - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) { __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_TXE); } @@ -4291,13 +4306,13 @@ static void I2C_Flush_TXDR(I2C_HandleTypeDef *hi2c) */ static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma) { - I2C_HandleTypeDef* hi2c = (I2C_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent; + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Disable DMA Request */ hi2c->Instance->CR1 &= ~I2C_CR1_TXDMAEN; /* If last transfer, enable STOP interrupt */ - if(hi2c->XferCount == 0U) + if (hi2c->XferCount == 0U) { /* Enable STOP interrupt */ I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); @@ -4309,7 +4324,7 @@ static void I2C_DMAMasterTransmitCplt(DMA_HandleTypeDef *hdma) hi2c->pBuffPtr += hi2c->XferSize; /* Set the XferSize to transfer */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; } @@ -4348,13 +4363,13 @@ static void I2C_DMASlaveTransmitCplt(DMA_HandleTypeDef *hdma) */ static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma) { - I2C_HandleTypeDef* hi2c = (I2C_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent; + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Disable DMA Request */ hi2c->Instance->CR1 &= ~I2C_CR1_RXDMAEN; /* If last transfer, enable STOP interrupt */ - if(hi2c->XferCount == 0U) + if (hi2c->XferCount == 0U) { /* Enable STOP interrupt */ I2C_Enable_IRQ(hi2c, I2C_XFER_CPLT_IT); @@ -4366,7 +4381,7 @@ static void I2C_DMAMasterReceiveCplt(DMA_HandleTypeDef *hdma) hi2c->pBuffPtr += hi2c->XferSize; /* Set the XferSize to transfer */ - if(hi2c->XferCount > MAX_NBYTE_SIZE) + if (hi2c->XferCount > MAX_NBYTE_SIZE) { hi2c->XferSize = MAX_NBYTE_SIZE; } @@ -4405,7 +4420,7 @@ static void I2C_DMASlaveReceiveCplt(DMA_HandleTypeDef *hdma) */ static void I2C_DMAError(DMA_HandleTypeDef *hdma) { - I2C_HandleTypeDef* hi2c = ( I2C_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Disable Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -4417,12 +4432,12 @@ static void I2C_DMAError(DMA_HandleTypeDef *hdma) /** * @brief DMA I2C communication abort callback * (To be called at end of DMA Abort procedure). - * @param hdma: DMA handle. + * @param hdma DMA handle. * @retval None */ static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) { - I2C_HandleTypeDef* hi2c = ( I2C_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; /* Disable Acknowledge */ hi2c->Instance->CR2 |= I2C_CR2_NACK; @@ -4432,10 +4447,10 @@ static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) hi2c->hdmarx->XferAbortCallback = NULL; /* Check if come from abort from user */ - if(hi2c->State == HAL_I2C_STATE_ABORT) + if (hi2c->State == HAL_I2C_STATE_ABORT) { hi2c->State = HAL_I2C_STATE_READY; - + /* Call the corresponding callback to inform upper layer of End of Transfer */ HAL_I2C_AbortCpltCallback(hi2c); } @@ -4458,14 +4473,14 @@ static void I2C_DMAAbort(DMA_HandleTypeDef *hdma) */ static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart) { - while(__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) + while (__HAL_I2C_GET_FLAG(hi2c, Flag) == Status) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if (Timeout != HAL_MAX_DELAY) { - if((Timeout == 0U)||((HAL_GetTick() - Tickstart ) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) { - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; hi2c->Mode = HAL_I2C_MODE_NONE; /* Process Unlocked */ @@ -4487,21 +4502,21 @@ static HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uin */ static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) { - while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET) + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXIS) == RESET) { /* Check if a NACK is detected */ - if(I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) { return HAL_ERROR; } /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if (Timeout != HAL_MAX_DELAY) { - if((Timeout == 0U)||((HAL_GetTick() - Tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) { hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; hi2c->Mode = HAL_I2C_MODE_NONE; /* Process Unlocked */ @@ -4524,19 +4539,19 @@ static HAL_StatusTypeDef I2C_WaitOnTXISFlagUntilTimeout(I2C_HandleTypeDef *hi2c, */ static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) { - while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) { /* Check if a NACK is detected */ - if(I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) { return HAL_ERROR; } /* Check for the Timeout */ - if((Timeout == 0U)||((HAL_GetTick() - Tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) { hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; hi2c->Mode = HAL_I2C_MODE_NONE; /* Process Unlocked */ @@ -4558,38 +4573,49 @@ static HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, */ static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) { - while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) { /* Check if a NACK is detected */ - if(I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) + if (I2C_IsAcknowledgeFailed(hi2c, Timeout, Tickstart) != HAL_OK) { return HAL_ERROR; } /* Check if a STOPF is detected */ - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) { - /* Clear STOP Flag */ - __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); + /* Check if an RXNE is pending */ + /* Store Last receive data if any */ + if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) && (hi2c->XferSize > 0U)) + { + /* Return HAL_OK */ + /* The Reading of data from RXDR will be done in caller function */ + return HAL_OK; + } + else + { + /* Clear STOP Flag */ + __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF); - /* Clear Configuration Register 2 */ - I2C_RESET_CR2(hi2c); + /* Clear Configuration Register 2 */ + I2C_RESET_CR2(hi2c); - hi2c->ErrorCode = HAL_I2C_ERROR_NONE; - hi2c->State= HAL_I2C_STATE_READY; - hi2c->Mode = HAL_I2C_MODE_NONE; + hi2c->ErrorCode = HAL_I2C_ERROR_NONE; + hi2c->State = HAL_I2C_STATE_READY; + hi2c->Mode = HAL_I2C_MODE_NONE; - /* Process Unlocked */ - __HAL_UNLOCK(hi2c); + /* Process Unlocked */ + __HAL_UNLOCK(hi2c); - return HAL_ERROR; + return HAL_ERROR; + } } /* Check for the Timeout */ - if((Timeout == 0U)||((HAL_GetTick() - Tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) { hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT; - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hi2c); @@ -4610,18 +4636,18 @@ static HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, */ static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) { - if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) + if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) { /* Wait until STOP Flag is reset */ /* AutoEnd should be initiate after AF */ - while(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) + while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if (Timeout != HAL_MAX_DELAY) { - if((Timeout == 0U)||((HAL_GetTick() - Tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) { - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; hi2c->Mode = HAL_I2C_MODE_NONE; /* Process Unlocked */ @@ -4644,7 +4670,7 @@ static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32 I2C_RESET_CR2(hi2c); hi2c->ErrorCode = HAL_I2C_ERROR_AF; - hi2c->State= HAL_I2C_STATE_READY; + hi2c->State = HAL_I2C_STATE_READY; hi2c->Mode = HAL_I2C_MODE_NONE; /* Process Unlocked */ @@ -4676,25 +4702,14 @@ static HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c, uint32 */ static void I2C_TransferConfig(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode, uint32_t Request) { - uint32_t tmpreg = 0U; - /* Check the parameters */ assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); assert_param(IS_TRANSFER_MODE(Mode)); assert_param(IS_TRANSFER_REQUEST(Request)); - /* Get the CR2 register value */ - tmpreg = hi2c->Instance->CR2; - - /* clear tmpreg specific bits */ - tmpreg &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP)); - - /* update tmpreg */ - tmpreg |= (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << 16 ) & I2C_CR2_NBYTES) | \ - (uint32_t)Mode | (uint32_t)Request); - /* update CR2 register */ - hi2c->Instance->CR2 = tmpreg; + MODIFY_REG(hi2c->Instance->CR2, ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | I2C_CR2_START | I2C_CR2_STOP)), \ + (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | (uint32_t)Mode | (uint32_t)Request)); } /** @@ -4708,28 +4723,28 @@ static HAL_StatusTypeDef I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t Interr { uint32_t tmpisr = 0U; - if((hi2c->XferISR == I2C_Master_ISR_DMA) || \ - (hi2c->XferISR == I2C_Slave_ISR_DMA)) + if ((hi2c->XferISR == I2C_Master_ISR_DMA) || \ + (hi2c->XferISR == I2C_Slave_ISR_DMA)) { - if((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) { /* Enable ERR, STOP, NACK and ADDR interrupts */ tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; } - if((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT) + if ((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT) { /* Enable ERR and NACK interrupts */ tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; } - if((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) + if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) { /* Enable STOP interrupts */ tmpisr |= I2C_IT_STOPI; } - - if((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT) + + if ((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT) { /* Enable TC interrupts */ tmpisr |= I2C_IT_TCI; @@ -4737,31 +4752,31 @@ static HAL_StatusTypeDef I2C_Enable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t Interr } else { - if((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) { /* Enable ERR, STOP, NACK, and ADDR interrupts */ tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; } - if((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) { /* Enable ERR, TC, STOP, NACK and RXI interrupts */ tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_TXI; } - if((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) { /* Enable ERR, TC, STOP, NACK and TXI interrupts */ tmpisr |= I2C_IT_ERRI | I2C_IT_TCI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_RXI; } - if((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) + if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) { /* Enable STOP interrupts */ tmpisr |= I2C_IT_STOPI; } } - + /* Enable interrupts only at the end */ /* to avoid the risk of I2C interrupt handle execution before */ /* all interrupts requested done */ @@ -4781,49 +4796,49 @@ static HAL_StatusTypeDef I2C_Disable_IRQ(I2C_HandleTypeDef *hi2c, uint16_t Inter { uint32_t tmpisr = 0U; - if((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) + if ((InterruptRequest & I2C_XFER_TX_IT) == I2C_XFER_TX_IT) { /* Disable TC and TXI interrupts */ tmpisr |= I2C_IT_TCI | I2C_IT_TXI; - if((hi2c->State & HAL_I2C_STATE_LISTEN) != HAL_I2C_STATE_LISTEN) + if ((hi2c->State & HAL_I2C_STATE_LISTEN) != HAL_I2C_STATE_LISTEN) { /* Disable NACK and STOP interrupts */ tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; } } - if((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) + if ((InterruptRequest & I2C_XFER_RX_IT) == I2C_XFER_RX_IT) { /* Disable TC and RXI interrupts */ tmpisr |= I2C_IT_TCI | I2C_IT_RXI; - if((hi2c->State & HAL_I2C_STATE_LISTEN) != HAL_I2C_STATE_LISTEN) + if ((hi2c->State & HAL_I2C_STATE_LISTEN) != HAL_I2C_STATE_LISTEN) { /* Disable NACK and STOP interrupts */ tmpisr |= I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; } } - if((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) + if ((InterruptRequest & I2C_XFER_LISTEN_IT) == I2C_XFER_LISTEN_IT) { /* Disable ADDR, NACK and STOP interrupts */ tmpisr |= I2C_IT_ADDRI | I2C_IT_STOPI | I2C_IT_NACKI | I2C_IT_ERRI; } - if((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT) + if ((InterruptRequest & I2C_XFER_ERROR_IT) == I2C_XFER_ERROR_IT) { /* Enable ERR and NACK interrupts */ tmpisr |= I2C_IT_ERRI | I2C_IT_NACKI; } - if((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) + if ((InterruptRequest & I2C_XFER_CPLT_IT) == I2C_XFER_CPLT_IT) { /* Enable STOP interrupts */ tmpisr |= I2C_IT_STOPI; } - - if((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT) + + if ((InterruptRequest & I2C_XFER_RELOAD_IT) == I2C_XFER_RELOAD_IT) { /* Enable TC interrupts */ tmpisr |= I2C_IT_TCI; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.h index 93bbd5eaf3..7a8f85f292 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_i2c.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of I2C HAL module. ****************************************************************************** * @attention @@ -40,11 +38,11 @@ #define __STM32L4xx_HAL_I2C_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif /* Includes ------------------------------------------------------------------*/ -#include "stm32l4xx_hal_def.h" +#include "stm32l4xx_hal_def.h" /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -52,7 +50,7 @@ /** @addtogroup I2C * @{ - */ + */ /* Exported types ------------------------------------------------------------*/ /** @defgroup I2C_Exported_Types I2C Exported Types @@ -60,13 +58,13 @@ */ /** @defgroup I2C_Configuration_Structure_definition I2C Configuration Structure definition - * @brief I2C Configuration Structure definition + * @brief I2C Configuration Structure definition * @{ */ typedef struct { uint32_t Timing; /*!< Specifies the I2C_TIMINGR_register value. - This parameter calculated by referring to I2C initialization + This parameter calculated by referring to I2C initialization section in Reference manual */ uint32_t OwnAddress1; /*!< Specifies the first device own address. @@ -90,9 +88,9 @@ typedef struct uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected. This parameter can be a value of @ref I2C_NOSTRETCH_MODE */ -}I2C_InitTypeDef; +} I2C_InitTypeDef; -/** +/** * @} */ @@ -122,7 +120,7 @@ typedef struct * 0 : Ready (no Tx operation ongoing)\n * 1 : Busy (Tx operation ongoing) * @{ - */ + */ typedef enum { HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */ @@ -139,7 +137,7 @@ typedef enum HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */ HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */ -}HAL_I2C_StateTypeDef; +} HAL_I2C_StateTypeDef; /** * @} @@ -170,9 +168,9 @@ typedef enum HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */ HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */ -}HAL_I2C_ModeTypeDef; +} HAL_I2C_ModeTypeDef; -/** +/** * @} */ @@ -213,7 +211,7 @@ typedef struct __I2C_HandleTypeDef __IO uint32_t PreviousState; /*!< I2C communication Previous state */ - HAL_StatusTypeDef (*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources); /*!< I2C transfer IRQ handler function pointer */ + HAL_StatusTypeDef(*XferISR)(struct __I2C_HandleTypeDef *hi2c, uint32_t ITFlags, uint32_t ITSources); /*!< I2C transfer IRQ handler function pointer */ DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ @@ -228,7 +226,7 @@ typedef struct __I2C_HandleTypeDef __IO uint32_t ErrorCode; /*!< I2C Error code */ __IO uint32_t AddrEventCount; /*!< I2C Address Event counter */ -}I2C_HandleTypeDef; +} I2C_HandleTypeDef; /** * @} */ @@ -313,7 +311,7 @@ typedef struct __I2C_HandleTypeDef /** * @} */ - + /** @defgroup I2C_XFERDIRECTION I2C Transfer Direction Master Point of View * @{ */ @@ -337,9 +335,9 @@ typedef struct __I2C_HandleTypeDef * @{ */ #define I2C_NO_STARTSTOP (0x00000000U) -#define I2C_GENERATE_STOP I2C_CR2_STOP -#define I2C_GENERATE_START_READ (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN) -#define I2C_GENERATE_START_WRITE I2C_CR2_START +#define I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP) +#define I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) +#define I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) /** * @} */ @@ -431,7 +429,7 @@ typedef struct __I2C_HandleTypeDef * @retval None */ #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__))) - + /** @brief Check whether the specified I2C interrupt source is enabled or not. * @param __HANDLE__ specifies the I2C Handle. * @param __INTERRUPT__ specifies the I2C interrupt source to check. @@ -506,7 +504,7 @@ typedef struct __I2C_HandleTypeDef #define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) /** @brief Generate a Non-Acknowledge I2C peripheral in Slave mode. - * @param __HANDLE__: specifies the I2C Handle. + * @param __HANDLE__ specifies the I2C Handle. * @retval None */ #define __HAL_I2C_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK)) @@ -527,7 +525,7 @@ typedef struct __I2C_HandleTypeDef */ /* Initialization and de-initialization functions******************************/ HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); -HAL_StatusTypeDef HAL_I2C_DeInit (I2C_HandleTypeDef *hi2c); +HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c); void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); /** @@ -538,7 +536,7 @@ void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); * @{ */ /* IO operation functions ****************************************************/ - /******* Blocking mode: Polling */ +/******* Blocking mode: Polling */ HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout); @@ -547,7 +545,7 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout); HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout); - /******* Non-Blocking mode: Interrupt */ +/******* Non-Blocking mode: Interrupt */ HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); @@ -563,7 +561,7 @@ HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c); HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c); HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress); - /******* Non-Blocking mode: DMA */ +/******* Non-Blocking mode: DMA */ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size); @@ -604,11 +602,11 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); /** * @} - */ + */ /** * @} - */ + */ /* Private constants ---------------------------------------------------------*/ /** @defgroup I2C_Private_Constants I2C Private Constants @@ -617,7 +615,7 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); /** * @} - */ + */ /* Private macros ------------------------------------------------------------*/ /** @defgroup I2C_Private_Macro I2C Private Macros @@ -681,7 +679,7 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | (I2C_CR2_ADD10) | (I2C_CR2_START)) & (~I2C_CR2_RD_WRN))) /** * @} - */ + */ /* Private Functions ---------------------------------------------------------*/ /** @defgroup I2C_Private_Functions I2C Private Functions @@ -690,15 +688,15 @@ uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); /* Private functions are defined in stm32l4xx_hal_i2c.c file */ /** * @} - */ + */ /** * @} - */ + */ /** * @} - */ + */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.c index 2602734c8d..bd4e329dd2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.c @@ -2,10 +2,8 @@ ****************************************************************************** * @file stm32l4xx_hal_i2c_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief I2C Extended HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of I2C Extended peripheral: * + Extended features functions * @@ -19,7 +17,8 @@ (+) Possibility to disable or enable Analog Noise Filter (+) Use of a configured Digital Noise Filter - (+) Disable or enable wakeup from Stop modes + (+) Disable or enable wakeup from Stop mode(s) + (+) Disable or enable Fast Mode Plus ##### How to use this driver ##### ============================================================================== @@ -96,8 +95,9 @@ ##### Extended features functions ##### =============================================================================== [..] This section provides functions allowing to: - (+) Configure Noise Filters + (+) Configure Noise Filters (+) Configure Wake Up Feature + (+) Configure Fast Mode Plus @endverbatim * @{ @@ -116,7 +116,7 @@ HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -162,7 +162,7 @@ HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_ assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance)); assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -200,17 +200,17 @@ HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_ } /** - * @brief Enable I2C wakeup from stop mode. + * @brief Enable I2C wakeup from Stop mode(s). * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains * the configuration information for the specified I2Cx peripheral. * @retval HAL status */ -HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp (I2C_HandleTypeDef *hi2c) +HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c) { /* Check the parameters */ assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -239,17 +239,17 @@ HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp (I2C_HandleTypeDef *hi2c) } /** - * @brief Disable I2C wakeup from stop mode. + * @brief Disable I2C wakeup from Stop mode(s). * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains * the configuration information for the specified I2Cx peripheral. * @retval HAL status */ -HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp (I2C_HandleTypeDef *hi2c) +HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c) { /* Check the parameters */ assert_param(IS_I2C_WAKEUP_FROMSTOP_INSTANCE(hi2c->Instance)); - if(hi2c->State == HAL_I2C_STATE_READY) + if (hi2c->State == HAL_I2C_STATE_READY) { /* Process Locked */ __HAL_LOCK(hi2c); @@ -262,7 +262,7 @@ HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp (I2C_HandleTypeDef *hi2c) /* Enable wakeup from stop mode */ hi2c->Instance->CR1 &= ~(I2C_CR1_WUPEN); - __HAL_I2C_ENABLE(hi2c); + __HAL_I2C_ENABLE(hi2c); hi2c->State = HAL_I2C_STATE_READY; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.h index e6d115a1ba..726a83fba8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_i2c_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of I2C HAL Extended module. ****************************************************************************** * @attention @@ -40,7 +38,7 @@ #define __STM32L4xx_HAL_I2C_EX_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif /* Includes ------------------------------------------------------------------*/ @@ -52,7 +50,7 @@ /** @addtogroup I2CEx * @{ - */ + */ /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ @@ -101,7 +99,7 @@ /** * @} - */ + */ /* Exported macro ------------------------------------------------------------*/ /* Exported functions --------------------------------------------------------*/ @@ -152,7 +150,7 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus); (((__CONFIG__) & (I2C_FASTMODEPLUS_I2C4)) == I2C_FASTMODEPLUS_I2C4))) /** * @} - */ + */ /* Private Functions ---------------------------------------------------------*/ /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.c index 99d4049298..ecefca38d5 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_irda.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief IRDA HAL module driver. * This file provides firmware functions to manage the following * functionalities of the IrDA (Infrared Data Association) Peripheral @@ -158,14 +156,41 @@ * @{ */ #define IRDA_TEACK_REACK_TIMEOUT 1000 /*!< IRDA TX or RX enable acknowledge time-out value */ + #define IRDA_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE \ | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE)) /*!< UART or USART CR1 fields of parameters set by IRDA_SetConfig API */ + +#define USART_BRR_MIN 0x10U /*!< USART BRR minimum authorized value */ + +#define USART_BRR_MAX 0x0000FFFFU /*!< USART BRR maximum authorized value */ /** * @} */ /* Private macros ------------------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @brief BRR division operation to set BRR register in 16-bit oversampling mode. + * @param __PCLK__ IRDA clock source. + * @param __BAUD__ Baud rate set by the user. + * @param __PRESCALER__ IRDA clock prescaler value. + * @retval Division result + */ +#define IRDA_DIV_SAMPLING16(__PCLK__, __BAUD__, __PRESCALER__) ((((__PCLK__)/IRDAPrescTable[(__PRESCALER__)]) + ((__BAUD__)/2)) / (__BAUD__)) +#else +/** @brief BRR division operation to set BRR register in 16-bit oversampling mode. + * @param __PCLK__ IRDA clock source. + * @param __BAUD__ Baud rate set by the user. + * @retval Division result + */ +#define IRDA_DIV_SAMPLING16(__PCLK__, __BAUD__) (((__PCLK__) + ((__BAUD__)/2)) / (__BAUD__)) +#endif + /* Private variables ---------------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +static const uint16_t IRDAPrescTable[12] = {1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256}; +#else +#endif + /* Private function prototypes -----------------------------------------------*/ /** @addtogroup IRDA_Private_Functions * @{ @@ -186,7 +211,7 @@ static void IRDA_DMARxAbortCallback(DMA_HandleTypeDef *hdma); static void IRDA_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); static void IRDA_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda); -static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda); +static void IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda); static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda); /** * @} @@ -248,9 +273,9 @@ static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda); */ /** - * @brief Initialize the IRDA mode according to the specified - * parameters in the IRDA_InitTypeDef and initialize the associated handle. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Initialize the IRDA mode according to the specified + * parameters in the IRDA_InitTypeDef and initialize the associated handle. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval HAL status */ @@ -302,8 +327,8 @@ HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda) } /** - * @brief DeInitialize the IRDA peripheral. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief DeInitialize the IRDA peripheral. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval HAL status */ @@ -336,8 +361,8 @@ HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda) } /** - * @brief Initialize the IRDA MSP. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Initialize the IRDA MSP. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval None */ @@ -352,8 +377,8 @@ __weak void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda) } /** - * @brief DeInitialize the IRDA MSP. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief DeInitialize the IRDA MSP. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval None */ @@ -376,7 +401,7 @@ __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda) * @verbatim =============================================================================== - ##### IO operation functions ##### + ##### IO operation functions ##### =============================================================================== [..] This subsection provides a set of functions allowing to manage the IRDA data transfers. @@ -388,7 +413,7 @@ __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda) While receiving data, transmission should be avoided as the data to be transmitted could be corrupted. - (#) There are two mode of transfer: + (#) There are two modes of transfer: (++) Blocking mode: the communication is performed in polling mode. The HAL status of all data processing is returned by the same function after finishing transfer. @@ -453,11 +478,11 @@ __weak void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda) */ /** - * @brief Send an amount of data in blocking mode. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Send an amount of data in blocking mode. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. - * @param pData Pointer to data buffer. - * @param Size Amount of data to be sent. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be sent. * @param Timeout Specify timeout value. * @retval HAL status */ @@ -525,11 +550,11 @@ HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, u } /** - * @brief Receive an amount of data in blocking mode. + * @brief Receive an amount of data in blocking mode. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified IRDA module. - * @param pData Pointer to data buffer. - * @param Size Amount of data to be received. + * the configuration information for the specified IRDA module. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. * @param Timeout Specify timeout value. * @retval HAL status */ @@ -600,11 +625,11 @@ HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, ui } /** - * @brief Send an amount of data in interrupt mode. + * @brief Send an amount of data in interrupt mode. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified IRDA module. - * @param pData Pointer to data buffer. - * @param Size Amount of data to be sent. + * the configuration information for the specified IRDA module. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be sent. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) @@ -631,8 +656,12 @@ HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData __HAL_UNLOCK(hirda); /* Enable the IRDA Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(hirda->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else SET_BIT(hirda->Instance->CR1, USART_CR1_TXEIE); - +#endif + return HAL_OK; } else @@ -642,11 +671,11 @@ HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData } /** - * @brief Receive an amount of data in interrupt mode. + * @brief Receive an amount of data in interrupt mode. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified IRDA module. - * @param pData Pointer to data buffer. - * @param Size Amount of data to be received. + * the configuration information for the specified IRDA module. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) @@ -677,7 +706,11 @@ HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, __HAL_UNLOCK(hirda); /* Enable the IRDA Parity Error and Data Register not empty Interrupts */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(hirda->Instance->CR1, USART_CR1_PEIE| USART_CR1_RXNEIE_RXFNEIE); +#else SET_BIT(hirda->Instance->CR1, USART_CR1_PEIE| USART_CR1_RXNEIE); +#endif /* Enable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(hirda->Instance->CR3, USART_CR3_EIE); @@ -691,11 +724,11 @@ HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, } /** - * @brief Send an amount of data in DMA mode. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Send an amount of data in DMA mode. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. - * @param pData pointer to data buffer. - * @param Size amount of data to be sent. + * @param pData pointer to data buffer. + * @param Size amount of data to be sent. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size) @@ -752,11 +785,11 @@ HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pDat } /** - * @brief Receive an amount of data in DMA mode. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Receive an amount of data in DMA mode. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. - * @param pData Pointer to data buffer. - * @param Size Amount of data to be received. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. * @note When the IRDA parity is enabled (PCE = 1), the received data contains * the parity bit (MSB position). * @retval HAL status @@ -818,9 +851,9 @@ HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData /** - * @brief Pause the DMA Transfer. + * @brief Pause the DMA Transfer. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified IRDA module. + * the configuration information for the specified IRDA module. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda) @@ -852,9 +885,9 @@ HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda) } /** - * @brief Resume the DMA Transfer. + * @brief Resume the DMA Transfer. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified UART module. + * the configuration information for the specified UART module. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda) @@ -887,9 +920,9 @@ HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda) } /** - * @brief Stop the DMA Transfer. + * @brief Stop the DMA Transfer. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified UART module. + * the configuration information for the specified UART module. * @retval HAL status */ HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda) @@ -950,7 +983,11 @@ HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda) HAL_StatusTypeDef HAL_IRDA_Abort(IRDA_HandleTypeDef *hirda) { /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); /* Disable the IRDA DMA Tx request if enabled */ @@ -1018,7 +1055,11 @@ HAL_StatusTypeDef HAL_IRDA_Abort(IRDA_HandleTypeDef *hirda) HAL_StatusTypeDef HAL_IRDA_AbortTransmit(IRDA_HandleTypeDef *hirda) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Disable the IRDA DMA Tx request if enabled */ if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) @@ -1061,7 +1102,11 @@ HAL_StatusTypeDef HAL_IRDA_AbortTransmit(IRDA_HandleTypeDef *hirda) HAL_StatusTypeDef HAL_IRDA_AbortReceive(IRDA_HandleTypeDef *hirda) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); /* Disable the IRDA DMA Rx request if enabled */ @@ -1112,7 +1157,11 @@ HAL_StatusTypeDef HAL_IRDA_Abort_IT(IRDA_HandleTypeDef *hirda) uint32_t abortcplt = 1; /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); /* If DMA Tx and/or DMA Rx Handles are associated to IRDA Handle, DMA Abort complete callbacks should be initialised @@ -1236,7 +1285,11 @@ HAL_StatusTypeDef HAL_IRDA_Abort_IT(IRDA_HandleTypeDef *hirda) HAL_StatusTypeDef HAL_IRDA_AbortTransmit_IT(IRDA_HandleTypeDef *hirda) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Disable the IRDA DMA Tx request if enabled */ if (HAL_IS_BIT_SET(hirda->Instance->CR3, USART_CR3_DMAT)) @@ -1302,7 +1355,11 @@ HAL_StatusTypeDef HAL_IRDA_AbortTransmit_IT(IRDA_HandleTypeDef *hirda) HAL_StatusTypeDef HAL_IRDA_AbortReceive_IT(IRDA_HandleTypeDef *hirda) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); /* Disable the IRDA DMA Rx request if enabled */ @@ -1358,8 +1415,8 @@ HAL_StatusTypeDef HAL_IRDA_AbortReceive_IT(IRDA_HandleTypeDef *hirda) } /** - * @brief Handle IRDA interrupt request. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Handle IRDA interrupt request. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval None */ @@ -1375,7 +1432,11 @@ void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) if (errorflags == RESET) { /* IRDA in mode Receiver ---------------------------------------------------*/ +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) && ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET)) +#else if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { IRDA_Receive_IT(hirda); return; @@ -1386,7 +1447,11 @@ void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) cr3its = READ_REG(hirda->Instance->CR3); if( (errorflags != RESET) && ( ((cr3its & USART_CR3_EIE) != RESET) +#if defined(USART_CR1_FIFOEN) + || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != RESET)) ) +#else || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET)) ) +#endif { /* IRDA parity error interrupt occurred -------------------------------------*/ if(((isrflags & USART_ISR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) @@ -1414,7 +1479,11 @@ void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) /* IRDA Over-Run interrupt occurred -----------------------------------------*/ if(((isrflags & USART_ISR_ORE) != RESET) && - (((cr1its & USART_CR1_RXNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#if defined(USART_CR1_FIFOEN) + (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#else + (((cr1its & USART_CR1_RXNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#endif { __HAL_IRDA_CLEAR_IT(hirda, IRDA_CLEAR_OREF); @@ -1425,7 +1494,11 @@ void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) if(hirda->ErrorCode != HAL_IRDA_ERROR_NONE) { /* IRDA in mode Receiver ---------------------------------------------------*/ +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) && ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET)) +#else if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { IRDA_Receive_IT(hirda); } @@ -1484,7 +1557,11 @@ void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda) } /* End if some error occurs */ /* IRDA in mode Transmitter ------------------------------------------------*/ +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_TXE_TXFNF) != RESET) && ((cr1its & USART_CR1_TXEIE_TXFNFIE) != RESET)) +#else if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) +#endif { IRDA_Transmit_IT(hirda); return; @@ -1549,7 +1626,7 @@ __weak void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda) /** * @brief Rx Half Transfer complete callback. - * @param hirda: Pointer to a IRDA_HandleTypeDef structure that contains + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval None */ @@ -1651,9 +1728,9 @@ __weak void HAL_IRDA_AbortReceiveCpltCallback (IRDA_HandleTypeDef *hirda) */ /** - * @brief Return the IRDA handle state. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains - * the configuration information for the specified IRDA module. + * @brief Return the IRDA handle state. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * the configuration information for the specified IRDA module. * @retval HAL state */ HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda) @@ -1667,8 +1744,8 @@ HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda) } /** - * @brief Return the IRDA handle error code. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Return the IRDA handle error code. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval IRDA Error Code */ @@ -1690,8 +1767,8 @@ uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda) */ /** - * @brief Configure the IRDA peripheral. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Configure the IRDA peripheral. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval HAL status */ @@ -1708,6 +1785,9 @@ static HAL_StatusTypeDef IRDA_SetConfig(IRDA_HandleTypeDef *hirda) assert_param(IS_IRDA_TX_RX_MODE(hirda->Init.Mode)); assert_param(IS_IRDA_PRESCALER(hirda->Init.Prescaler)); assert_param(IS_IRDA_POWERMODE(hirda->Init.PowerMode)); +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_IRDA_CLOCKPRESCALER(hirda->Init.ClockPrescaler)); +#endif /*-------------------------- USART CR1 Configuration -----------------------*/ /* Configure the IRDA Word Length, Parity and transfer Mode: @@ -1721,27 +1801,55 @@ static HAL_StatusTypeDef IRDA_SetConfig(IRDA_HandleTypeDef *hirda) /*-------------------------- USART CR3 Configuration -----------------------*/ MODIFY_REG(hirda->Instance->CR3, USART_CR3_IRLP, hirda->Init.PowerMode); +#if defined(USART_PRESC_PRESCALER) + /*--------------------- USART clock PRESC Configuration ----------------*/ + /* Configure + * - IRDA Clock Prescaler: set PRESCALER according to hirda->Init.ClockPrescaler value */ + MODIFY_REG(hirda->Instance->PRESC, USART_PRESC_PRESCALER, hirda->Init.ClockPrescaler); +#endif + /*-------------------------- USART GTPR Configuration ----------------------*/ MODIFY_REG(hirda->Instance->GTPR, USART_GTPR_PSC, hirda->Init.Prescaler); /*-------------------------- USART BRR Configuration -----------------------*/ IRDA_GETCLOCKSOURCE(hirda, clocksource); + tmpreg = 0; switch (clocksource) { case IRDA_CLOCKSOURCE_PCLK1: - hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK1Freq() + (hirda->Init.BaudRate/2)) / hirda->Init.BaudRate); +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); +#else + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), hirda->Init.BaudRate)); +#endif break; case IRDA_CLOCKSOURCE_PCLK2: - hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK2Freq() + (hirda->Init.BaudRate/2)) / hirda->Init.BaudRate); +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); +#else + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), hirda->Init.BaudRate)); +#endif break; case IRDA_CLOCKSOURCE_HSI: - hirda->Instance->BRR = (uint16_t)((HSI_VALUE + (hirda->Init.BaudRate/2)) / hirda->Init.BaudRate); +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HSI_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); +#else + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HSI_VALUE, hirda->Init.BaudRate)); +#endif break; case IRDA_CLOCKSOURCE_SYSCLK: - hirda->Instance->BRR = (uint16_t)((HAL_RCC_GetSysClockFreq() + (hirda->Init.BaudRate/2)) / hirda->Init.BaudRate); +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); +#else + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), hirda->Init.BaudRate)); +#endif break; case IRDA_CLOCKSOURCE_LSE: - hirda->Instance->BRR = (uint16_t)((LSE_VALUE + (hirda->Init.BaudRate/2)) / hirda->Init.BaudRate); +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(LSE_VALUE, hirda->Init.BaudRate, hirda->Init.ClockPrescaler)); +#else + tmpreg = (uint16_t)(IRDA_DIV_SAMPLING16(LSE_VALUE, hirda->Init.BaudRate)); +#endif break; case IRDA_CLOCKSOURCE_UNDEFINED: default: @@ -1749,12 +1857,22 @@ static HAL_StatusTypeDef IRDA_SetConfig(IRDA_HandleTypeDef *hirda) break; } + /* USARTDIV must be greater than or equal to 0d16 */ + if ((tmpreg >= USART_BRR_MIN) && (tmpreg <= USART_BRR_MAX)) + { + hirda->Instance->BRR = tmpreg; + } + else + { + ret = HAL_ERROR; + } + return ret; } /** - * @brief Check the IRDA Idle State. - * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains + * @brief Check the IRDA Idle State. + * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. * @retval HAL status */ @@ -1820,7 +1938,11 @@ static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, if((Timeout == 0) || ((HAL_GetTick()-Tickstart) > Timeout)) { /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); hirda->gState = HAL_IRDA_STATE_READY; @@ -1845,7 +1967,11 @@ static HAL_StatusTypeDef IRDA_WaitOnFlagUntilTimeout(IRDA_HandleTypeDef *hirda, static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* At end of Tx process, restore hirda->gState to Ready */ hirda->gState = HAL_IRDA_STATE_READY; @@ -1861,7 +1987,11 @@ static void IRDA_EndTxTransfer(IRDA_HandleTypeDef *hirda) static void IRDA_EndRxTransfer(IRDA_HandleTypeDef *hirda) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); /* At end of Rx process, restore hirda->RxState to Ready */ @@ -1914,7 +2044,7 @@ static void IRDA_DMATransmitHalfCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA IRDA receive process complete callback. - * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -1944,7 +2074,7 @@ static void IRDA_DMAReceiveCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA IRDA receive process half complete callback. - * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -1956,8 +2086,8 @@ static void IRDA_DMAReceiveHalfCplt(DMA_HandleTypeDef *hdma) } /** - * @brief DMA IRDA communication error callback. - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * @brief DMA IRDA communication error callback. + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2147,7 +2277,11 @@ static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda) if(hirda->TxXferCount == 0) { /* Disable the IRDA Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TXEIE); +#endif /* Enable the IRDA Transmit Complete Interrupt */ SET_BIT(hirda->Instance->CR1, USART_CR1_TCIE); @@ -2181,9 +2315,9 @@ static HAL_StatusTypeDef IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda) * @brief Wrap up transmission in non-blocking mode. * @param hirda Pointer to a IRDA_HandleTypeDef structure that contains * the configuration information for the specified IRDA module. - * @retval HAL status + * @retval None */ -static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda) +static void IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda) { /* Disable the IRDA Transmit Complete Interrupt */ CLEAR_BIT(hirda->Instance->CR1, USART_CR1_TCIE); @@ -2192,8 +2326,6 @@ static HAL_StatusTypeDef IRDA_EndTransmit_IT(IRDA_HandleTypeDef *hirda) hirda->gState = HAL_IRDA_STATE_READY; HAL_IRDA_TxCpltCallback(hirda); - - return HAL_OK; } /** @@ -2228,7 +2360,11 @@ static HAL_StatusTypeDef IRDA_Receive_IT(IRDA_HandleTypeDef *hirda) if(--hirda->RxXferCount == 0) { /* Disable the IRDA Parity Error Interrupt and RXNE interrupt */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(hirda->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif /* Disable the IRDA Error Interrupt: (Frame error, noise error, overrun error) */ CLEAR_BIT(hirda->Instance->CR3, USART_CR3_EIE); diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.h index 4fced53ab0..148d4e78d6 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_irda.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of IRDA HAL module. ****************************************************************************** * @attention @@ -66,7 +64,8 @@ typedef struct { uint32_t BaudRate; /*!< This member configures the IRDA communication baud rate. The baud rate register is computed using the following formula: - Baud Rate Register = ((PCLKx) / ((hirda->Init.BaudRate))) */ + Baud Rate Register = ((usart_ker_ckpres) / ((hirda->Init.BaudRate))) + where usart_ker_ckpres is the IRDA input clock divided by a prescaler */ uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. This parameter can be a value of @ref IRDA_Word_Length */ @@ -87,6 +86,12 @@ typedef struct uint16_t PowerMode; /*!< Specifies the IRDA power mode. This parameter can be a value of @ref IRDA_Low_Power */ + +#if defined(USART_PRESC_PRESCALER) + uint32_t ClockPrescaler; /*!< Specifies the prescaler value used to divide the IRDA clock source. + This parameter can be a value of @ref IRDA_ClockPrescaler. */ +#endif + }IRDA_InitTypeDef; /** @@ -154,13 +159,13 @@ typedef enum */ typedef enum { - HAL_IRDA_ERROR_NONE = 0x00, /*!< No error */ - HAL_IRDA_ERROR_PE = 0x01, /*!< Parity error */ - HAL_IRDA_ERROR_NE = 0x02, /*!< Noise error */ - HAL_IRDA_ERROR_FE = 0x04, /*!< frame error */ - HAL_IRDA_ERROR_ORE = 0x08, /*!< Overrun error */ - HAL_IRDA_ERROR_DMA = 0x10, /*!< DMA transfer error */ - HAL_IRDA_ERROR_BUSY = 0x20 /*!< Busy Error */ + HAL_IRDA_ERROR_NONE = 0x00U, /*!< No error */ + HAL_IRDA_ERROR_PE = 0x01U, /*!< Parity error */ + HAL_IRDA_ERROR_NE = 0x02U, /*!< Noise error */ + HAL_IRDA_ERROR_FE = 0x04U, /*!< frame error */ + HAL_IRDA_ERROR_ORE = 0x08U, /*!< Overrun error */ + HAL_IRDA_ERROR_DMA = 0x10U, /*!< DMA transfer error */ + HAL_IRDA_ERROR_BUSY = 0x20U /*!< Busy Error */ }HAL_IRDA_ErrorTypeDef; /** @@ -168,12 +173,12 @@ typedef enum */ typedef enum { - IRDA_CLOCKSOURCE_PCLK1 = 0x00, /*!< PCLK1 clock source */ - IRDA_CLOCKSOURCE_PCLK2 = 0x01, /*!< PCLK2 clock source */ - IRDA_CLOCKSOURCE_HSI = 0x02, /*!< HSI clock source */ - IRDA_CLOCKSOURCE_SYSCLK = 0x04, /*!< SYSCLK clock source */ - IRDA_CLOCKSOURCE_LSE = 0x08, /*!< LSE clock source */ - IRDA_CLOCKSOURCE_UNDEFINED = 0x10 /*!< Undefined clock source */ + IRDA_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ + IRDA_CLOCKSOURCE_PCLK2 = 0x01U, /*!< PCLK2 clock source */ + IRDA_CLOCKSOURCE_HSI = 0x02U, /*!< HSI clock source */ + IRDA_CLOCKSOURCE_SYSCLK = 0x04U, /*!< SYSCLK clock source */ + IRDA_CLOCKSOURCE_LSE = 0x08U, /*!< LSE clock source */ + IRDA_CLOCKSOURCE_UNDEFINED = 0x10U /*!< Undefined clock source */ }IRDA_ClockSourceTypeDef; /** @@ -181,7 +186,7 @@ typedef enum */ typedef struct { - USART_TypeDef *Instance; /*!< IRDA registers base address */ + USART_TypeDef *Instance; /*!< USART registers base address */ IRDA_InitTypeDef Init; /*!< IRDA communication parameters */ @@ -189,7 +194,7 @@ typedef struct uint16_t TxXferSize; /*!< IRDA Tx Transfer size */ - __IO uint16_t TxXferCount; /* !Instance->ICR = (__FLAG__)) /** @brief Clear the IRDA PE pending flag. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_FLAG((__HANDLE__), IRDA_CLEAR_PEF) /** @brief Clear the IRDA FE pending flag. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_CLEAR_FEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_FLAG((__HANDLE__), IRDA_CLEAR_FEF) /** @brief Clear the IRDA NE pending flag. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_CLEAR_NEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_FLAG((__HANDLE__), IRDA_CLEAR_NEF) /** @brief Clear the IRDA ORE pending flag. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_CLEAR_OREFLAG(__HANDLE__) __HAL_IRDA_CLEAR_FLAG((__HANDLE__), IRDA_CLEAR_OREF) /** @brief Clear the IRDA IDLE pending flag. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_CLEAR_IDLEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_FLAG((__HANDLE__), IRDA_CLEAR_IDLEF) /** @brief Check whether the specified IRDA flag is set or not. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: * @arg @ref IRDA_FLAG_REACK Receive enable acknowledge flag * @arg @ref IRDA_FLAG_TEACK Transmit enable acknowledge flag @@ -493,8 +537,8 @@ typedef enum /** @brief Enable the specified IRDA interrupt. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __INTERRUPT__: specifies the IRDA interrupt source to enable. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __INTERRUPT__ specifies the IRDA interrupt source to enable. * This parameter can be one of the following values: * @arg @ref IRDA_IT_TXE Transmit Data Register empty interrupt * @arg @ref IRDA_IT_TC Transmission complete interrupt @@ -509,8 +553,8 @@ typedef enum ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & IRDA_IT_MASK)))) /** @brief Disable the specified IRDA interrupt. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __INTERRUPT__: specifies the IRDA interrupt source to disable. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __INTERRUPT__ specifies the IRDA interrupt source to disable. * This parameter can be one of the following values: * @arg @ref IRDA_IT_TXE Transmit Data Register empty interrupt * @arg @ref IRDA_IT_TC Transmission complete interrupt @@ -526,8 +570,8 @@ typedef enum /** @brief Check whether the specified IRDA interrupt has occurred or not. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __IT__: specifies the IRDA interrupt source to check. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __INTERRUPT__ specifies the IRDA interrupt source to check. * This parameter can be one of the following values: * @arg @ref IRDA_IT_TXE Transmit Data Register empty interrupt * @arg @ref IRDA_IT_TC Transmission complete interrupt @@ -537,13 +581,13 @@ typedef enum * @arg @ref IRDA_IT_NE Noise Error interrupt * @arg @ref IRDA_IT_FE Framing Error interrupt * @arg @ref IRDA_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @retval The new state of __IT__ (SET or RESET). */ -#define __HAL_IRDA_GET_IT(__HANDLE__, __IT__) ((__HANDLE__)->Instance->ISR & ((uint32_t)1U << ((__IT__)>> 0x08))) +#define __HAL_IRDA_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (0x01U << ((__INTERRUPT__)>> 0x08U))) != RESET) ? SET : RESET) /** @brief Check whether the specified IRDA interrupt source is enabled or not. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __IT__: specifies the IRDA interrupt source to check. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __INTERRUPT__ specifies the IRDA interrupt source to check. * This parameter can be one of the following values: * @arg @ref IRDA_IT_TXE Transmit Data Register empty interrupt * @arg @ref IRDA_IT_TC Transmission complete interrupt @@ -551,15 +595,15 @@ typedef enum * @arg @ref IRDA_IT_IDLE Idle line detection interrupt * @arg @ref IRDA_IT_ERR Framing, overrun or noise error interrupt * @arg @ref IRDA_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @retval The new state of __IT__ (SET or RESET). */ -#define __HAL_IRDA_GET_IT_SOURCE(__HANDLE__, __IT__) ((((((uint8_t)(__IT__)) >> 5U) == 1)? (__HANDLE__)->Instance->CR1:(((((uint8_t)(__IT__)) >> 5U) == 2)? \ - (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & ((uint32_t)1 << (((uint16_t)(__IT__)) & IRDA_IT_MASK))) - +#define __HAL_IRDA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U)? (__HANDLE__)->Instance->CR1 : \ + (((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x02U)? (__HANDLE__)->Instance->CR2 : \ + (__HANDLE__)->Instance->CR3)) & (0x01U << (((uint16_t)(__INTERRUPT__)) & IRDA_IT_MASK))) != RESET) ? SET : RESET) /** @brief Clear the specified IRDA ISR flag, in setting the proper ICR register flag. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __IT_CLEAR__: specifies the interrupt clear register flag that needs to be set + * @param __HANDLE__ specifies the IRDA Handle. + * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set * to clear the corresponding interrupt * This parameter can be one of the following values: * @arg @ref IRDA_CLEAR_PEF Parity Error Clear Flag @@ -573,8 +617,8 @@ typedef enum /** @brief Set a specific IRDA request flag. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __REQ__: specifies the request flag to set + * @param __HANDLE__ specifies the IRDA Handle. + * @param __REQ__ specifies the request flag to set * This parameter can be one of the following values: * @arg @ref IRDA_AUTOBAUD_REQUEST Auto-Baud Rate Request * @arg @ref IRDA_RXDATA_FLUSH_REQUEST Receive Data flush Request @@ -585,25 +629,25 @@ typedef enum #define __HAL_IRDA_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__)) /** @brief Enable the IRDA one bit sample method. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None - */ + */ #define __HAL_IRDA_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) /** @brief Disable the IRDA one bit sample method. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None - */ + */ #define __HAL_IRDA_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT)) /** @brief Enable UART/USART associated to IRDA Handle. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) /** @brief Disable UART/USART associated to IRDA Handle. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None */ #define __HAL_IRDA_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) @@ -619,7 +663,7 @@ typedef enum /** @brief Compute the mask to apply to retrieve the received data * according to the word length and to the parity bits activation. - * @param __HANDLE__: specifies the IRDA Handle. + * @param __HANDLE__ specifies the IRDA Handle. * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field. */ #define IRDA_MASK_COMPUTATION(__HANDLE__) \ @@ -660,20 +704,20 @@ typedef enum } while(0) /** @brief Ensure that IRDA Baud rate is less or equal to maximum value. - * @param __BAUDRATE__: specifies the IRDA Baudrate set by the user. + * @param __BAUDRATE__ specifies the IRDA Baudrate set by the user. * @retval True or False */ #define IS_IRDA_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 115201) /** @brief Ensure that IRDA prescaler value is strictly larger than 0. - * @param __PRESCALER__: specifies the IRDA prescaler value set by the user. + * @param __PRESCALER__ specifies the IRDA prescaler value set by the user. * @retval True or False */ #define IS_IRDA_PRESCALER(__PRESCALER__) ((__PRESCALER__) > 0) /** * @brief Ensure that IRDA frame length is valid. - * @param __LENGTH__: IRDA frame length. + * @param __LENGTH__ IRDA frame length. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) */ #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \ @@ -682,7 +726,7 @@ typedef enum /** * @brief Ensure that IRDA frame parity is valid. - * @param __PARITY__: IRDA frame parity. + * @param __PARITY__ IRDA frame parity. * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) */ #define IS_IRDA_PARITY(__PARITY__) (((__PARITY__) == IRDA_PARITY_NONE) || \ @@ -691,22 +735,42 @@ typedef enum /** * @brief Ensure that IRDA communication mode is valid. - * @param __MODE__: IRDA communication mode. + * @param __MODE__ IRDA communication mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_IRDA_TX_RX_MODE(__MODE__) ((((__MODE__) & (~((uint32_t)(IRDA_MODE_TX_RX)))) == (uint32_t)0x00) && ((__MODE__) != (uint32_t)0x00)) /** * @brief Ensure that IRDA power mode is valid. - * @param __MODE__: IRDA power mode. + * @param __MODE__ IRDA power mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_IRDA_POWERMODE(__MODE__) (((__MODE__) == IRDA_POWERMODE_LOWPOWER) || \ ((__MODE__) == IRDA_POWERMODE_NORMAL)) +#if defined(USART_PRESC_PRESCALER) +/** + * @brief Ensure that IRDA clock Prescaler is valid. + * @param __CLOCKPRESCALER__ IRDA clock Prescaler value. + * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid) + */ +#define IS_IRDA_CLOCKPRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV1) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV2) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV4) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV6) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV8) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV10) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV12) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV16) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV32) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV64) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV128) || \ + ((__CLOCKPRESCALER__) == IRDA_PRESCALER_DIV256)) +#endif + /** * @brief Ensure that IRDA state is valid. - * @param __STATE__: IRDA state mode. + * @param __STATE__ IRDA state mode. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) */ #define IS_IRDA_STATE(__STATE__) (((__STATE__) == IRDA_STATE_DISABLE) || \ @@ -722,7 +786,7 @@ typedef enum /** * @brief Ensure that IRDA sampling rate is valid. - * @param __ONEBIT__: IRDA sampling rate. + * @param __ONEBIT__ IRDA sampling rate. * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid) */ #define IS_IRDA_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == IRDA_ONE_BIT_SAMPLE_DISABLE) || \ @@ -730,7 +794,7 @@ typedef enum /** * @brief Ensure that IRDA DMA TX mode is valid. - * @param __DMATX__: IRDA DMA TX mode. + * @param __DMATX__ IRDA DMA TX mode. * @retval SET (__DMATX__ is valid) or RESET (__DMATX__ is invalid) */ #define IS_IRDA_DMA_TX(__DMATX__) (((__DMATX__) == IRDA_DMA_TX_DISABLE) || \ @@ -738,7 +802,7 @@ typedef enum /** * @brief Ensure that IRDA DMA RX mode is valid. - * @param __DMARX__: IRDA DMA RX mode. + * @param __DMARX__ IRDA DMA RX mode. * @retval SET (__DMARX__ is valid) or RESET (__DMARX__ is invalid) */ #define IS_IRDA_DMA_RX(__DMARX__) (((__DMARX__) == IRDA_DMA_RX_DISABLE) || \ @@ -746,7 +810,7 @@ typedef enum /** * @brief Ensure that IRDA request is valid. - * @param __PARAM__: IRDA request. + * @param __PARAM__ IRDA request. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) */ #define IS_IRDA_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == IRDA_AUTOBAUD_REQUEST) || \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda_ex.h index 5a19356577..487795de3d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_irda_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_irda_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of IRDA HAL Extended module. ****************************************************************************** * @attention @@ -66,11 +64,13 @@ */ /** @brief Report the IRDA clock source. - * @param __HANDLE__: specifies the IRDA Handle. - * @param __CLOCKSOURCE__: output variable. + * @param __HANDLE__ specifies the IRDA Handle. + * @param __CLOCKSOURCE__ output variable. * @retval IRDA clocking source, written in __CLOCKSOURCE__. */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ do { \ if((__HANDLE__)->Instance == USART1) \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.c index 9917a4f678..e5080c41b1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_iwdg.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief IWDG HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Independent Watchdog (IWDG) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.h index bead6ad7a7..b11dc2119f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_iwdg.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_iwdg.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of IWDG HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.c index 0bd57fdbcd..9c6bdc857f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_lcd.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief LCD Controller HAL module driver. * This file provides firmware functions to manage the following * functionalities of the LCD Controller (LCD) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.h index dc7f4bf57b..754cf5615a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lcd.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_lcd.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of LCD Controller HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.c index 362dfa5fe0..01b100fb10 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_lptim.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief LPTIM HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Low Power Timer (LPTIM) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.h index d5426a7b68..ee1a6b3d65 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_lptim.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_lptim.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of LPTIM HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.c new file mode 100644 index 0000000000..885043f72a --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.c @@ -0,0 +1,1896 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ltdc.c + * @author MCD Application Team + * @brief LTDC HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the LTDC peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Errors functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Program the required configuration through the following parameters: + the LTDC timing, the horizontal and vertical polarity, + the pixel clock polarity, Data Enable polarity and the LTDC background color value + using HAL_LTDC_Init() function + + (#) Program the required configuration through the following parameters: + the pixel format, the blending factors, input alpha value, the window size + and the image size using HAL_LTDC_ConfigLayer() function for foreground + or/and background layer. + + (#) Optionally, configure and enable the CLUT using HAL_LTDC_ConfigCLUT() and + HAL_LTDC_EnableCLUT functions. + + (#) Optionally, enable the Dither using HAL_LTDC_EnableDither(). + + (#) Optionally, configure and enable the Color keying using HAL_LTDC_ConfigColorKeying() + and HAL_LTDC_EnableColorKeying functions. + + (#) Optionally, configure LineInterrupt using HAL_LTDC_ProgramLineEvent() + function + + (#) If needed, reconfigure and change the pixel format value, the alpha value + value, the window size, the window position and the layer start address + for foreground or/and background layer using respectively the following + functions: HAL_LTDC_SetPixelFormat(), HAL_LTDC_SetAlpha(), HAL_LTDC_SetWindowSize(), + HAL_LTDC_SetWindowPosition() and HAL_LTDC_SetAddress(). + + (#) Variant functions with _NoReload suffix allows to set the LTDC configuration/settings without immediate reload. + This is useful in case when the program requires to modify serval LTDC settings (on one or both layers) + then applying(reload) these settings in one shot by calling the function HAL_LTDC_Reload(). + + After calling the _NoReload functions to set different color/format/layer settings, + the program shall call the function HAL_LTDC_Reload() to apply(reload) these settings. + Function HAL_LTDC_Reload() can be called with the parameter ReloadType set to LTDC_RELOAD_IMMEDIATE if + an immediate reload is required. + Function HAL_LTDC_Reload() can be called with the parameter ReloadType set to LTDC_RELOAD_VERTICAL_BLANKING if + the reload should be done in the next vertical blanking period, + this option allows to avoid display flicker by applying the new settings during the vertical blanking period. + + (#) To control LTDC state you can use the following function: HAL_LTDC_GetState() + + *** LTDC HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in LTDC HAL driver. + + (+) __HAL_LTDC_ENABLE: Enable the LTDC. + (+) __HAL_LTDC_DISABLE: Disable the LTDC. + (+) __HAL_LTDC_LAYER_ENABLE: Enable a LTDC Layer. + (+) __HAL_LTDC_LAYER_DISABLE: Disable a LTDC Layer. + (+) __HAL_LTDC_CLEAR_FLAG: Clear the LTDC pending flags. + (+) __HAL_LTDC_ENABLE_IT: Enable the specified LTDC interrupts. + (+) __HAL_LTDC_DISABLE_IT: Disable the specified LTDC interrupts. + + [..] + (@) You can refer to the LTDC HAL driver header file for more useful macros + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +#if defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + +/** @defgroup LTDC LTDC + * @brief LTDC HAL module driver + * @{ + */ + +#ifdef HAL_LTDC_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +static void LTDC_SetConfig(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx); +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup LTDC_Exported_Functions LTDC Exported Functions + * @{ + */ + +/** @defgroup LTDC_Exported_Functions_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initialize and configure the LTDC + (+) De-initialize the LTDC + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the LTDC according to the specified parameters in the LTDC_InitTypeDef. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_Init(LTDC_HandleTypeDef *hltdc) +{ + uint32_t tmp = 0, tmp1 = 0; + + /* Check the LTDC peripheral state */ + if(hltdc == NULL) + { + return HAL_ERROR; + } + + /* Check function parameters */ + assert_param(IS_LTDC_ALL_INSTANCE(hltdc->Instance)); + assert_param(IS_LTDC_HSYNC(hltdc->Init.HorizontalSync)); + assert_param(IS_LTDC_VSYNC(hltdc->Init.VerticalSync)); + assert_param(IS_LTDC_AHBP(hltdc->Init.AccumulatedHBP)); + assert_param(IS_LTDC_AVBP(hltdc->Init.AccumulatedVBP)); + assert_param(IS_LTDC_AAH(hltdc->Init.AccumulatedActiveH)); + assert_param(IS_LTDC_AAW(hltdc->Init.AccumulatedActiveW)); + assert_param(IS_LTDC_TOTALH(hltdc->Init.TotalHeigh)); + assert_param(IS_LTDC_TOTALW(hltdc->Init.TotalWidth)); + assert_param(IS_LTDC_HSPOL(hltdc->Init.HSPolarity)); + assert_param(IS_LTDC_VSPOL(hltdc->Init.VSPolarity)); + assert_param(IS_LTDC_DEPOL(hltdc->Init.DEPolarity)); + assert_param(IS_LTDC_PCPOL(hltdc->Init.PCPolarity)); + + if(hltdc->State == HAL_LTDC_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hltdc->Lock = HAL_UNLOCKED; + /* Init the low level hardware */ + HAL_LTDC_MspInit(hltdc); + } + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Configure the HS, VS, DE and PC polarity */ + hltdc->Instance->GCR &= ~(LTDC_GCR_HSPOL | LTDC_GCR_VSPOL | LTDC_GCR_DEPOL | LTDC_GCR_PCPOL); + hltdc->Instance->GCR |= (uint32_t)(hltdc->Init.HSPolarity | hltdc->Init.VSPolarity | \ + hltdc->Init.DEPolarity | hltdc->Init.PCPolarity); + + /* Set Synchronization size */ + hltdc->Instance->SSCR &= ~(LTDC_SSCR_VSH | LTDC_SSCR_HSW); + tmp = (hltdc->Init.HorizontalSync << 16); + hltdc->Instance->SSCR |= (tmp | hltdc->Init.VerticalSync); + + /* Set Accumulated Back porch */ + hltdc->Instance->BPCR &= ~(LTDC_BPCR_AVBP | LTDC_BPCR_AHBP); + tmp = (hltdc->Init.AccumulatedHBP << 16); + hltdc->Instance->BPCR |= (tmp | hltdc->Init.AccumulatedVBP); + + /* Set Accumulated Active Width */ + hltdc->Instance->AWCR &= ~(LTDC_AWCR_AAH | LTDC_AWCR_AAW); + tmp = (hltdc->Init.AccumulatedActiveW << 16); + hltdc->Instance->AWCR |= (tmp | hltdc->Init.AccumulatedActiveH); + + /* Set Total Width */ + hltdc->Instance->TWCR &= ~(LTDC_TWCR_TOTALH | LTDC_TWCR_TOTALW); + tmp = (hltdc->Init.TotalWidth << 16); + hltdc->Instance->TWCR |= (tmp | hltdc->Init.TotalHeigh); + + /* Set the background color value */ + tmp = ((uint32_t)(hltdc->Init.Backcolor.Green) << 8); + tmp1 = ((uint32_t)(hltdc->Init.Backcolor.Red) << 16); + hltdc->Instance->BCCR &= ~(LTDC_BCCR_BCBLUE | LTDC_BCCR_BCGREEN | LTDC_BCCR_BCRED); + hltdc->Instance->BCCR |= (tmp1 | tmp | hltdc->Init.Backcolor.Blue); + + /* Enable the Transfer Error and FIFO underrun interrupts */ + __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_TE | LTDC_IT_FU); + + /* Enable LTDC by setting LTDCEN bit */ + __HAL_LTDC_ENABLE(hltdc); + + /* Initialize the error code */ + hltdc->ErrorCode = HAL_LTDC_ERROR_NONE; + + /* Initialize the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + return HAL_OK; +} + +/** + * @brief De-initialize the LTDC peripheral. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ + +HAL_StatusTypeDef HAL_LTDC_DeInit(LTDC_HandleTypeDef *hltdc) +{ + /* DeInit the low level hardware */ + HAL_LTDC_MspDeInit(hltdc); + + /* Initialize the error code */ + hltdc->ErrorCode = HAL_LTDC_ERROR_NONE; + + /* Initialize the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Initialize the LTDC MSP. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ +__weak void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hltdc); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_LTDC_MspInit could be implemented in the user file + */ +} + +/** + * @brief De-initialize the LTDC MSP. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ +__weak void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hltdc); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_LTDC_MspDeInit could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup LTDC_Exported_Functions_Group2 IO operation functions + * @brief IO operation functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] This section provides function allowing to: + (+) Handle LTDC interrupt request + +@endverbatim + * @{ + */ +/** + * @brief Handle LTDC interrupt request. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval HAL status + */ +void HAL_LTDC_IRQHandler(LTDC_HandleTypeDef *hltdc) +{ + uint32_t isrflags = READ_REG(hltdc->Instance->ISR); + uint32_t itsources = READ_REG(hltdc->Instance->IER); + + /* Transfer Error Interrupt management ***************************************/ + if(((isrflags & LTDC_ISR_TERRIF) != RESET) && ((itsources & LTDC_IER_TERRIE) != RESET)) + { + /* Disable the transfer Error interrupt */ + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_TE); + + /* Clear the transfer error flag */ + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_TE); + + /* Update error code */ + hltdc->ErrorCode |= HAL_LTDC_ERROR_TE; + + /* Change LTDC state */ + hltdc->State = HAL_LTDC_STATE_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + /* Transfer error Callback */ + HAL_LTDC_ErrorCallback(hltdc); + } + + /* FIFO underrun Interrupt management ***************************************/ + if(((isrflags & LTDC_ISR_FUIF) != RESET) && ((itsources & LTDC_IER_FUIE) != RESET)) + { + /* Disable the FIFO underrun interrupt */ + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_FU); + + /* Clear the FIFO underrun flag */ + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_FU); + + /* Update error code */ + hltdc->ErrorCode |= HAL_LTDC_ERROR_FU; + + /* Change LTDC state */ + hltdc->State = HAL_LTDC_STATE_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + /* Transfer error Callback */ + HAL_LTDC_ErrorCallback(hltdc); + } + + /* Line Interrupt management ************************************************/ + if(((isrflags & LTDC_ISR_LIF) != RESET) && ((itsources & LTDC_IER_LIE) != RESET)) + { + /* Disable the Line interrupt */ + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI); + + /* Clear the Line interrupt flag */ + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_LI); + + /* Change LTDC state */ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + /* Line interrupt Callback */ + HAL_LTDC_LineEventCallback(hltdc); + } + + /* Register reload Interrupt management ***************************************/ + if(((isrflags & LTDC_ISR_RRIF) != RESET) && ((itsources & LTDC_IER_RRIE) != RESET)) + { + /* Disable the register reload interrupt */ + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_RR); + + /* Clear the register reload flag */ + __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_RR); + + /* Change LTDC state */ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + /* Register reload interrupt Callback */ + HAL_LTDC_ReloadEventCallback(hltdc); + } +} + +/** + * @brief Error LTDC callback. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ +__weak void HAL_LTDC_ErrorCallback(LTDC_HandleTypeDef *hltdc) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hltdc); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_LTDC_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief Line Event callback. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ +__weak void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hltdc); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_LTDC_LineEventCallback could be implemented in the user file + */ +} + +/** + * @brief Reload Event callback. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval None + */ +__weak void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hltdc); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_LTDC_ReloadEvenCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup LTDC_Exported_Functions_Group3 Peripheral Control functions + * @brief Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Configure the LTDC foreground or/and background parameters. + (+) Set the active layer. + (+) Configure the color keying. + (+) Configure the C-LUT. + (+) Enable / Disable the color keying. + (+) Enable / Disable the C-LUT. + (+) Update the layer position. + (+) Update the layer size. + (+) Update pixel format on the fly. + (+) Update transparency on the fly. + (+) Update address on the fly. + +@endverbatim + * @{ + */ + +/** + * @brief Configure the LTDC Layer according to the specified + * parameters in the LTDC_InitTypeDef and create the associated handle. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param pLayerCfg pointer to a LTDC_LayerCfgTypeDef structure that contains + * the configuration information for the Layer. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ConfigLayer(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_HCONFIGST(pLayerCfg->WindowX0)); + assert_param(IS_LTDC_HCONFIGSP(pLayerCfg->WindowX1)); + assert_param(IS_LTDC_VCONFIGST(pLayerCfg->WindowY0)); + assert_param(IS_LTDC_VCONFIGSP(pLayerCfg->WindowY1)); + assert_param(IS_LTDC_PIXEL_FORMAT(pLayerCfg->PixelFormat)); + assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha)); + assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha0)); + assert_param(IS_LTDC_BLENDING_FACTOR1(pLayerCfg->BlendingFactor1)); + assert_param(IS_LTDC_BLENDING_FACTOR2(pLayerCfg->BlendingFactor2)); + assert_param(IS_LTDC_CFBLL(pLayerCfg->ImageWidth)); + assert_param(IS_LTDC_CFBLNBR(pLayerCfg->ImageHeight)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Copy new layer configuration into handle structure */ + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + + /* Configure the LTDC Layer */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Initialize the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Configure the color keying. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param RGBValue the color key value + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Configure the default color values */ + LTDC_LAYER(hltdc, LayerIdx)->CKCR &= ~(LTDC_LxCKCR_CKBLUE | LTDC_LxCKCR_CKGREEN | LTDC_LxCKCR_CKRED); + LTDC_LAYER(hltdc, LayerIdx)->CKCR = RGBValue; + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Load the color lookup table. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param pCLUT pointer to the color lookup table address. + * @param CLUTSize the color lookup table size. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ConfigCLUT(LTDC_HandleTypeDef *hltdc, uint32_t *pCLUT, uint32_t CLUTSize, uint32_t LayerIdx) +{ + uint32_t tmp = 0; + uint32_t counter = 0; + uint32_t pcounter = 0; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + for(counter = 0; (counter < CLUTSize); counter++) + { + if(hltdc->LayerCfg[LayerIdx].PixelFormat == LTDC_PIXEL_FORMAT_AL44) + { + tmp = (((counter + 16*counter) << 24) | ((uint32_t)(*pCLUT) & 0xFF) | ((uint32_t)(*pCLUT) & 0xFF00) | ((uint32_t)(*pCLUT) & 0xFF0000)); + } + else + { + tmp = ((counter << 24) | ((uint32_t)(*pCLUT) & 0xFF) | ((uint32_t)(*pCLUT) & 0xFF00) | ((uint32_t)(*pCLUT) & 0xFF0000)); + } + pcounter = (uint32_t)pCLUT + sizeof(*pCLUT); + pCLUT = (uint32_t *)pcounter; + + /* Specifies the C-LUT address and RGB value */ + LTDC_LAYER(hltdc, LayerIdx)->CLUTWR = tmp; + } + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Enable the color keying. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_EnableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Enable LTDC color keying by setting COLKEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_COLKEN; + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Disable the color keying. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_DisableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable LTDC color keying by setting COLKEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_COLKEN; + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Enable the color lookup table. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_EnableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Enable LTDC color lookup table by setting CLUTEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_CLUTEN; + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Disable the color lookup table. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_DisableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable LTDC color lookup table by setting CLUTEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_CLUTEN; + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Enable Dither. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_LTDC_EnableDither(LTDC_HandleTypeDef *hltdc) +{ + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Enable Dither by setting DTEN bit */ + LTDC->GCR |= (uint32_t)LTDC_GCR_DEN; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Disable Dither. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval HAL status + */ + +HAL_StatusTypeDef HAL_LTDC_DisableDither(LTDC_HandleTypeDef *hltdc) +{ + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable Dither by setting DTEN bit */ + LTDC->GCR &= ~(uint32_t)LTDC_GCR_DEN; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Set the LTDC window size. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param XSize LTDC Pixel per line + * @param YSize LTDC Line number + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetWindowSize(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters (Layers parameters)*/ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_CFBLL(XSize)); + assert_param(IS_LTDC_CFBLNBR(YSize)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* update horizontal stop */ + pLayerCfg->WindowX1 = XSize + pLayerCfg->WindowX0; + + /* update vertical stop */ + pLayerCfg->WindowY1 = YSize + pLayerCfg->WindowY0; + + /* Reconfigures the color frame buffer pitch in byte */ + pLayerCfg->ImageWidth = XSize; + + /* Reconfigures the frame buffer line number */ + pLayerCfg->ImageHeight = YSize; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Set the LTDC window position. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param X0 LTDC window X offset + * @param Y0 LTDC window Y offset + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetWindowPosition(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_CFBLL(X0)); + assert_param(IS_LTDC_CFBLNBR(Y0)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* update horizontal start/stop */ + pLayerCfg->WindowX0 = X0; + pLayerCfg->WindowX1 = X0 + pLayerCfg->ImageWidth; + + /* update vertical start/stop */ + pLayerCfg->WindowY0 = Y0; + pLayerCfg->WindowY1 = Y0 + pLayerCfg->ImageHeight; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reconfigure the pixel format. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Pixelformat new pixel format value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetPixelFormat(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_PIXEL_FORMAT(Pixelformat)); + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the pixel format */ + pLayerCfg->PixelFormat = Pixelformat; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reconfigure the layer alpha value. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Alpha new alpha value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetAlpha(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_ALPHA(Alpha)); + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the Alpha value */ + pLayerCfg->Alpha = Alpha; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} +/** + * @brief Reconfigure the frame buffer Address. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Address new address value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetAddress(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the Address */ + pLayerCfg->FBStartAdress = Address; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Set the Immediate Reload type */ + hltdc->Instance->SRCR = LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Function used to reconfigure the pitch for specific cases where the attached LayerIdx buffer have a width that is + * larger than the one intended to be displayed on screen. Example of a buffer 800x480 attached to layer for which we + * want to read and display on screen only a portion 320x240 taken in the center of the buffer. The pitch in pixels + * will be in that case 800 pixels and not 320 pixels as initially configured by previous call to HAL_LTDC_ConfigLayer(). + * @note This function should be called only after a previous call to HAL_LTDC_ConfigLayer() to modify the default pitch + * configured by HAL_LTDC_ConfigLayer() when required (refer to example described just above). + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LinePitchInPixels New line pitch in pixels to configure for LTDC layer 'LayerIdx'. + * @param LayerIdx LTDC layer index concerned by the modification of line pitch. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetPitch(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx) +{ + uint32_t tmp = 0; + uint32_t pitchUpdate = 0; + uint32_t pixelFormat = 0; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* get LayerIdx used pixel format */ + pixelFormat = hltdc->LayerCfg[LayerIdx].PixelFormat; + + if(pixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + { + tmp = 4; + } + else if (pixelFormat == LTDC_PIXEL_FORMAT_RGB888) + { + tmp = 3; + } + else if((pixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_AL88)) + { + tmp = 2; + } + else + { + tmp = 1; + } + + pitchUpdate = ((LinePitchInPixels * tmp) << 16); + + /* Clear previously set standard pitch */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~LTDC_LxCFBLR_CFBP; + + /* Set the Reload type as immediate update of LTDC pitch configured above */ + LTDC->SRCR |= LTDC_SRCR_IMR; + + /* Set new line pitch value */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR |= pitchUpdate; + + /* Set the Reload type as immediate update of LTDC pitch configured above */ + LTDC->SRCR |= LTDC_SRCR_IMR; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Define the position of the line interrupt. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Line Line Interrupt Position. + * @note User application may resort to HAL_LTDC_LineEventCallback() at line interrupt generation. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ProgramLineEvent(LTDC_HandleTypeDef *hltdc, uint32_t Line) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LIPOS(Line)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable the Line interrupt */ + __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI); + + /* Set the Line Interrupt position */ + LTDC->LIPCR = (uint32_t)Line; + + /* Enable the Line interrupt */ + __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_LI); + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reload LTDC Layers configuration. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param ReloadType This parameter can be one of the following values : + * LTDC_RELOAD_IMMEDIATE : Immediate Reload + * LTDC_RELOAD_VERTICAL_BLANKING : Reload in the next Vertical Blanking + * @note User application may resort to HAL_LTDC_ReloadEventCallback() at reload interrupt generation. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_Reload(LTDC_HandleTypeDef *hltdc, uint32_t ReloadType) +{ + /* Check the parameters */ + assert_param(IS_LTDC_RELOAD(ReloadType)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Enable the Reload interrupt */ + __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_RR); + + /* Apply Reload type */ + hltdc->Instance->SRCR = ReloadType; + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Configure the LTDC Layer according to the specified without reloading + * parameters in the LTDC_InitTypeDef and create the associated handle. + * Variant of the function HAL_LTDC_ConfigLayer without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param pLayerCfg pointer to a LTDC_LayerCfgTypeDef structure that contains + * the configuration information for the Layer. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ConfigLayer_NoReload(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_HCONFIGST(pLayerCfg->WindowX0)); + assert_param(IS_LTDC_HCONFIGSP(pLayerCfg->WindowX1)); + assert_param(IS_LTDC_VCONFIGST(pLayerCfg->WindowY0)); + assert_param(IS_LTDC_VCONFIGSP(pLayerCfg->WindowY1)); + assert_param(IS_LTDC_PIXEL_FORMAT(pLayerCfg->PixelFormat)); + assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha)); + assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha0)); + assert_param(IS_LTDC_BLENDING_FACTOR1(pLayerCfg->BlendingFactor1)); + assert_param(IS_LTDC_BLENDING_FACTOR2(pLayerCfg->BlendingFactor2)); + assert_param(IS_LTDC_CFBLL(pLayerCfg->ImageWidth)); + assert_param(IS_LTDC_CFBLNBR(pLayerCfg->ImageHeight)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Copy new layer configuration into handle structure */ + hltdc->LayerCfg[LayerIdx] = *pLayerCfg; + + /* Configure the LTDC Layer */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Initialize the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Set the LTDC window size without reloading. + * Variant of the function HAL_LTDC_SetWindowSize without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param XSize LTDC Pixel per line + * @param YSize LTDC Line number + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetWindowSize_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters (Layers parameters)*/ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_CFBLL(XSize)); + assert_param(IS_LTDC_CFBLNBR(YSize)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* update horizontal stop */ + pLayerCfg->WindowX1 = XSize + pLayerCfg->WindowX0; + + /* update vertical stop */ + pLayerCfg->WindowY1 = YSize + pLayerCfg->WindowY0; + + /* Reconfigures the color frame buffer pitch in byte */ + pLayerCfg->ImageWidth = XSize; + + /* Reconfigures the frame buffer line number */ + pLayerCfg->ImageHeight = YSize; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Set the LTDC window position without reloading. + * Variant of the function HAL_LTDC_SetWindowPosition without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param X0 LTDC window X offset + * @param Y0 LTDC window Y offset + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetWindowPosition_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + assert_param(IS_LTDC_CFBLL(X0)); + assert_param(IS_LTDC_CFBLNBR(Y0)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* update horizontal start/stop */ + pLayerCfg->WindowX0 = X0; + pLayerCfg->WindowX1 = X0 + pLayerCfg->ImageWidth; + + /* update vertical start/stop */ + pLayerCfg->WindowY0 = Y0; + pLayerCfg->WindowY1 = Y0 + pLayerCfg->ImageHeight; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reconfigure the pixel format without reloading. + * Variant of the function HAL_LTDC_SetPixelFormat without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDfef structure that contains + * the configuration information for the LTDC. + * @param Pixelformat new pixel format value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetPixelFormat_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_PIXEL_FORMAT(Pixelformat)); + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the pixel format */ + pLayerCfg->PixelFormat = Pixelformat; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reconfigure the layer alpha value without reloading. + * Variant of the function HAL_LTDC_SetAlpha without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Alpha new alpha value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetAlpha_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_ALPHA(Alpha)); + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the Alpha value */ + pLayerCfg->Alpha = Alpha; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Reconfigure the frame buffer Address without reloading. + * Variant of the function HAL_LTDC_SetAddress without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param Address new address value. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetAddress_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx) +{ + LTDC_LayerCfgTypeDef *pLayerCfg; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Get layer configuration from handle structure */ + pLayerCfg = &hltdc->LayerCfg[LayerIdx]; + + /* Reconfigure the Address */ + pLayerCfg->FBStartAdress = Address; + + /* Set LTDC parameters */ + LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx); + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Function used to reconfigure the pitch for specific cases where the attached LayerIdx buffer have a width that is + * larger than the one intended to be displayed on screen. Example of a buffer 800x480 attached to layer for which we + * want to read and display on screen only a portion 320x240 taken in the center of the buffer. The pitch in pixels + * will be in that case 800 pixels and not 320 pixels as initially configured by previous call to HAL_LTDC_ConfigLayer(). + * @note This function should be called only after a previous call to HAL_LTDC_ConfigLayer() to modify the default pitch + * configured by HAL_LTDC_ConfigLayer() when required (refer to example described just above). + * Variant of the function HAL_LTDC_SetPitch without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LinePitchInPixels New line pitch in pixels to configure for LTDC layer 'LayerIdx'. + * @param LayerIdx LTDC layer index concerned by the modification of line pitch. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_SetPitch_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx) +{ + uint32_t tmp = 0; + uint32_t pitchUpdate = 0; + uint32_t pixelFormat = 0; + + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* get LayerIdx used pixel format */ + pixelFormat = hltdc->LayerCfg[LayerIdx].PixelFormat; + + if(pixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + { + tmp = 4; + } + else if (pixelFormat == LTDC_PIXEL_FORMAT_RGB888) + { + tmp = 3; + } + else if((pixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \ + (pixelFormat == LTDC_PIXEL_FORMAT_AL88)) + { + tmp = 2; + } + else + { + tmp = 1; + } + + pitchUpdate = ((LinePitchInPixels * tmp) << 16); + + /* Clear previously set standard pitch */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~LTDC_LxCFBLR_CFBP; + + /* Set new line pitch value */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR |= pitchUpdate; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + + +/** + * @brief Configure the color keying without reloading. + * Variant of the function HAL_LTDC_ConfigColorKeying without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param RGBValue the color key value + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Configure the default color values */ + LTDC_LAYER(hltdc, LayerIdx)->CKCR &= ~(LTDC_LxCKCR_CKBLUE | LTDC_LxCKCR_CKGREEN | LTDC_LxCKCR_CKRED); + LTDC_LAYER(hltdc, LayerIdx)->CKCR = RGBValue; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Enable the color keying without reloading. + * Variant of the function HAL_LTDC_EnableColorKeying without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_EnableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Enable LTDC color keying by setting COLKEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_COLKEN; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Disable the color keying without reloading. + * Variant of the function HAL_LTDC_DisableColorKeying without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_DisableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable LTDC color keying by setting COLKEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_COLKEN; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Enable the color lookup table without reloading. + * Variant of the function HAL_LTDC_EnableCLUT without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_EnableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable LTDC color lookup table by setting CLUTEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_CLUTEN; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @brief Disable the color lookup table without reloading. + * Variant of the function HAL_LTDC_DisableCLUT without immediate reload. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: + * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDC_DisableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx) +{ + /* Check the parameters */ + assert_param(IS_LTDC_LAYER(LayerIdx)); + + /* Process locked */ + __HAL_LOCK(hltdc); + + /* Change LTDC peripheral state */ + hltdc->State = HAL_LTDC_STATE_BUSY; + + /* Disable LTDC color lookup table by setting CLUTEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_CLUTEN; + + /* Do not set the Immediate Reload */ + + /* Change the LTDC state*/ + hltdc->State = HAL_LTDC_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hltdc); + + return HAL_OK; +} + +/** + * @} + */ + +/** @defgroup LTDC_Exported_Functions_Group4 Peripheral State and Errors functions + * @brief Peripheral State and Errors functions + * +@verbatim + =============================================================================== + ##### Peripheral State and Errors functions ##### + =============================================================================== + [..] + This subsection provides functions allowing to + (+) Check the LTDC handle state. + (+) Get the LTDC handle error code. + +@endverbatim + * @{ + */ + +/** + * @brief Return the LTDC handle state. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @retval HAL state + */ +HAL_LTDC_StateTypeDef HAL_LTDC_GetState(LTDC_HandleTypeDef *hltdc) +{ + return hltdc->State; +} + +/** + * @brief Return the LTDC handle error code. + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. +* @retval LTDC Error Code +*/ +uint32_t HAL_LTDC_GetError(LTDC_HandleTypeDef *hltdc) +{ + return hltdc->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup LTDC_Private_Functions LTDC Private Functions + * @{ + */ + +/** + * @brief Configure the LTDC peripheral + * @param hltdc Pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param pLayerCfg Pointer LTDC Layer Configuration structure + * @param LayerIdx LTDC Layer index. + * This parameter can be one of the following values: LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1) + * @retval None + */ +static void LTDC_SetConfig(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx) +{ + uint32_t tmp = 0; + uint32_t tmp1 = 0; + uint32_t tmp2 = 0; + + /* Configure the horizontal start and stop position */ + tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16)) << 16); + LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS); + LTDC_LAYER(hltdc, LayerIdx)->WHPCR = ((pLayerCfg->WindowX0 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16) + 1) | tmp); + + /* Configure the vertical start and stop position */ + tmp = ((pLayerCfg->WindowY1 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP)) << 16); + LTDC_LAYER(hltdc, LayerIdx)->WVPCR &= ~(LTDC_LxWVPCR_WVSTPOS | LTDC_LxWVPCR_WVSPPOS); + LTDC_LAYER(hltdc, LayerIdx)->WVPCR = ((pLayerCfg->WindowY0 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP) + 1) | tmp); + + /* Specifies the pixel format */ + LTDC_LAYER(hltdc, LayerIdx)->PFCR &= ~(LTDC_LxPFCR_PF); + LTDC_LAYER(hltdc, LayerIdx)->PFCR = (pLayerCfg->PixelFormat); + + /* Configure the default color values */ + tmp = ((uint32_t)(pLayerCfg->Backcolor.Green) << 8); + tmp1 = ((uint32_t)(pLayerCfg->Backcolor.Red) << 16); + tmp2 = (pLayerCfg->Alpha0 << 24); + LTDC_LAYER(hltdc, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | LTDC_LxDCCR_DCALPHA); + LTDC_LAYER(hltdc, LayerIdx)->DCCR = (pLayerCfg->Backcolor.Blue | tmp | tmp1 | tmp2); + + /* Specifies the constant alpha value */ + LTDC_LAYER(hltdc, LayerIdx)->CACR &= ~(LTDC_LxCACR_CONSTA); + LTDC_LAYER(hltdc, LayerIdx)->CACR = (pLayerCfg->Alpha); + + /* Specifies the blending factors */ + LTDC_LAYER(hltdc, LayerIdx)->BFCR &= ~(LTDC_LxBFCR_BF2 | LTDC_LxBFCR_BF1); + LTDC_LAYER(hltdc, LayerIdx)->BFCR = (pLayerCfg->BlendingFactor1 | pLayerCfg->BlendingFactor2); + + /* Configure the color frame buffer start address */ + LTDC_LAYER(hltdc, LayerIdx)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); + LTDC_LAYER(hltdc, LayerIdx)->CFBAR = (pLayerCfg->FBStartAdress); + + if(pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + { + tmp = 4; + } + else if (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_RGB888) + { + tmp = 3; + } + else if((pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ + (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ + (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \ + (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_AL88)) + { + tmp = 2; + } + else + { + tmp = 1; + } + + /* Configure the color frame buffer pitch in byte */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~(LTDC_LxCFBLR_CFBLL | LTDC_LxCFBLR_CFBP); + LTDC_LAYER(hltdc, LayerIdx)->CFBLR = (((pLayerCfg->ImageWidth * tmp) << 16) | (((pLayerCfg->WindowX1 - pLayerCfg->WindowX0) * tmp) + 3)); + + /* Configure the frame buffer line number */ + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR &= ~(LTDC_LxCFBLNR_CFBLNBR); + LTDC_LAYER(hltdc, LayerIdx)->CFBLNR = (pLayerCfg->ImageHeight); + + /* Enable LTDC_Layer by setting LEN bit */ + LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_LEN; +} + +/** + * @} + */ + +#endif /* HAL_LTDC_MODULE_ENABLED */ + +/** + * @} + */ + +#endif /* STM32L4R7xx || STM32L4R9xx || STM32L4S7xx || STM32L4S9xx */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.h new file mode 100644 index 0000000000..b5f308980a --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc.h @@ -0,0 +1,649 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ltdc.h + * @author MCD Application Team + * @brief Header file of LTDC HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_LTDC_H +#define __STM32L4xx_HAL_LTDC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup LTDC LTDC + * @brief LTDC HAL module driver + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup LTDC_Exported_Types LTDC Exported Types + * @{ + */ +#define MAX_LAYER 2U + +/** + * @brief LTDC color structure definition + */ +typedef struct +{ + uint8_t Blue; /*!< Configures the blue value. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ + + uint8_t Green; /*!< Configures the green value. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ + + uint8_t Red; /*!< Configures the red value. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ + + uint8_t Reserved; /*!< Reserved 0xFF */ +} LTDC_ColorTypeDef; + +/** + * @brief LTDC Init structure definition + */ +typedef struct +{ + uint32_t HSPolarity; /*!< configures the horizontal synchronization polarity. + This parameter can be one value of @ref LTDC_HS_POLARITY */ + + uint32_t VSPolarity; /*!< configures the vertical synchronization polarity. + This parameter can be one value of @ref LTDC_VS_POLARITY */ + + uint32_t DEPolarity; /*!< configures the data enable polarity. + This parameter can be one of value of @ref LTDC_DE_POLARITY */ + + uint32_t PCPolarity; /*!< configures the pixel clock polarity. + This parameter can be one of value of @ref LTDC_PC_POLARITY */ + + uint32_t HorizontalSync; /*!< configures the number of Horizontal synchronization width. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ + + uint32_t VerticalSync; /*!< configures the number of Vertical synchronization height. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x7FF. */ + + uint32_t AccumulatedHBP; /*!< configures the accumulated horizontal back porch width. + This parameter must be a number between Min_Data = LTDC_HorizontalSync and Max_Data = 0xFFF. */ + + uint32_t AccumulatedVBP; /*!< configures the accumulated vertical back porch height. + This parameter must be a number between Min_Data = LTDC_VerticalSync and Max_Data = 0x7FF. */ + + uint32_t AccumulatedActiveW; /*!< configures the accumulated active width. + This parameter must be a number between Min_Data = LTDC_AccumulatedHBP and Max_Data = 0xFFF. */ + + uint32_t AccumulatedActiveH; /*!< configures the accumulated active height. + This parameter must be a number between Min_Data = LTDC_AccumulatedVBP and Max_Data = 0x7FF. */ + + uint32_t TotalWidth; /*!< configures the total width. + This parameter must be a number between Min_Data = LTDC_AccumulatedActiveW and Max_Data = 0xFFF. */ + + uint32_t TotalHeigh; /*!< configures the total height. + This parameter must be a number between Min_Data = LTDC_AccumulatedActiveH and Max_Data = 0x7FF. */ + + LTDC_ColorTypeDef Backcolor; /*!< Configures the background color. */ +} LTDC_InitTypeDef; + +/** + * @brief LTDC Layer structure definition + */ +typedef struct +{ + uint32_t WindowX0; /*!< Configures the Window Horizontal Start Position. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ + + uint32_t WindowX1; /*!< Configures the Window Horizontal Stop Position. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ + + uint32_t WindowY0; /*!< Configures the Window vertical Start Position. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x7FF. */ + + uint32_t WindowY1; /*!< Configures the Window vertical Stop Position. + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x7FF. */ + + uint32_t PixelFormat; /*!< Specifies the pixel format. + This parameter can be one of value of @ref LTDC_Pixelformat */ + + uint32_t Alpha; /*!< Specifies the constant alpha used for blending. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ + + uint32_t Alpha0; /*!< Configures the default alpha value. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ + + uint32_t BlendingFactor1; /*!< Select the blending factor 1. + This parameter can be one of value of @ref LTDC_BlendingFactor1 */ + + uint32_t BlendingFactor2; /*!< Select the blending factor 2. + This parameter can be one of value of @ref LTDC_BlendingFactor2 */ + + uint32_t FBStartAdress; /*!< Configures the color frame buffer address */ + + uint32_t ImageWidth; /*!< Configures the color frame buffer line length. + This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x1FFF. */ + + uint32_t ImageHeight; /*!< Specifies the number of line in frame buffer. + This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x7FF. */ + + LTDC_ColorTypeDef Backcolor; /*!< Configures the layer background color. */ +} LTDC_LayerCfgTypeDef; + +/** + * @brief HAL LTDC State structures definition + */ +typedef enum +{ + HAL_LTDC_STATE_RESET = 0x00U, /*!< LTDC not yet initialized or disabled */ + HAL_LTDC_STATE_READY = 0x01U, /*!< LTDC initialized and ready for use */ + HAL_LTDC_STATE_BUSY = 0x02U, /*!< LTDC internal process is ongoing */ + HAL_LTDC_STATE_TIMEOUT = 0x03U, /*!< LTDC Timeout state */ + HAL_LTDC_STATE_ERROR = 0x04U /*!< LTDC state error */ +}HAL_LTDC_StateTypeDef; + +/** + * @brief LTDC handle Structure definition + */ +typedef struct +{ + LTDC_TypeDef *Instance; /*!< LTDC Register base address */ + + LTDC_InitTypeDef Init; /*!< LTDC parameters */ + + LTDC_LayerCfgTypeDef LayerCfg[MAX_LAYER]; /*!< LTDC Layers parameters */ + + HAL_LockTypeDef Lock; /*!< LTDC Lock */ + + __IO HAL_LTDC_StateTypeDef State; /*!< LTDC state */ + + __IO uint32_t ErrorCode; /*!< LTDC Error code */ + +} LTDC_HandleTypeDef; +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup LTDC_Exported_Constants LTDC Exported Constants + * @{ + */ + +/** @defgroup LTDC_Error_Code LTDC Error Code + * @{ + */ +#define HAL_LTDC_ERROR_NONE ((uint32_t)0x00000000U) /*!< LTDC No error */ +#define HAL_LTDC_ERROR_TE ((uint32_t)0x00000001U) /*!< LTDC Transfer error */ +#define HAL_LTDC_ERROR_FU ((uint32_t)0x00000002U) /*!< LTDC FIFO Underrun */ +#define HAL_LTDC_ERROR_TIMEOUT ((uint32_t)0x00000020U) /*!< LTDC Timeout error */ +/** + * @} + */ + +/** @defgroup LTDC_Layer LTDC Layer + * @{ + */ +#define LTDC_LAYER_1 ((uint32_t)0x00000000U) /*!< LTDC Layer 1 */ +#define LTDC_LAYER_2 ((uint32_t)0x00000001U) /*!< LTDC Layer 2 */ +/** + * @} + */ + +/** @defgroup LTDC_HS_POLARITY LTDC HS POLARITY + * @{ + */ +#define LTDC_HSPOLARITY_AL ((uint32_t)0x00000000U) /*!< Horizontal Synchronization is active low. */ +#define LTDC_HSPOLARITY_AH LTDC_GCR_HSPOL /*!< Horizontal Synchronization is active high. */ +/** + * @} + */ + +/** @defgroup LTDC_VS_POLARITY LTDC VS POLARITY + * @{ + */ +#define LTDC_VSPOLARITY_AL ((uint32_t)0x00000000U) /*!< Vertical Synchronization is active low. */ +#define LTDC_VSPOLARITY_AH LTDC_GCR_VSPOL /*!< Vertical Synchronization is active high. */ +/** + * @} + */ + +/** @defgroup LTDC_DE_POLARITY LTDC DE POLARITY + * @{ + */ +#define LTDC_DEPOLARITY_AL ((uint32_t)0x00000000U) /*!< Data Enable, is active low. */ +#define LTDC_DEPOLARITY_AH LTDC_GCR_DEPOL /*!< Data Enable, is active high. */ +/** + * @} + */ + +/** @defgroup LTDC_PC_POLARITY LTDC PC POLARITY + * @{ + */ +#define LTDC_PCPOLARITY_IPC ((uint32_t)0x00000000U) /*!< input pixel clock. */ +#define LTDC_PCPOLARITY_IIPC LTDC_GCR_PCPOL /*!< inverted input pixel clock. */ +/** + * @} + */ + +/** @defgroup LTDC_SYNC LTDC SYNC + * @{ + */ +#define LTDC_HORIZONTALSYNC (LTDC_SSCR_HSW >> 16U) /*!< Horizontal synchronization width. */ +#define LTDC_VERTICALSYNC LTDC_SSCR_VSH /*!< Vertical synchronization height. */ +/** + * @} + */ + +/** @defgroup LTDC_BACK_COLOR LTDC BACK COLOR + * @{ + */ +#define LTDC_COLOR ((uint32_t)0x000000FFU) /*!< Color mask */ +/** + * @} + */ + +/** @defgroup LTDC_BlendingFactor1 LTDC Blending Factor1 + * @{ + */ +#define LTDC_BLENDING_FACTOR1_CA ((uint32_t)0x00000400U) /*!< Blending factor : Cte Alpha */ +#define LTDC_BLENDING_FACTOR1_PAxCA ((uint32_t)0x00000600U) /*!< Blending factor : Cte Alpha x Pixel Alpha*/ +/** + * @} + */ + +/** @defgroup LTDC_BlendingFactor2 LTDC Blending Factor2 + * @{ + */ +#define LTDC_BLENDING_FACTOR2_CA ((uint32_t)0x00000005U) /*!< Blending factor : Cte Alpha */ +#define LTDC_BLENDING_FACTOR2_PAxCA ((uint32_t)0x00000007U) /*!< Blending factor : Cte Alpha x Pixel Alpha*/ +/** + * @} + */ + +/** @defgroup LTDC_Pixelformat LTDC Pixel format + * @{ + */ +#define LTDC_PIXEL_FORMAT_ARGB8888 ((uint32_t)0x00000000U) /*!< ARGB8888 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_RGB888 ((uint32_t)0x00000001U) /*!< RGB888 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_RGB565 ((uint32_t)0x00000002U) /*!< RGB565 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_ARGB1555 ((uint32_t)0x00000003U) /*!< ARGB1555 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_ARGB4444 ((uint32_t)0x00000004U) /*!< ARGB4444 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_L8 ((uint32_t)0x00000005U) /*!< L8 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_AL44 ((uint32_t)0x00000006U) /*!< AL44 LTDC pixel format */ +#define LTDC_PIXEL_FORMAT_AL88 ((uint32_t)0x00000007U) /*!< AL88 LTDC pixel format */ +/** + * @} + */ + +/** @defgroup LTDC_Alpha LTDC Alpha + * @{ + */ +#define LTDC_ALPHA LTDC_LxCACR_CONSTA /*!< LTDC Constant Alpha mask */ +/** + * @} + */ + +/** @defgroup LTDC_LAYER_Config LTDC LAYER Config + * @{ + */ +#define LTDC_STOPPOSITION (LTDC_LxWHPCR_WHSPPOS >> 16U) /*!< LTDC Layer stop position */ +#define LTDC_STARTPOSITION LTDC_LxWHPCR_WHSTPOS /*!< LTDC Layer start position */ + +#define LTDC_COLOR_FRAME_BUFFER LTDC_LxCFBLR_CFBLL /*!< LTDC Layer Line length */ +#define LTDC_LINE_NUMBER LTDC_LxCFBLNR_CFBLNBR /*!< LTDC Layer Line number */ +/** + * @} + */ + +/** @defgroup LTDC_Interrupts LTDC Interrupts + * @{ + */ +#define LTDC_IT_LI LTDC_IER_LIE /*!< LTDC Line Interrupt */ +#define LTDC_IT_FU LTDC_IER_FUIE /*!< LTDC FIFO Underrun Interrupt */ +#define LTDC_IT_TE LTDC_IER_TERRIE /*!< LTDC Transfer Error Interrupt */ +#define LTDC_IT_RR LTDC_IER_RRIE /*!< LTDC Register Reload Interrupt */ +/** + * @} + */ + +/** @defgroup LTDC_Flags LTDC Flags + * @{ + */ +#define LTDC_FLAG_LI LTDC_ISR_LIF /*!< LTDC Line Interrupt Flag */ +#define LTDC_FLAG_FU LTDC_ISR_FUIF /*!< LTDC FIFO Underrun interrupt Flag */ +#define LTDC_FLAG_TE LTDC_ISR_TERRIF /*!< LTDC Transfer Error interrupt Flag */ +#define LTDC_FLAG_RR LTDC_ISR_RRIF /*!< LTDC Register Reload interrupt Flag */ +/** + * @} + */ + +/** @defgroup LTDC_Reload_Type LTDC Reload Type + * @{ + */ +#define LTDC_RELOAD_IMMEDIATE LTDC_SRCR_IMR /*!< Immediate Reload */ +#define LTDC_RELOAD_VERTICAL_BLANKING LTDC_SRCR_VBR /*!< Vertical Blanking Reload */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup LTDC_Exported_Macros LTDC Exported Macros + * @{ + */ + +/** @brief Reset LTDC handle state. + * @param __HANDLE__ LTDC handle + * @retval None + */ +#define __HAL_LTDC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_LTDC_STATE_RESET) + +/** + * @brief Enable the LTDC. + * @param __HANDLE__ LTDC handle + * @retval None. + */ +#define __HAL_LTDC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->GCR |= LTDC_GCR_LTDCEN) + +/** + * @brief Disable the LTDC. + * @param __HANDLE__ LTDC handle + * @retval None. + */ +#define __HAL_LTDC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->GCR &= ~(LTDC_GCR_LTDCEN)) + +/** + * @brief Enable the LTDC Layer. + * @param __HANDLE__ LTDC handle + * @param __LAYER__ Specify the layer to be enabled. + * This parameter can be LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval None. + */ +#define __HAL_LTDC_LAYER_ENABLE(__HANDLE__, __LAYER__) ((LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR |= (uint32_t)LTDC_LxCR_LEN) + +/** + * @brief Disable the LTDC Layer. + * @param __HANDLE__ LTDC handle + * @param __LAYER__ Specify the layer to be disabled. + * This parameter can be LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1). + * @retval None. + */ +#define __HAL_LTDC_LAYER_DISABLE(__HANDLE__, __LAYER__) ((LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR &= ~(uint32_t)LTDC_LxCR_LEN) + +/** + * @brief Reload immediately all LTDC Layers. + * @param __HANDLE__ LTDC handle + * @retval None. + */ +#define __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(__HANDLE__) ((__HANDLE__)->Instance->SRCR |= LTDC_SRCR_IMR) + +/** + * @brief Reload during vertical blanking period all LTDC Layers. + * @param __HANDLE__ LTDC handle + * @retval None. + */ +#define __HAL_LTDC_VERTICAL_BLANKING_RELOAD_CONFIG(__HANDLE__) ((__HANDLE__)->Instance->SRCR |= LTDC_SRCR_VBR) + +/* Interrupt & Flag management */ +/** + * @brief Get the LTDC pending flags. + * @param __HANDLE__ LTDC handle + * @param __FLAG__ Get the specified flag. + * This parameter can be any combination of the following values: + * @arg LTDC_FLAG_LI: Line Interrupt flag + * @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag + * @arg LTDC_FLAG_TE: Transfer Error interrupt flag + * @arg LTDC_FLAG_RR: Register Reload Interrupt Flag + * @retval The state of FLAG (SET or RESET). + */ +#define __HAL_LTDC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR & (__FLAG__)) + +/** + * @brief Clears the LTDC pending flags. + * @param __HANDLE__ LTDC handle + * @param __FLAG__ Specify the flag to clear. + * This parameter can be any combination of the following values: + * @arg LTDC_FLAG_LI: Line Interrupt flag + * @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag + * @arg LTDC_FLAG_TE: Transfer Error interrupt flag + * @arg LTDC_FLAG_RR: Register Reload Interrupt Flag + * @retval None + */ +#define __HAL_LTDC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) + +/** + * @brief Enables the specified LTDC interrupts. + * @param __HANDLE__ LTDC handle + * @param __INTERRUPT__ Specify the LTDC interrupt sources to be enabled. + * This parameter can be any combination of the following values: + * @arg LTDC_IT_LI: Line Interrupt flag + * @arg LTDC_IT_FU: FIFO Underrun Interrupt flag + * @arg LTDC_IT_TE: Transfer Error interrupt flag + * @arg LTDC_IT_RR: Register Reload Interrupt Flag + * @retval None + */ +#define __HAL_LTDC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) + +/** + * @brief Disables the specified LTDC interrupts. + * @param __HANDLE__ LTDC handle + * @param __INTERRUPT__ Specify the LTDC interrupt sources to be disabled. + * This parameter can be any combination of the following values: + * @arg LTDC_IT_LI: Line Interrupt flag + * @arg LTDC_IT_FU: FIFO Underrun Interrupt flag + * @arg LTDC_IT_TE: Transfer Error interrupt flag + * @arg LTDC_IT_RR: Register Reload Interrupt Flag + * @retval None + */ +#define __HAL_LTDC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__)) + +/** + * @brief Check whether the specified LTDC interrupt has occurred or not. + * @param __HANDLE__ LTDC handle + * @param __INTERRUPT__ Specify the LTDC interrupt source to check. + * This parameter can be one of the following values: + * @arg LTDC_IT_LI: Line Interrupt flag + * @arg LTDC_IT_FU: FIFO Underrun Interrupt flag + * @arg LTDC_IT_TE: Transfer Error interrupt flag + * @arg LTDC_IT_RR: Register Reload Interrupt Flag + * @retval The state of INTERRUPT (SET or RESET). + */ +#define __HAL_LTDC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER & (__INTERRUPT__)) +/** + * @} + */ + +/* Include LTDC HAL Extension module */ +#include "stm32l4xx_hal_ltdc_ex.h" + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup LTDC_Exported_Functions + * @{ + */ +/** @addtogroup LTDC_Exported_Functions_Group1 + * @{ + */ +/* Initialization and de-initialization functions *****************************/ +HAL_StatusTypeDef HAL_LTDC_Init(LTDC_HandleTypeDef *hltdc); +HAL_StatusTypeDef HAL_LTDC_DeInit(LTDC_HandleTypeDef *hltdc); +void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc); +void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc); +void HAL_LTDC_ErrorCallback(LTDC_HandleTypeDef *hltdc); +void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc); +void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc); +/** + * @} + */ + +/** @addtogroup LTDC_Exported_Functions_Group2 + * @{ + */ +/* IO operation functions *****************************************************/ +void HAL_LTDC_IRQHandler(LTDC_HandleTypeDef *hltdc); +/** + * @} + */ + +/** @addtogroup LTDC_Exported_Functions_Group3 + * @{ + */ +/* Peripheral Control functions ***********************************************/ +HAL_StatusTypeDef HAL_LTDC_ConfigLayer(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetWindowSize(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetWindowPosition(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetPixelFormat(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetAlpha(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetAddress(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetPitch(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_ConfigCLUT(LTDC_HandleTypeDef *hltdc, uint32_t *pCLUT, uint32_t CLUTSize, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_EnableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_DisableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_EnableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_DisableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_ProgramLineEvent(LTDC_HandleTypeDef *hltdc, uint32_t Line); +HAL_StatusTypeDef HAL_LTDC_EnableDither(LTDC_HandleTypeDef *hltdc); +HAL_StatusTypeDef HAL_LTDC_DisableDither(LTDC_HandleTypeDef *hltdc); +HAL_StatusTypeDef HAL_LTDC_Reload(LTDC_HandleTypeDef *hltdc, uint32_t ReloadType); +HAL_StatusTypeDef HAL_LTDC_ConfigLayer_NoReload(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetWindowSize_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetWindowPosition_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetPixelFormat_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetAlpha_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetAddress_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_SetPitch_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_EnableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_DisableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_EnableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); +HAL_StatusTypeDef HAL_LTDC_DisableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); + +/** + * @} + */ + +/** @addtogroup LTDC_Exported_Functions_Group4 + * @{ + */ +/* Peripheral State functions *************************************************/ +HAL_LTDC_StateTypeDef HAL_LTDC_GetState(LTDC_HandleTypeDef *hltdc); +uint32_t HAL_LTDC_GetError(LTDC_HandleTypeDef *hltdc); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup LTDC_Private_Macros LTDC Private Macros + * @{ + */ +#define LTDC_LAYER(__HANDLE__, __LAYER__) ((LTDC_Layer_TypeDef *)((uint32_t)(((uint32_t)((__HANDLE__)->Instance)) + 0x84 + (0x80*(__LAYER__))))) +#define IS_LTDC_LAYER(__LAYER__) ((__LAYER__) < MAX_LAYER) +#define IS_LTDC_HSPOL(__HSPOL__) (((__HSPOL__) == LTDC_HSPOLARITY_AL) || ((__HSPOL__) == LTDC_HSPOLARITY_AH)) +#define IS_LTDC_VSPOL(__VSPOL__) (((__VSPOL__) == LTDC_VSPOLARITY_AL) || ((__VSPOL__) == LTDC_VSPOLARITY_AH)) +#define IS_LTDC_DEPOL(__DEPOL__) (((__DEPOL__) == LTDC_DEPOLARITY_AL) || ((__DEPOL__) == LTDC_DEPOLARITY_AH)) +#define IS_LTDC_PCPOL(__PCPOL__) (((__PCPOL__) == LTDC_PCPOLARITY_IPC) || ((__PCPOL__) == LTDC_PCPOLARITY_IIPC)) +#define IS_LTDC_HSYNC(__HSYNC__) ((__HSYNC__) <= LTDC_HORIZONTALSYNC) +#define IS_LTDC_VSYNC(__VSYNC__) ((__VSYNC__) <= LTDC_VERTICALSYNC) +#define IS_LTDC_AHBP(__AHBP__) ((__AHBP__) <= LTDC_HORIZONTALSYNC) +#define IS_LTDC_AVBP(__AVBP__) ((__AVBP__) <= LTDC_VERTICALSYNC) +#define IS_LTDC_AAW(__AAW__) ((__AAW__) <= LTDC_HORIZONTALSYNC) +#define IS_LTDC_AAH(__AAH__) ((__AAH__) <= LTDC_VERTICALSYNC) +#define IS_LTDC_TOTALW(__TOTALW__) ((__TOTALW__) <= LTDC_HORIZONTALSYNC) +#define IS_LTDC_TOTALH(__TOTALH__) ((__TOTALH__) <= LTDC_VERTICALSYNC) +#define IS_LTDC_BLUEVALUE(__BBLUE__) ((__BBLUE__) <= LTDC_COLOR) +#define IS_LTDC_GREENVALUE(__BGREEN__) ((__BGREEN__) <= LTDC_COLOR) +#define IS_LTDC_REDVALUE(__BRED__) ((__BRED__) <= LTDC_COLOR) +#define IS_LTDC_BLENDING_FACTOR1(__BLENDING_FACTOR1__) (((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR1_CA) || \ + ((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR1_PAxCA)) +#define IS_LTDC_BLENDING_FACTOR2(__BLENDING_FACTOR1__) (((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR2_CA) || \ + ((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR2_PAxCA)) +#define IS_LTDC_PIXEL_FORMAT(__PIXEL_FORMAT__) (((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB8888) || ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_RGB888) || \ + ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_RGB565) || ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB1555) || \ + ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB4444) || ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_L8) || \ + ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_AL44) || ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_AL88)) +#define IS_LTDC_ALPHA(__ALPHA__) ((__ALPHA__) <= LTDC_ALPHA) +#define IS_LTDC_HCONFIGST(__HCONFIGST__) ((__HCONFIGST__) <= LTDC_STARTPOSITION) +#define IS_LTDC_HCONFIGSP(__HCONFIGSP__) ((__HCONFIGSP__) <= LTDC_STOPPOSITION) +#define IS_LTDC_VCONFIGST(__VCONFIGST__) ((__VCONFIGST__) <= LTDC_STARTPOSITION) +#define IS_LTDC_VCONFIGSP(__VCONFIGSP__) ((__VCONFIGSP__) <= LTDC_STOPPOSITION) +#define IS_LTDC_CFBP(__CFBP__) ((__CFBP__) <= LTDC_COLOR_FRAME_BUFFER) +#define IS_LTDC_CFBLL(__CFBLL__) ((__CFBLL__) <= LTDC_COLOR_FRAME_BUFFER) +#define IS_LTDC_CFBLNBR(__CFBLNBR__) ((__CFBLNBR__) <= LTDC_LINE_NUMBER) +#define IS_LTDC_LIPOS(__LIPOS__) ((__LIPOS__) <= 0x7FFU) +#define IS_LTDC_RELOAD(__RELOADTYPE__) (((__RELOADTYPE__) == LTDC_RELOAD_IMMEDIATE) || ((__RELOADTYPE__) == LTDC_RELOAD_VERTICAL_BLANKING)) +/** + * @} + */ + +/* Private functions ---------------------------------------------------------*/ +/** @defgroup LTDC_Private_Functions LTDC Private Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R7xx || STM32L4R9xx || STM32L4R7xx || STM32L4S9xx */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_LTDC_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.c new file mode 100644 index 0000000000..bc0eab10fe --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.c @@ -0,0 +1,167 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ltdc_ex.c + * @author MCD Application Team + * @brief LTDC Extension HAL module driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +#if defined (STM32L4R9xx) || defined (STM32L4S9xx) + +/** @defgroup LTDCEx LTDCEx + * @brief LTDC HAL module driver + * @{ + */ + +#if defined(HAL_LTDC_MODULE_ENABLED) && defined(HAL_DSI_MODULE_ENABLED) + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup LTDCEx_Exported_Functions LTDC Extended Exported Functions + * @{ + */ + +/** @defgroup LTDCEx_Exported_Functions_Group1 Initialization and Configuration functions + * @brief Initialization and Configuration functions + * +@verbatim + =============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Initialize and configure the LTDC + +@endverbatim + * @{ + */ + +/** + * @brief Retrieve common parameters from DSI Video mode configuration structure + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param VidCfg pointer to a DSI_VidCfgTypeDef structure that contains + * the DSI video mode configuration parameters + * @note The implementation of this function is taking into account the LTDC + * polarities inversion as described in the current LTDC specification + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDCEx_StructInitFromVideoConfig(LTDC_HandleTypeDef* hltdc, DSI_VidCfgTypeDef *VidCfg) +{ + /* Retrieve signal polarities from DSI */ + + /* The following polarities are inverted: + LTDC_DEPOLARITY_AL <-> LTDC_DEPOLARITY_AH + LTDC_VSPOLARITY_AL <-> LTDC_VSPOLARITY_AH + LTDC_HSPOLARITY_AL <-> LTDC_HSPOLARITY_AH)*/ + + /* Note 1 : Code in line w/ Current LTDC specification */ + hltdc->Init.DEPolarity = (VidCfg->DEPolarity == DSI_DATA_ENABLE_ACTIVE_HIGH) ? LTDC_DEPOLARITY_AL : LTDC_DEPOLARITY_AH; + hltdc->Init.VSPolarity = (VidCfg->VSPolarity == DSI_VSYNC_ACTIVE_HIGH) ? LTDC_VSPOLARITY_AL : LTDC_VSPOLARITY_AH; + hltdc->Init.HSPolarity = (VidCfg->HSPolarity == DSI_HSYNC_ACTIVE_HIGH) ? LTDC_HSPOLARITY_AL : LTDC_HSPOLARITY_AH; + + /* Note 2: Code to be used in case LTDC polarities inversion updated in the specification */ + /* hltdc->Init.DEPolarity = VidCfg->DEPolarity << 29; + hltdc->Init.VSPolarity = VidCfg->VSPolarity << 29; + hltdc->Init.HSPolarity = VidCfg->HSPolarity << 29; */ + + /* Retrieve vertical timing parameters from DSI */ + hltdc->Init.VerticalSync = VidCfg->VerticalSyncActive - 1; + hltdc->Init.AccumulatedVBP = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch - 1; + hltdc->Init.AccumulatedActiveH = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch + VidCfg->VerticalActive - 1; + hltdc->Init.TotalHeigh = VidCfg->VerticalSyncActive + VidCfg->VerticalBackPorch + VidCfg->VerticalActive + VidCfg->VerticalFrontPorch - 1; + + return HAL_OK; +} + +/** + * @brief Retrieve common parameters from DSI Adapted command mode configuration structure + * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains + * the configuration information for the LTDC. + * @param CmdCfg pointer to a DSI_CmdCfgTypeDef structure that contains + * the DSI command mode configuration parameters + * @note The implementation of this function is taking into account the LTDC + * polarities inversion as described in the current LTDC specification + * @retval HAL status + */ +HAL_StatusTypeDef HAL_LTDCEx_StructInitFromAdaptedCommandConfig(LTDC_HandleTypeDef* hltdc, DSI_CmdCfgTypeDef *CmdCfg) +{ + /* Retrieve signal polarities from DSI */ + + /* The following polarities are inverted: + LTDC_DEPOLARITY_AL <-> LTDC_DEPOLARITY_AH + LTDC_VSPOLARITY_AL <-> LTDC_VSPOLARITY_AH + LTDC_HSPOLARITY_AL <-> LTDC_HSPOLARITY_AH)*/ + + /* Note 1 : Code in line w/ Current LTDC specification */ + hltdc->Init.DEPolarity = (CmdCfg->DEPolarity == DSI_DATA_ENABLE_ACTIVE_HIGH) ? LTDC_DEPOLARITY_AL : LTDC_DEPOLARITY_AH; + hltdc->Init.VSPolarity = (CmdCfg->VSPolarity == DSI_VSYNC_ACTIVE_HIGH) ? LTDC_VSPOLARITY_AL : LTDC_VSPOLARITY_AH; + hltdc->Init.HSPolarity = (CmdCfg->HSPolarity == DSI_HSYNC_ACTIVE_HIGH) ? LTDC_HSPOLARITY_AL : LTDC_HSPOLARITY_AH; + + /* Note 2: Code to be used in case LTDC polarities inversion updated in the specification */ + /* hltdc->Init.DEPolarity = CmdCfg->DEPolarity << 29; + hltdc->Init.VSPolarity = CmdCfg->VSPolarity << 29; + hltdc->Init.HSPolarity = CmdCfg->HSPolarity << 29; */ + + return HAL_OK; +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_LTCD_MODULE_ENABLED && HAL_DSI_MODULE_ENABLED */ + +/** + * @} + */ + +#endif /* STM32L4R9xx || STM32L4S9xx */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.h new file mode 100644 index 0000000000..ff827cb2f9 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ltdc_ex.h @@ -0,0 +1,101 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ltdc_ex.h + * @author MCD Application Team + * @brief Header file of LTDC HAL Extension module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_LTDC_EX_H +#define __STM32L4xx_HAL_LTDC_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined (STM32L4R9xx) || defined (STM32L4S9xx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" +#include "stm32l4xx_hal_dsi.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup LTDCEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup LTDCEx_Exported_Functions + * @{ + */ + +/** @addtogroup LTDCEx_Exported_Functions_Group1 + * @{ + */ +HAL_StatusTypeDef HAL_LTDCEx_StructInitFromVideoConfig(LTDC_HandleTypeDef* hltdc, DSI_VidCfgTypeDef *VidCfg); +HAL_StatusTypeDef HAL_LTDCEx_StructInitFromAdaptedCommandConfig(LTDC_HandleTypeDef* hltdc, DSI_CmdCfgTypeDef *CmdCfg); +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R9xx || STM32L4S9xx */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_LTDC_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.c index bce42d5748..d66dda6cef 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_nand.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief NAND HAL module driver. * This file provides a generic firmware to drive NAND memories mounted * as external device. @@ -86,7 +84,8 @@ #include "stm32l4xx_hal.h" #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -1128,5 +1127,6 @@ static uint32_t NAND_AddressIncrement(NAND_HandleTypeDef *hnand, NAND_AddressTyp #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.h index f0395451e1..1292ae8727 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nand.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_nand.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of NAND HAL module. ****************************************************************************** * @attention @@ -44,7 +42,8 @@ #endif #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_fmc.h" @@ -297,6 +296,7 @@ uint32_t HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand); #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.c index 1ab593b170..585ffaa0ef 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_nor.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief NOR HAL module driver. * This file provides a generic firmware to drive NOR memories mounted * as external device. @@ -86,7 +84,8 @@ #include "stm32l4xx_hal.h" #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -1063,5 +1062,6 @@ HAL_NOR_StatusTypeDef HAL_NOR_GetStatus(NOR_HandleTypeDef *hnor, uint32_t Addres #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.h index 9749c3a068..d302ee479d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_nor.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_nor.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of NOR HAL module. ****************************************************************************** * @attention @@ -44,7 +42,8 @@ #endif #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_fmc.h" @@ -293,6 +292,7 @@ HAL_NOR_StatusTypeDef HAL_NOR_GetStatus(NOR_HandleTypeDef *hnor, uint32_t Addres #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.c index 330f51901a..3aa42edc21 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_opamp.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief OPAMP HAL module driver. * This file provides firmware functions to manage the following * functionalities of the operational amplifier(s) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.h index 0a664ccdd7..a9dca5c23e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_opamp.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of OPAMP HAL module. ****************************************************************************** * @attention @@ -300,29 +298,40 @@ typedef uint32_t HAL_OPAMP_TrimmingValueTypeDef; ((INPUT) == OPAMP_PGA_MODE) || \ ((INPUT) == OPAMP_FOLLOWER_MODE)) -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) - +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) #define IS_OPAMP_INVERTING_INPUT_STANDALONE(INPUT) (((INPUT) == OPAMP_INVERTINGINPUT_IO0) || \ ((INPUT) == OPAMP_INVERTINGINPUT_IO1)) -#endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ +#endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx */ + /* STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define IS_OPAMP_INVERTING_INPUT_STANDALONE(INPUT) ((INPUT) == OPAMP_INVERTINGINPUT_IO0) -#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx STM32L451xx STM32L452xx STM32L462xx */ +#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ + /* STM32L451xx STM32L452xx STM32L462xx */ #define IS_OPAMP_NONINVERTING_INPUT(INPUT) (((INPUT) == OPAMP_NONINVERTINGINPUT_IO0) || \ ((INPUT) == OPAMP_NONINVERTINGINPUT_DAC_CH)) -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) #define IS_OPAMP_INVERTING_INPUT_PGA(INPUT) (((INPUT) == OPAMP_INVERTINGINPUT_IO0) || \ - ((INPUT) == OPAMP_INVERTINGINPUT_IO1)|| \ + ((INPUT) == OPAMP_INVERTINGINPUT_IO1) || \ ((INPUT) == OPAMP_INVERTINGINPUT_CONNECT_NO)) -#endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx STM32L496xx STM32L4A6xx */ +#endif /* STM32L471xx STM32L475xx STM32L476xx STM32L485xx STM32L486xx */ + /* STM32L496xx STM32L4A6xx */ + /* STM32L4R5xx STM32L4R7xx STM32L4R9xx STM32L4S5xx STM32L4S7xx STM32L4S9xx */ -#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) +#if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ + defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define IS_OPAMP_INVERTING_INPUT_PGA(INPUT) (((INPUT) == OPAMP_INVERTINGINPUT_IO0) || \ ((INPUT) == OPAMP_INVERTINGINPUT_CONNECT_NO)) -#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx STM32L451xx STM32L452xx STM32L462xx */ +#endif /* STM32L431xx STM32L432xx STM32L433xx STM32L442xx STM32L443xx */ + /* STM32L451xx STM32L452xx STM32L462xx */ #define IS_OPAMP_PGA_GAIN(GAIN) (((GAIN) == OPAMP_PGA_GAIN_2) || \ ((GAIN) == OPAMP_PGA_GAIN_4) || \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.c index 1c5d0bff6e..8a0f250e93 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_opamp_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended OPAMP HAL module driver. * This file provides firmware functions to manage the following * functionalities of the operational amplifier(s)(OPAMP1, OPAMP2 etc) @@ -68,7 +66,8 @@ */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) /** @addtogroup OPAMPEx_Exported_Functions_Group1 * @brief Extended operation functions diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.h index 904fb4fa6f..ac507d8879 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_opamp_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_opamp_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of OPAMP HAL Extended module. ****************************************************************************** * @attention @@ -62,7 +60,9 @@ */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) + /* I/O operation functions *****************************************************/ /** @addtogroup OPAMPEx_Exported_Functions_Group1 Extended Input and Output operation functions diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.c new file mode 100644 index 0000000000..5c87b74618 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.c @@ -0,0 +1,2564 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ospi.c + * @author MCD Application Team + * @brief OSPI HAL module driver. + This file provides firmware functions to manage the following + functionalities of the OctoSPI interface (OSPI). + + Initialization and de-initialization functions + + Hyperbus configuration + + Indirect functional mode management + + Memory-mapped functional mode management + + Auto-polling functional mode management + + Interrupts and flags management + + DMA channel configuration for indirect functional mode + + Errors management and abort functionality + + IO manager configuration + + @verbatim + =============================================================================== + ##### How to use this driver ##### + =============================================================================== + [..] + *** Initialization *** + ====================== + [..] + (#) As prerequisite, fill in the HAL_OSPI_MspInit() : + (++) Enable OctoSPI and OctoSPIM clocks interface with __HAL_RCC_OSPIx_CLK_ENABLE(). + (++) Reset OctoSPI IP with __HAL_RCC_OSPIx_FORCE_RESET() and __HAL_RCC_OSPIx_RELEASE_RESET(). + (++) Enable the clocks for the OctoSPI GPIOS with __HAL_RCC_GPIOx_CLK_ENABLE(). + (++) Configure these OctoSPI pins in alternate mode using HAL_GPIO_Init(). + (++) If interrupt or DMA mode is used, enable and configure OctoSPI global + interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ(). + (++) If DMA mode is used, enable the clocks for the OctoSPI DMA channel + with __HAL_RCC_DMAx_CLK_ENABLE(), configure DMA with HAL_DMA_Init(), + link it with OctoSPI handle using __HAL_LINKDMA(), enable and configure + DMA channel global interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ(). + (#) Configure the fifo threshold, the dual-quad mode, the memory type, the + device size, the CS high time, the free running clock, the clock mode, + the wrap size, the clock prescaler, the sample shifting, the hold delay + and the CS boundary using the HAL_OSPI_Init() function. + (#) When using Hyperbus, configure the RW recovery time, the access time, + the write latency and the latency mode unsing the HAL_OSPI_HyperbusCfg() + function. + + *** Indirect functional mode *** + ================================ + [..] + (#) In regular mode, configure the command sequence using the HAL_OSPI_Command() + or HAL_OSPI_Command_IT() functions : + (++) Instruction phase : the mode used and if present the size, the instruction + opcode and the DTR mode. + (++) Address phase : the mode used and if present the size, the address + value and the DTR mode. + (++) Alternate-bytes phase : the mode used and if present the size, the + alternate bytes values and the DTR mode. + (++) Dummy-cycles phase : the number of dummy cycles (mode used is same as data phase). + (++) Data phase : the mode used and if present the number of bytes and the DTR mode. + (++) Data strobe (DQS) mode : the activation (or not) of this mode + (++) Sending Instruction Only Once (SIOO) mode : the activation (or not) of this mode. + (++) Flash identifier : in dual-quad mode, indicates which flash is concerned + (++) Operation type : always common configuration + (#) In Hyperbus mode, configure the command sequence using the HAL_OSPI_HyperbusCmd() + function : + (++) Address space : indicate if the access will be done in register or memory + (++) Address size + (++) Number of data + (++) Data strobe (DQS) mode : the activation (or not) of this mode + (#) If no data is required for the command (only for regular mode, not for + Hyperbus mode), it is sent directly to the memory : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_OSPI_CmdCpltCallback() will be called when the transfer is complete. + (#) For the indirect write mode, use HAL_OSPI_Transmit(), HAL_OSPI_Transmit_DMA() or + HAL_OSPI_Transmit_IT() after the command configuration : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_OSPI_FifoThresholdCallback() will be called when the fifo threshold + is reached and HAL_OSPI_TxCpltCallback() will be called when the transfer is complete. + (++) In DMA mode, HAL_OSPI_TxHalfCpltCallback() will be called at the half transfer and + HAL_OSPI_TxCpltCallback() will be called when the transfer is complete. + (#) For the indirect read mode, use HAL_OSPI_Receive(), HAL_OSPI_Receive_DMA() or + HAL_OSPI_Receive_IT() after the command configuration : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_OSPI_FifoThresholdCallback() will be called when the fifo threshold + is reached and HAL_OSPI_RxCpltCallback() will be called when the transfer is complete. + (++) In DMA mode, HAL_OSPI_RxHalfCpltCallback() will be called at the half transfer and + HAL_OSPI_RxCpltCallback() will be called when the transfer is complete. + + *** Auto-polling functional mode *** + ==================================== + [..] + (#) Configure the command sequence by the same way than the indirect mode + (#) Configure the auto-polling functional mode using the HAL_OSPI_AutoPolling() + or HAL_OSPI_AutoPolling_IT() functions : + (++) The size of the status bytes, the match value, the mask used, the match mode (OR/AND), + the polling interval and the automatic stop activation. + (#) After the configuration : + (++) In polling mode, the output of the function is done when the status match is reached. The + automatic stop is activated to avoid an infinite loop. + (++) In interrupt mode, HAL_OSPI_StatusMatchCallback() will be called each time the status match is reached. + + *** Memory-mapped functional mode *** + ===================================== + [..] + (#) Configure the command sequence by the same way than the indirect mode except + for the operation type in regular mode : + (++) Operation type equals to read configuration : the command configuration + applies to read access in memory-mapped mode + (++) Operation type equals to write configuration : the command configuration + applies to write access in memory-mapped mode + (++) Both read and write configuration should be performed before activating + memory-mapped mode + (#) Configure the memory-mapped functional mode using the HAL_OSPI_MemoryMapped() + functions : + (++) The timeout activation and the timeout period. + (#) After the configuration, the OctoSPI will be used as soon as an access on the AHB is done on + the address range. HAL_OSPI_TimeOutCallback() will be called when the timeout expires. + + *** Errors management and abort functionality *** + ================================================= + [..] + (#) HAL_OSPI_GetError() function gives the error raised during the last operation. + (#) HAL_OSPI_Abort() and HAL_OSPI_AbortIT() functions aborts any on-going operation and + flushes the fifo : + (++) In polling mode, the output of the function is done when the transfer + complete bit is set and the busy bit cleared. + (++) In interrupt mode, HAL_OSPI_AbortCpltCallback() will be called when + the transfer complete bit is set. + + *** Control functions *** + ========================= + [..] + (#) HAL_OSPI_GetState() function gives the current state of the HAL OctoSPI driver. + (#) HAL_OSPI_SetTimeout() function configures the timeout value used in the driver. + (#) HAL_OSPI_SetFifoThreshold() function configures the threshold on the Fifo of the OSPI IP. + (#) HAL_OSPI_GetFifoThreshold() function gives the current of the Fifo's threshold + + *** IO manager configuration functions *** + ========================================== + [..] + (#) HAL_OSPIM_Config() function configures the IO manager for the OctoSPI instance. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +#if defined(OCTOSPI) || defined(OCTOSPI1) || defined(OCTOSPI2) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup OSPI OSPI + * @brief OSPI HAL module driver + * @{ + */ + +#ifdef HAL_OSPI_MODULE_ENABLED + +/** + @cond 0 + */ +/* Private typedef -----------------------------------------------------------*/ + +/* Private define ------------------------------------------------------------*/ +#define OSPI_FUNCTIONAL_MODE_INDIRECT_WRITE ((uint32_t)0x00000000) /*!< Indirect write mode */ +#define OSPI_FUNCTIONAL_MODE_INDIRECT_READ ((uint32_t)OCTOSPI_CR_FMODE_0) /*!< Indirect read mode */ +#define OSPI_FUNCTIONAL_MODE_AUTO_POLLING ((uint32_t)OCTOSPI_CR_FMODE_1) /*!< Automatic polling mode */ +#define OSPI_FUNCTIONAL_MODE_MEMORY_MAPPED ((uint32_t)OCTOSPI_CR_FMODE) /*!< Memory-mapped mode */ + +#define OSPI_CFG_STATE_MASK 0x00000004U +#define OSPI_BUSY_STATE_MASK 0x00000008U + +#define OSPI_NB_INSTANCE 2 +#define OSPI_IOM_NB_PORTS 2 + +/* Private macro -------------------------------------------------------------*/ +#define IS_OSPI_FUNCTIONAL_MODE(MODE) (((MODE) == OSPI_FUNCTIONAL_MODE_INDIRECT_WRITE) || \ + ((MODE) == OSPI_FUNCTIONAL_MODE_INDIRECT_READ) || \ + ((MODE) == OSPI_FUNCTIONAL_MODE_AUTO_POLLING) || \ + ((MODE) == OSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)) + +/* Private variables ---------------------------------------------------------*/ + +/* Private function prototypes -----------------------------------------------*/ +static void OSPI_DMACplt (DMA_HandleTypeDef *hdma); +static void OSPI_DMAHalfCplt (DMA_HandleTypeDef *hdma); +static void OSPI_DMAError (DMA_HandleTypeDef *hdma); +static void OSPI_DMAAbortCplt (DMA_HandleTypeDef *hdma); +static HAL_StatusTypeDef OSPI_WaitFlagStateUntilTimeout(OSPI_HandleTypeDef *hospi, uint32_t Flag, FlagStatus State, uint32_t Tickstart, uint32_t Timeout); +static HAL_StatusTypeDef OSPI_ConfigCmd (OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd); +static HAL_StatusTypeDef OSPIM_GetConfig (uint8_t instance_nb, OSPIM_CfgTypeDef *cfg); +/** + @endcond + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup OSPI_Exported_Functions OSPI Exported Functions + * @{ + */ + +/** @defgroup OSPI_Exported_Functions_Group1 Initialization/de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim +=============================================================================== + ##### Initialization and Configuration functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Initialize the OctoSPI. + (+) De-initialize the OctoSPI. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the OSPI mode according to the specified parameters + * in the OSPI_InitTypeDef and initialize the associated handle. + * @param hospi : OSPI handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Init (OSPI_HandleTypeDef *hospi) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the OSPI handle allocation */ + if (hospi == NULL) + { + status = HAL_ERROR; + /* No error code can be set set as the handler is null */ + } + else + { + /* Check the parameters of the initialization structure */ + assert_param(IS_OSPI_FIFO_THRESHOLD (hospi->Init.FifoThreshold)); + assert_param(IS_OSPI_DUALQUAD_MODE (hospi->Init.DualQuad)); + assert_param(IS_OSPI_MEMORY_TYPE (hospi->Init.MemoryType)); + assert_param(IS_OSPI_DEVICE_SIZE (hospi->Init.DeviceSize)); + assert_param(IS_OSPI_CS_HIGH_TIME (hospi->Init.ChipSelectHighTime)); + assert_param(IS_OSPI_FREE_RUN_CLK (hospi->Init.FreeRunningClock)); + assert_param(IS_OSPI_CLOCK_MODE (hospi->Init.ClockMode)); + assert_param(IS_OSPI_WRAP_SIZE (hospi->Init.WrapSize)); + assert_param(IS_OSPI_CLK_PRESCALER (hospi->Init.ClockPrescaler)); + assert_param(IS_OSPI_SAMPLE_SHIFTING(hospi->Init.SampleShifting)); + assert_param(IS_OSPI_DHQC (hospi->Init.DelayHoldQuarterCycle)); + assert_param(IS_OSPI_CS_BOUNDARY (hospi->Init.ChipSelectBoundary)); + + /* Initialize error code */ + hospi->ErrorCode = HAL_OSPI_ERROR_NONE; + + /* Check if the state is the reset state */ + if (hospi->State == HAL_OSPI_STATE_RESET) + { + /* Initialization of the low level hardware */ + HAL_OSPI_MspInit(hospi); + + /* Configure the default timeout for the OSPI memory access */ + status = HAL_OSPI_SetTimeout(hospi, HAL_OSPI_TIMEOUT_DEFAULT_VALUE); + } + + if (status == HAL_OK) + { + /* Configure memory type, device size, chip select high time, free running clock, clock mode */ + MODIFY_REG(hospi->Instance->DCR1, (OCTOSPI_DCR1_MTYP | OCTOSPI_DCR1_DEVSIZE | OCTOSPI_DCR1_CSHT | OCTOSPI_DCR1_FRCK | OCTOSPI_DCR1_CKMODE), + (hospi->Init.MemoryType | ((hospi->Init.DeviceSize - 1) << OCTOSPI_DCR1_DEVSIZE_Pos) | + ((hospi->Init.ChipSelectHighTime - 1) << OCTOSPI_DCR1_CSHT_Pos) | hospi->Init.FreeRunningClock | + hospi->Init.ClockMode)); + + /* Configure wrap size */ + MODIFY_REG(hospi->Instance->DCR2, OCTOSPI_DCR2_WRAPSIZE, hospi->Init.WrapSize); + + /* Configure chip select boundary */ + hospi->Instance->DCR3 = (hospi->Init.ChipSelectBoundary << OCTOSPI_DCR3_CSBOUND_Pos); + + + /* Configure FIFO threshold */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FTHRES, ((hospi->Init.FifoThreshold - 1) << OCTOSPI_CR_FTHRES_Pos)); + + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Configure clock prescaler */ + MODIFY_REG(hospi->Instance->DCR2, OCTOSPI_DCR2_PRESCALER, ((hospi->Init.ClockPrescaler - 1) << OCTOSPI_DCR2_PRESCALER_Pos)); + + /* Configure Dual Quad mode */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_DQM, hospi->Init.DualQuad); + + /* Configure sample shifting and delay hold quarter cycle */ + MODIFY_REG(hospi->Instance->TCR, (OCTOSPI_TCR_SSHIFT | OCTOSPI_TCR_DHQC), (hospi->Init.SampleShifting | hospi->Init.DelayHoldQuarterCycle)); + + /* Enable OctoSPI */ + __HAL_OSPI_ENABLE(hospi); + + /* Initialize the OSPI state */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + hospi->State = HAL_OSPI_STATE_HYPERBUS_INIT; + } + else + { + hospi->State = HAL_OSPI_STATE_READY; + } + } + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Initialize the OSPI MSP. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_MspInit(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_MspInit can be implemented in the user file + */ +} + +/** + * @brief De-Initialize the OSPI peripheral. + * @param hospi : OSPI handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_DeInit(OSPI_HandleTypeDef *hospi) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the OSPI handle allocation */ + if (hospi == NULL) + { + status = HAL_ERROR; + /* No error code can be set set as the handler is null */ + } + else + { + /* Disable OctoSPI */ + __HAL_OSPI_DISABLE(hospi); + + /* De-initialize the low-level hardware */ + HAL_OSPI_MspDeInit(hospi); + + /* Reset the driver state */ + hospi->State = HAL_OSPI_STATE_RESET; + } + + return status; +} + +/** + * @brief DeInitialize the OSPI MSP. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_MspDeInit(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_MspDeInit can be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup OSPI_Exported_Functions_Group2 Input and Output operation functions + * @brief OSPI Transmit/Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Handle the interrupts. + (+) Handle the command sequence (regular and Hyperbus). + (+) Handle the Hyperbus configuration. + (+) Transmit data in blocking, interrupt or DMA mode. + (+) Receive data in blocking, interrupt or DMA mode. + (+) Manage the auto-polling functional mode. + (+) Manage the memory-mapped functional mode. + +@endverbatim + * @{ + */ + +/** + * @brief Handle OSPI interrupt request. + * @param hospi : OSPI handle + * @retval None + */ +void HAL_OSPI_IRQHandler(OSPI_HandleTypeDef *hospi) +{ + __IO uint32_t *data_reg = &hospi->Instance->DR; + uint32_t flag = hospi->Instance->SR; + uint32_t itsource = hospi->Instance->CR; + uint32_t currentstate = hospi->State; + + /* OctoSPI fifo threshold interrupt occurred -------------------------------*/ + if (((flag & HAL_OSPI_FLAG_FT) != 0) && ((itsource & HAL_OSPI_IT_FT) != 0)) + { + if (currentstate == HAL_OSPI_STATE_BUSY_TX) + { + /* Write a data in the fifo */ + *(__IO uint8_t *)((__IO void *)data_reg) = *hospi->pBuffPtr++; + hospi->XferCount--; + } + else if (currentstate == HAL_OSPI_STATE_BUSY_RX) + { + /* Read a data from the fifo */ + *hospi->pBuffPtr++ = *(__IO uint8_t *)((__IO void *)data_reg); + hospi->XferCount--; + } + + if (hospi->XferCount == 0) + { + /* All data have been received or transmitted for the transfer */ + /* Disable fifo threshold interrupt */ + __HAL_OSPI_DISABLE_IT(hospi, HAL_OSPI_IT_FT); + } + + /* Fifo threshold callback */ + HAL_OSPI_FifoThresholdCallback(hospi); + } + /* OctoSPI transfer complete interrupt occurred ----------------------------*/ + else if (((flag & HAL_OSPI_FLAG_TC) != 0) && ((itsource & HAL_OSPI_IT_TC) != 0)) + { + if (currentstate == HAL_OSPI_STATE_BUSY_RX) + { + if (((flag & OCTOSPI_SR_FLEVEL) != 0) && (hospi->XferCount > 0)) + { + /* Read the last data received in the fifo */ + *hospi->pBuffPtr++ = *(__IO uint8_t *)((__IO void*)data_reg); + hospi->XferCount--; + } + else if(hospi->XferCount == 0) + { + /* Clear flag */ + hospi->Instance->FCR = HAL_OSPI_FLAG_TC; + + /* Disable the interrupts */ + __HAL_OSPI_DISABLE_IT(hospi, HAL_OSPI_IT_TC | HAL_OSPI_IT_FT | HAL_OSPI_IT_TE); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + + /* RX complete callback */ + HAL_OSPI_RxCpltCallback(hospi); + } + } + else + { + /* Clear flag */ + hospi->Instance->FCR = HAL_OSPI_FLAG_TC; + + /* Disable the interrupts */ + __HAL_OSPI_DISABLE_IT(hospi, HAL_OSPI_IT_TC | HAL_OSPI_IT_FT | HAL_OSPI_IT_TE); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + + if (currentstate == HAL_OSPI_STATE_BUSY_TX) + { + /* TX complete callback */ + HAL_OSPI_TxCpltCallback(hospi); + } + else if (currentstate == HAL_OSPI_STATE_BUSY_CMD) + { + /* Command complete callback */ + HAL_OSPI_CmdCpltCallback(hospi); + } + else if (currentstate == HAL_OSPI_STATE_ABORT) + { + if (hospi->ErrorCode == HAL_OSPI_ERROR_NONE) + { + /* Abort called by the user */ + /* Abort complete callback */ + HAL_OSPI_AbortCpltCallback(hospi); + } + else + { + /* Abort due to an error (eg : DMA error) */ + /* Error callback */ + HAL_OSPI_ErrorCallback(hospi); + } + } + } + } + /* OctoSPI status match interrupt occurred ---------------------------------*/ + else if (((flag & HAL_OSPI_FLAG_SM) != 0) && ((itsource & HAL_OSPI_IT_SM) != 0)) + { + /* Clear flag */ + hospi->Instance->FCR = HAL_OSPI_FLAG_SM; + + /* Check if automatic poll mode stop is activated */ + if ((hospi->Instance->CR & OCTOSPI_CR_APMS) != 0) + { + /* Disable the interrupts */ + __HAL_OSPI_DISABLE_IT(hospi, HAL_OSPI_IT_SM | HAL_OSPI_IT_TE); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + } + + /* Status match callback */ + HAL_OSPI_StatusMatchCallback(hospi); + } + /* OctoSPI transfer error interrupt occurred -------------------------------*/ + else if (((flag & HAL_OSPI_FLAG_TE) != 0) && ((itsource & HAL_OSPI_IT_TE) != 0)) + { + /* Clear flag */ + hospi->Instance->FCR = HAL_OSPI_FLAG_TE; + + /* Disable all interrupts */ + __HAL_OSPI_DISABLE_IT(hospi, (HAL_OSPI_IT_TO | HAL_OSPI_IT_SM | HAL_OSPI_IT_FT | HAL_OSPI_IT_TC | HAL_OSPI_IT_TE)); + + /* Set error code */ + hospi->ErrorCode = HAL_OSPI_ERROR_TRANSFER; + + /* Check if the DMA is enabled */ + if ((hospi->Instance->CR & OCTOSPI_CR_DMAEN) != 0) + { + /* Disable the DMA transfer on the OctoSPI side */ + CLEAR_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + + /* Disable the DMA transfer on the DMA side */ + hospi->hdma->XferAbortCallback = OSPI_DMAAbortCplt; + HAL_DMA_Abort_IT(hospi->hdma); + } + else + { + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + + /* Error callback */ + HAL_OSPI_ErrorCallback(hospi); + } + } + /* OctoSPI timeout interrupt occurred --------------------------------------*/ + else if (((flag & HAL_OSPI_FLAG_TO) != 0) && ((itsource & HAL_OSPI_IT_TO) != 0)) + { + /* Clear flag */ + hospi->Instance->FCR = HAL_OSPI_FLAG_TO; + + /* Timeout callback */ + HAL_OSPI_TimeOutCallback(hospi); + } +} + +/** + * @brief Set the command configuration. + * @param hospi : OSPI handle + * @param cmd : structure that contains the command configuration information + * @param Timeout : Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Command(OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters of the command structure */ + assert_param(IS_OSPI_OPERATION_TYPE(cmd->OperationType)); + + if (hospi->Init.DualQuad == HAL_OSPI_DUALQUAD_DISABLE) + { + assert_param(IS_OSPI_FLASH_ID(cmd->FlashId)); + } + + assert_param(IS_OSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != HAL_OSPI_INSTRUCTION_NONE) + { + assert_param(IS_OSPI_INSTRUCTION_SIZE (cmd->InstructionSize)); + assert_param(IS_OSPI_INSTRUCTION_DTR_MODE(cmd->InstructionDtrMode)); + } + + assert_param(IS_OSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != HAL_OSPI_ADDRESS_NONE) + { + assert_param(IS_OSPI_ADDRESS_SIZE (cmd->AddressSize)); + assert_param(IS_OSPI_ADDRESS_DTR_MODE(cmd->AddressDtrMode)); + } + + assert_param(IS_OSPI_ALT_BYTES_MODE(cmd->AlternateBytesMode)); + if (cmd->AlternateBytesMode != HAL_OSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_OSPI_ALT_BYTES_SIZE (cmd->AlternateBytesSize)); + assert_param(IS_OSPI_ALT_BYTES_DTR_MODE(cmd->AlternateBytesDtrMode)); + } + + assert_param(IS_OSPI_DATA_MODE(cmd->DataMode)); + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + if (cmd->OperationType == HAL_OSPI_OPTYPE_COMMON_CFG) + { + assert_param(IS_OSPI_NUMBER_DATA (cmd->NbData)); + } + assert_param(IS_OSPI_DATA_DTR_MODE(cmd->DataDtrMode)); + assert_param(IS_OSPI_DUMMY_CYCLES (cmd->DummyCycles)); + } + + assert_param(IS_OSPI_DQS_MODE (cmd->DQSMode)); + assert_param(IS_OSPI_SIOO_MODE(cmd->SIOOMode)); + + /* Check the state of the driver */ + if (((hospi->State == HAL_OSPI_STATE_READY) && (hospi->Init.MemoryType != HAL_OSPI_MEMTYPE_HYPERBUS)) || + ((hospi->State == HAL_OSPI_STATE_READ_CMD_CFG) && (cmd->OperationType == HAL_OSPI_OPTYPE_WRITE_CFG)) || + ((hospi->State == HAL_OSPI_STATE_WRITE_CMD_CFG) && (cmd->OperationType == HAL_OSPI_OPTYPE_READ_CFG))) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Initialize error code */ + hospi->ErrorCode = HAL_OSPI_ERROR_NONE; + + /* Configure the registers */ + status = OSPI_ConfigCmd(hospi, cmd); + + if (status == HAL_OK) + { + if (cmd->DataMode == HAL_OSPI_DATA_NONE) + { + /* When there is no data phase, the transfer start as soon as the configuration is done + so wait until TC flag is set to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_TC, SET, tickstart, Timeout); + + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + } + else + { + /* Update the state */ + if (cmd->OperationType == HAL_OSPI_OPTYPE_COMMON_CFG) + { + hospi->State = HAL_OSPI_STATE_CMD_CFG; + } + else if (cmd->OperationType == HAL_OSPI_OPTYPE_READ_CFG) + { + if (hospi->State == HAL_OSPI_STATE_WRITE_CMD_CFG) + { + hospi->State = HAL_OSPI_STATE_CMD_CFG; + } + else + { + hospi->State = HAL_OSPI_STATE_READ_CMD_CFG; + } + } + else + { + if (hospi->State == HAL_OSPI_STATE_READ_CMD_CFG) + { + hospi->State = HAL_OSPI_STATE_CMD_CFG; + } + else + { + hospi->State = HAL_OSPI_STATE_WRITE_CMD_CFG; + } + } + } + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Set the command configuration in interrupt mode. + * @param hospi : OSPI handle + * @param cmd : structure that contains the command configuration information + * @note This function is used only in Indirect Read or Write Modes + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Command_IT(OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters of the command structure */ + assert_param(IS_OSPI_OPERATION_TYPE(cmd->OperationType)); + + if (hospi->Init.DualQuad == HAL_OSPI_DUALQUAD_DISABLE) + { + assert_param(IS_OSPI_FLASH_ID(cmd->FlashId)); + } + + assert_param(IS_OSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != HAL_OSPI_INSTRUCTION_NONE) + { + assert_param(IS_OSPI_INSTRUCTION_SIZE (cmd->InstructionSize)); + assert_param(IS_OSPI_INSTRUCTION_DTR_MODE(cmd->InstructionDtrMode)); + } + + assert_param(IS_OSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != HAL_OSPI_ADDRESS_NONE) + { + assert_param(IS_OSPI_ADDRESS_SIZE (cmd->AddressSize)); + assert_param(IS_OSPI_ADDRESS_DTR_MODE(cmd->AddressDtrMode)); + } + + assert_param(IS_OSPI_ALT_BYTES_MODE(cmd->AlternateBytesMode)); + if (cmd->AlternateBytesMode != HAL_OSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_OSPI_ALT_BYTES_SIZE (cmd->AlternateBytesSize)); + assert_param(IS_OSPI_ALT_BYTES_DTR_MODE(cmd->AlternateBytesDtrMode)); + } + + assert_param(IS_OSPI_DATA_MODE(cmd->DataMode)); + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + assert_param(IS_OSPI_NUMBER_DATA (cmd->NbData)); + assert_param(IS_OSPI_DATA_DTR_MODE(cmd->DataDtrMode)); + assert_param(IS_OSPI_DUMMY_CYCLES (cmd->DummyCycles)); + } + + assert_param(IS_OSPI_DQS_MODE (cmd->DQSMode)); + assert_param(IS_OSPI_SIOO_MODE(cmd->SIOOMode)); + + /* Check the state of the driver */ + if ((hospi->State == HAL_OSPI_STATE_READY) && (cmd->OperationType == HAL_OSPI_OPTYPE_COMMON_CFG) && + (cmd->DataMode == HAL_OSPI_DATA_NONE) && (hospi->Init.MemoryType != HAL_OSPI_MEMTYPE_HYPERBUS)) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Initialize error code */ + hospi->ErrorCode = HAL_OSPI_ERROR_NONE; + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_TC); + + /* Configure the registers */ + status = OSPI_ConfigCmd(hospi, cmd); + + if (status == HAL_OK) + { + /* Update the state */ + hospi->State = HAL_OSPI_STATE_BUSY_CMD; + + /* Enable the transfer complete and transfer error interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC | HAL_OSPI_IT_TE); + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the Hyperbus parameters. + * @param hospi : OSPI handle + * @param cfg : Structure containing the Hyperbus configuration + * @param Timeout : Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_HyperbusCfg(OSPI_HandleTypeDef *hospi, OSPI_HyperbusCfgTypeDef *cfg, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters of the hyperbus configuration structure */ + assert_param(IS_OSPI_RW_RECOVERY_TIME (cfg->RWRecoveryTime)); + assert_param(IS_OSPI_ACCESS_TIME (cfg->AccessTime)); + assert_param(IS_OSPI_WRITE_ZERO_LATENCY(cfg->WriteZeroLatency)); + assert_param(IS_OSPI_LATENCY_MODE (cfg->LatencyMode)); + + /* Check the state of the driver */ + if ((hospi->State == HAL_OSPI_STATE_HYPERBUS_INIT) || (hospi->State == HAL_OSPI_STATE_READY)) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Configure Hyperbus configuration Latency register */ + WRITE_REG(hospi->Instance->HLCR, ((cfg->RWRecoveryTime << OCTOSPI_HLCR_TRWR_Pos) | + (cfg->AccessTime << OCTOSPI_HLCR_TACC_Pos) | + cfg->WriteZeroLatency | cfg->LatencyMode)); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_READY; + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Set the Hyperbus command configuration. + * @param hospi : OSPI handle + * @param cmd : Structure containing the Hyperbus command + * @param Timeout : Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_HyperbusCmd(OSPI_HandleTypeDef *hospi, OSPI_HyperbusCmdTypeDef *cmd, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters of the hyperbus command structure */ + assert_param(IS_OSPI_ADDRESS_SPACE(cmd->AddressSpace)); + assert_param(IS_OSPI_ADDRESS_SIZE (cmd->AddressSize)); + assert_param(IS_OSPI_NUMBER_DATA (cmd->NbData)); + assert_param(IS_OSPI_DQS_MODE (cmd->DQSMode)); + + /* Check the state of the driver */ + if ((hospi->State == HAL_OSPI_STATE_READY) && (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS)) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Re-initialize the value of the functional mode */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, 0); + + /* Configure the address space in the DCR1 register */ + MODIFY_REG(hospi->Instance->DCR1, OCTOSPI_DCR1_MTYP_0, cmd->AddressSpace); + + /* Configure the CCR and WCCR registers with the address size and the following configuration : + - DQS signal enabled (used as RWDS) + - DTR mode enabled on address and data + - address and data on 8 lines */ + WRITE_REG(hospi->Instance->CCR, (cmd->DQSMode | OCTOSPI_CCR_DDTR | OCTOSPI_CCR_DMODE_2 | + cmd->AddressSize | OCTOSPI_CCR_ADDTR | OCTOSPI_CCR_ADMODE_2)); + WRITE_REG(hospi->Instance->WCCR, (cmd->DQSMode | OCTOSPI_WCCR_DDTR | OCTOSPI_WCCR_DMODE_2 | + cmd->AddressSize | OCTOSPI_WCCR_ADDTR | OCTOSPI_WCCR_ADMODE_2)); + + /* Configure the DLR register with the number of data */ + WRITE_REG(hospi->Instance->DLR, (cmd->NbData - 1)); + + /* Configure the AR register with the address value */ + WRITE_REG(hospi->Instance->AR, cmd->Address); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_CMD_CFG; + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Transmit an amount of data in blocking mode. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer + * @param Timeout : Timeout duration + * @note This function is used only in Indirect Write Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Transmit(OSPI_HandleTypeDef *hospi, uint8_t *pData, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + __IO uint32_t *data_reg = &hospi->Instance->DR; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + hospi->XferCount = READ_REG(hospi->Instance->DLR) + 1; + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect write */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + do + { + /* Wait till fifo threshold flag is set to send data */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_FT, SET, tickstart, Timeout); + + if (status != HAL_OK) + { + break; + } + + *(__IO uint8_t *)((__IO void *)data_reg) = *hospi->pBuffPtr++; + hospi->XferCount--; + } while (hospi->XferCount > 0); + + if (status == HAL_OK) + { + /* Wait till transfer complete flag is set to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_TC, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Clear transfer complete flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Receive an amount of data in blocking mode. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer + * @param Timeout : Timeout duration + * @note This function is used only in Indirect Read Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Receive(OSPI_HandleTypeDef *hospi, uint8_t *pData, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + __IO uint32_t *data_reg = &hospi->Instance->DR; + uint32_t addr_reg = hospi->Instance->AR; + uint32_t ir_reg = hospi->Instance->IR; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + hospi->XferCount = READ_REG(hospi->Instance->DLR) + 1; + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect read */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Trig the transfer by re-writing address or instruction register */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + if (READ_BIT(hospi->Instance->CCR, OCTOSPI_CCR_ADMODE) != HAL_OSPI_ADDRESS_NONE) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + WRITE_REG(hospi->Instance->IR, ir_reg); + } + } + + do + { + /* Wait till fifo threshold or transfer complete flags are set to read received data */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, (HAL_OSPI_FLAG_FT | HAL_OSPI_FLAG_TC), SET, tickstart, Timeout); + + if (status != HAL_OK) + { + break; + } + + *hospi->pBuffPtr++ = *(__IO uint8_t *)((__IO void *)data_reg); + hospi->XferCount--; + } while(hospi->XferCount > 0); + + if (status == HAL_OK) + { + /* Wait till transfer complete flag is set to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_TC, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Clear transfer complete flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Send an amount of data in non-blocking mode with interrupt. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer + * @note This function is used only in Indirect Write Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Transmit_IT(OSPI_HandleTypeDef *hospi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + hospi->XferCount = READ_REG(hospi->Instance->DLR) + 1; + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect write */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_TC); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_BUSY_TX; + + /* Enable the transfer complete, fifo threshold and transfer error interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC | HAL_OSPI_IT_FT | HAL_OSPI_IT_TE); + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Receive an amount of data in non-blocking mode with interrupt. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer + * @note This function is used only in Indirect Read Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Receive_IT(OSPI_HandleTypeDef *hospi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t addr_reg = hospi->Instance->AR; + uint32_t ir_reg = hospi->Instance->IR; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + hospi->XferCount = READ_REG(hospi->Instance->DLR) + 1; + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect read */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_TC); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_BUSY_RX; + + /* Enable the transfer complete, fifo threshold and transfer error interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC | HAL_OSPI_IT_FT | HAL_OSPI_IT_TE); + + /* Trig the transfer by re-writing address or instruction register */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + if (READ_BIT(hospi->Instance->CCR, OCTOSPI_CCR_ADMODE) != HAL_OSPI_ADDRESS_NONE) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + WRITE_REG(hospi->Instance->IR, ir_reg); + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Send an amount of data in non-blocking mode with DMA. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer + * @note This function is used only in Indirect Write Mode + * @note If DMA peripheral access is configured as halfword, the number + * of data and the fifo threshold should be aligned on halfword + * @note If DMA peripheral access is configured as word, the number + * of data and the fifo threshold should be aligned on word + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Transmit_DMA(OSPI_HandleTypeDef *hospi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t *tmp; + uint32_t data_size = hospi->Instance->DLR + 1; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE) + { + hospi->XferCount = data_size; + } + else if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD) + { + if (((data_size % 2) != 0) || ((hospi->Init.FifoThreshold % 2) != 0)) + { + /* The number of data or the fifo threshold is not aligned on halfword + => no transfer possible with DMA peripheral access configured as halfword */ + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + else + { + hospi->XferCount = (data_size >> 1); + } + } + else if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD) + { + if (((data_size % 4) != 0) || ((hospi->Init.FifoThreshold % 4) != 0)) + { + /* The number of data or the fifo threshold is not aligned on word + => no transfer possible with DMA peripheral access configured as word */ + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + else + { + hospi->XferCount = (data_size >> 2); + } + } + + if (status == HAL_OK) + { + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect write */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_TC); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_BUSY_TX; + + /* Set the DMA transfer complete callback */ + hospi->hdma->XferCpltCallback = OSPI_DMACplt; + + /* Set the DMA Half transfer complete callback */ + hospi->hdma->XferHalfCpltCallback = OSPI_DMAHalfCplt; + + /* Set the DMA error callback */ + hospi->hdma->XferErrorCallback = OSPI_DMAError; + + /* Clear the DMA abort callback */ + hospi->hdma->XferAbortCallback = NULL; + + /* Configure the direction of the DMA */ + hospi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH; + MODIFY_REG(hospi->hdma->Instance->CCR, DMA_CCR_DIR, hospi->hdma->Init.Direction); + + /* Enable the transmit DMA Channel */ + tmp = (uint32_t*)((void*)&pData); + HAL_DMA_Start_IT(hospi->hdma, *(uint32_t*)tmp, (uint32_t)&hospi->Instance->DR, hospi->XferSize); + + /* Enable the transfer error interrupt */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TE); + + /* Enable the DMA transfer by setting the DMAEN bit */ + SET_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Receive an amount of data in non-blocking mode with DMA. + * @param hospi : OSPI handle + * @param pData : pointer to data buffer. + * @note This function is used only in Indirect Read Mode + * @note If DMA peripheral access is configured as halfword, the number + * of data and the fifo threshold should be aligned on halfword + * @note If DMA peripheral access is configured as word, the number + * of data and the fifo threshold should be aligned on word + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_Receive_DMA(OSPI_HandleTypeDef *hospi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t *tmp; + uint32_t data_size = hospi->Instance->DLR + 1; + uint32_t addr_reg = hospi->Instance->AR; + uint32_t ir_reg = hospi->Instance->IR; + + /* Check the data pointer allocation */ + if (pData == NULL) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + else + { + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Configure counters and size */ + if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE) + { + hospi->XferCount = data_size; + } + else if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD) + { + if (((data_size % 2) != 0) || ((hospi->Init.FifoThreshold % 2) != 0)) + { + /* The number of data or the fifo threshold is not aligned on halfword + => no transfer possible with DMA peripheral access configured as halfword */ + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + else + { + hospi->XferCount = (data_size >> 1); + } + } + else if (hospi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD) + { + if (((data_size % 4) != 0) || ((hospi->Init.FifoThreshold % 4) != 0)) + { + /* The number of data or the fifo threshold is not aligned on word + => no transfer possible with DMA peripheral access configured as word */ + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + else + { + hospi->XferCount = (data_size >> 2); + } + } + + if (status == HAL_OK) + { + hospi->XferSize = hospi->XferCount; + hospi->pBuffPtr = pData; + + /* Configure CR register with functional mode as indirect read */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, OSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_TC); + + /* Update the state */ + hospi->State = HAL_OSPI_STATE_BUSY_RX; + + /* Set the DMA transfer complete callback */ + hospi->hdma->XferCpltCallback = OSPI_DMACplt; + + /* Set the DMA Half transfer complete callback */ + hospi->hdma->XferHalfCpltCallback = OSPI_DMAHalfCplt; + + /* Set the DMA error callback */ + hospi->hdma->XferErrorCallback = OSPI_DMAError; + + /* Clear the DMA abort callback */ + hospi->hdma->XferAbortCallback = NULL; + + /* Configure the direction of the DMA */ + hospi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY; + MODIFY_REG(hospi->hdma->Instance->CCR, DMA_CCR_DIR, hospi->hdma->Init.Direction); + + /* Enable the transmit DMA Channel */ + tmp = (uint32_t*)((void *)&pData); + HAL_DMA_Start_IT(hospi->hdma, (uint32_t)&hospi->Instance->DR, *(uint32_t*)tmp, hospi->XferSize); + + /* Enable the transfer error interrupt */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TE); + + /* Trig the transfer by re-writing address or instruction register */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + if (READ_BIT(hospi->Instance->CCR, OCTOSPI_CCR_ADMODE) != HAL_OSPI_ADDRESS_NONE) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + WRITE_REG(hospi->Instance->IR, ir_reg); + } + } + + /* Enable the DMA transfer by setting the DMAEN bit */ + SET_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the OSPI Automatic Polling Mode in blocking mode. + * @param hospi : OSPI handle + * @param cfg : structure that contains the polling configuration information. + * @param Timeout : Timeout duration + * @note This function is used only in Automatic Polling Mode + * @note This function should not be used when the memory is in octal mode (see Errata Sheet) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_AutoPolling(OSPI_HandleTypeDef *hospi, OSPI_AutoPollingTypeDef *cfg, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + uint32_t addr_reg = hospi->Instance->AR; + uint32_t ir_reg = hospi->Instance->IR; + + /* Check the parameters of the autopolling configuration structure */ + assert_param(IS_OSPI_MATCH_MODE (cfg->MatchMode)); + assert_param(IS_OSPI_AUTOMATIC_STOP (cfg->AutomaticStop)); + assert_param(IS_OSPI_INTERVAL (cfg->Interval)); + assert_param(IS_OSPI_STATUS_BYTES_SIZE(hospi->Instance->DLR+1)); + + /* Check the state */ + if ((hospi->State == HAL_OSPI_STATE_CMD_CFG) && (cfg->AutomaticStop == HAL_OSPI_AUTOMATIC_STOP_ENABLE)) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Configure registers */ + WRITE_REG (hospi->Instance->PSMAR, cfg->Match); + WRITE_REG (hospi->Instance->PSMKR, cfg->Mask); + WRITE_REG (hospi->Instance->PIR, cfg->Interval); + MODIFY_REG(hospi->Instance->CR, (OCTOSPI_CR_PMM | OCTOSPI_CR_APMS | OCTOSPI_CR_FMODE), + (cfg->MatchMode | cfg->AutomaticStop | OSPI_FUNCTIONAL_MODE_AUTO_POLLING)); + + /* Trig the transfer by re-writing address or instruction register */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + if (READ_BIT(hospi->Instance->CCR, OCTOSPI_CCR_ADMODE) != HAL_OSPI_ADDRESS_NONE) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + WRITE_REG(hospi->Instance->IR, ir_reg); + } + } + + /* Wait till status match flag is set to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_SM, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Clear status match flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_SM); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the OSPI Automatic Polling Mode in non-blocking mode. + * @param hospi : OSPI handle + * @param cfg : structure that contains the polling configuration information. + * @note This function is used only in Automatic Polling Mode + * @note This function should not be used when the memory is in octal mode (see Errata Sheet) + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_AutoPolling_IT(OSPI_HandleTypeDef *hospi, OSPI_AutoPollingTypeDef *cfg) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + uint32_t addr_reg = hospi->Instance->AR; + uint32_t ir_reg = hospi->Instance->IR; + + /* Check the parameters of the autopolling configuration structure */ + assert_param(IS_OSPI_MATCH_MODE (cfg->MatchMode)); + assert_param(IS_OSPI_AUTOMATIC_STOP (cfg->AutomaticStop)); + assert_param(IS_OSPI_INTERVAL (cfg->Interval)); + assert_param(IS_OSPI_STATUS_BYTES_SIZE(hospi->Instance->DLR+1)); + + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Configure registers */ + WRITE_REG (hospi->Instance->PSMAR, cfg->Match); + WRITE_REG (hospi->Instance->PSMKR, cfg->Mask); + WRITE_REG (hospi->Instance->PIR, cfg->Interval); + MODIFY_REG(hospi->Instance->CR, (OCTOSPI_CR_PMM | OCTOSPI_CR_APMS | OCTOSPI_CR_FMODE), + (cfg->MatchMode | cfg->AutomaticStop | OSPI_FUNCTIONAL_MODE_AUTO_POLLING)); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TE | HAL_OSPI_FLAG_SM); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_BUSY_AUTO_POLLING; + + /* Enable the status match and transfer error interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_SM | HAL_OSPI_IT_TE); + + /* Trig the transfer by re-writing address or instruction register */ + if (hospi->Init.MemoryType == HAL_OSPI_MEMTYPE_HYPERBUS) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + if (READ_BIT(hospi->Instance->CCR, OCTOSPI_CCR_ADMODE) != HAL_OSPI_ADDRESS_NONE) + { + WRITE_REG(hospi->Instance->AR, addr_reg); + } + else + { + WRITE_REG(hospi->Instance->IR, ir_reg); + } + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the Memory Mapped mode. + * @param hospi : OSPI handle + * @param cfg : structure that contains the memory mapped configuration information. + * @note This function is used only in Memory mapped Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_MemoryMapped(OSPI_HandleTypeDef *hospi, OSPI_MemoryMappedTypeDef *cfg) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters of the memory-mapped configuration structure */ + assert_param(IS_OSPI_TIMEOUT_ACTIVATION(cfg->TimeOutActivation)); + + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_CMD_CFG) + { + /* Wait till busy flag is reset */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Update state */ + hospi->State = HAL_OSPI_STATE_BUSY_MEM_MAPPED; + + if (cfg->TimeOutActivation == HAL_OSPI_TIMEOUT_COUNTER_ENABLE) + { + assert_param(IS_OSPI_TIMEOUT_PERIOD(cfg->TimeOutPeriod)); + + /* Configure register */ + WRITE_REG(hospi->Instance->LPTR, cfg->TimeOutPeriod); + + /* Clear flags related to interrupt */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TO); + + /* Enable the timeout interrupt */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TO); + } + + /* Configure CR register with functional mode as memory-mapped */ + MODIFY_REG(hospi->Instance->CR, (OCTOSPI_CR_TCEN | OCTOSPI_CR_FMODE), + (cfg->TimeOutActivation | OSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)); + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** + * @brief Transfer Error callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_ErrorCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief Abort completed callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_AbortCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_AbortCpltCallback could be implemented in the user file + */ +} + +/** + * @brief FIFO Threshold callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_FifoThresholdCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_FIFOThresholdCallback could be implemented in the user file + */ +} + +/** + * @brief Command completed callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_CmdCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_CmdCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_RxCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Transfer completed callback. + * @param hospi : OSPI handle + * @retval None + */ + __weak void HAL_OSPI_TxCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Half Transfer completed callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_RxHalfCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_RxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Half Transfer completed callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_TxHalfCpltCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_OSPI_TxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Status Match callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_StatusMatchCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_StatusMatchCallback could be implemented in the user file + */ +} + +/** + * @brief Timeout callback. + * @param hospi : OSPI handle + * @retval None + */ +__weak void HAL_OSPI_TimeOutCallback(OSPI_HandleTypeDef *hospi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hospi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_OSPI_TimeOutCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup OSPI_Exported_Functions_Group3 Peripheral Control and State functions + * @brief OSPI control and State functions + * +@verbatim + =============================================================================== + ##### Peripheral Control and State functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Check in run-time the state of the driver. + (+) Check the error code set during last operation. + (+) Abort any operation. + (+) Manage the Fifo threshold. + (+) Configure the timeout duration used in the driver. + +@endverbatim + * @{ + */ + +/** +* @brief Abort the current transmission. +* @param hospi : OSPI handle +* @retval HAL status +*/ +HAL_StatusTypeDef HAL_OSPI_Abort(OSPI_HandleTypeDef *hospi) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check if the state is in one of the busy or configured states */ + if (((hospi->State & OSPI_BUSY_STATE_MASK) != 0) || ((hospi->State & OSPI_CFG_STATE_MASK) != 0)) + { + /* Check if the DMA is enabled */ + if ((hospi->Instance->CR & OCTOSPI_CR_DMAEN) != 0) + { + /* Disable the DMA transfer on the OctoSPI side */ + CLEAR_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + + /* Disable the DMA transfer on the DMA side */ + status = HAL_DMA_Abort(hospi->hdma); + if (status != HAL_OK) + { + hospi->ErrorCode = HAL_OSPI_ERROR_DMA; + } + } + + /* Perform an abort of the OctoSPI */ + SET_BIT(hospi->Instance->CR, OCTOSPI_CR_ABORT); + + /* Wait until the transfer complete flag is set to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_TC, SET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Clear transfer complete flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + + /* Wait until the busy flag is reset to go back in idle state */ + status = OSPI_WaitFlagStateUntilTimeout(hospi, HAL_OSPI_FLAG_BUSY, RESET, tickstart, hospi->Timeout); + + if (status == HAL_OK) + { + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + } + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** +* @brief Abort the current transmission (non-blocking function) +* @param hospi : OSPI handle +* @retval HAL status +*/ +HAL_StatusTypeDef HAL_OSPI_Abort_IT(OSPI_HandleTypeDef *hospi) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check if the state is in one of the busy or configured states */ + if (((hospi->State & OSPI_BUSY_STATE_MASK) != 0) || ((hospi->State & OSPI_CFG_STATE_MASK) != 0)) + { + /* Disable all interrupts */ + __HAL_OSPI_DISABLE_IT(hospi, (HAL_OSPI_IT_TO | HAL_OSPI_IT_SM | HAL_OSPI_IT_FT | HAL_OSPI_IT_TC | HAL_OSPI_IT_TE)); + + /* Update state */ + hospi->State = HAL_OSPI_STATE_ABORT; + + /* Check if the DMA is enabled */ + if ((hospi->Instance->CR & OCTOSPI_CR_DMAEN) != 0) + { + /* Disable the DMA transfer on the OctoSPI side */ + CLEAR_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + + /* Disable the DMA transfer on the DMA side */ + hospi->hdma->XferAbortCallback = OSPI_DMAAbortCplt; + HAL_DMA_Abort_IT(hospi->hdma); + } + else + { + /* Clear transfer complete flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + + /* Enable the transfer complete interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC); + + /* Perform an abort of the OctoSPI */ + SET_BIT(hospi->Instance->CR, OCTOSPI_CR_ABORT); + } + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** @brief Set OSPI Fifo threshold. + * @param hospi : OSPI handle. + * @param Threshold : Threshold of the Fifo. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPI_SetFifoThreshold(OSPI_HandleTypeDef *hospi, uint32_t Threshold) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the state */ + if ((hospi->State & OSPI_BUSY_STATE_MASK) == 0) + { + /* Synchronize initialization structure with the new fifo threshold value */ + hospi->Init.FifoThreshold = Threshold; + + /* Configure new fifo threshold */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FTHRES, ((hospi->Init.FifoThreshold-1) << OCTOSPI_CR_FTHRES_Pos)); + + } + else + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_SEQUENCE; + } + + /* Return function status */ + return status; +} + +/** @brief Get OSPI Fifo threshold. + * @param hospi : OSPI handle. + * @retval Fifo threshold + */ +uint32_t HAL_OSPI_GetFifoThreshold(OSPI_HandleTypeDef *hospi) +{ + return ((READ_BIT(hospi->Instance->CR, OCTOSPI_CR_FTHRES) >> OCTOSPI_CR_FTHRES_Pos) + 1); +} + +/** @brief Set OSPI timeout. + * @param hospi : OSPI handle. + * @param Timeout : Timeout for the memory access. + * @retval None + */ +HAL_StatusTypeDef HAL_OSPI_SetTimeout(OSPI_HandleTypeDef *hospi, uint32_t Timeout) +{ + hospi->Timeout = Timeout; + return HAL_OK; +} + +/** +* @brief Return the OSPI error code. +* @param hospi : OSPI handle +* @retval OSPI Error Code +*/ +uint32_t HAL_OSPI_GetError(OSPI_HandleTypeDef *hospi) +{ + return hospi->ErrorCode; +} + +/** + * @brief Return the OSPI handle state. + * @param hospi : OSPI handle + * @retval HAL state + */ +uint32_t HAL_OSPI_GetState(OSPI_HandleTypeDef *hospi) +{ + /* Return OSPI handle state */ + return hospi->State; +} + +/** + * @} + */ + +/** @defgroup OSPI_Exported_Functions_Group4 IO Manager configuration function + * @brief OSPI IO Manager configuration function + * +@verbatim + =============================================================================== + ##### IO Manager configuration function ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Configure the IO manager. + +@endverbatim + * @{ + */ + +/** + * @brief Configure the OctoSPI IO manager. + * @param hospi : OSPI handle + * @param cfg : Configuration of the IO Manager for the instance + * @param Timeout : Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_OSPIM_Config(OSPI_HandleTypeDef *hospi, OSPIM_CfgTypeDef *cfg, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t instance = 0; + uint8_t index = 0, ospi_enabled = 0, other_instance = 0; + OSPIM_CfgTypeDef IOM_cfg[OSPI_NB_INSTANCE]; + + /* Check the parameters of the OctoSPI IO Manager configuration structure */ + assert_param(IS_OSPIM_PORT(cfg->ClkPort)); + assert_param(IS_OSPIM_PORT(cfg->DQSPort)); + assert_param(IS_OSPIM_PORT(cfg->NCSPort)); + assert_param(IS_OSPIM_IO_PORT(cfg->IOLowPort)); + assert_param(IS_OSPIM_IO_PORT(cfg->IOHighPort)); + + if (hospi->Instance == OCTOSPI1) + { + instance = 0; + other_instance = 1; + } + else + { + instance = 1; + other_instance = 0; + } + + /**************** Get current configuration of the instances ****************/ + for (index = 0; index < OSPI_NB_INSTANCE; index++) + { + if (OSPIM_GetConfig(index+1, &(IOM_cfg[index])) != HAL_OK) + { + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + } + + if (status == HAL_OK) + { + /********** Disable both OctoSPI to configure OctoSPI IO Manager **********/ + if ((OCTOSPI1->CR & OCTOSPI_CR_EN) != 0) + { + CLEAR_BIT(OCTOSPI1->CR, OCTOSPI_CR_EN); + ospi_enabled |= 0x1; + } + if ((OCTOSPI2->CR & OCTOSPI_CR_EN) != 0) + { + CLEAR_BIT(OCTOSPI2->CR, OCTOSPI_CR_EN); + ospi_enabled |= 0x2; + } + + /***************** Deactivation of previous configuration *****************/ + if (IOM_cfg[instance].ClkPort != 0) + { + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].ClkPort-1)], OCTOSPIM_PCR_CLKEN); + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].DQSPort-1)], OCTOSPIM_PCR_DQSEN); + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[instance].NCSPort-1)], OCTOSPIM_PCR_NCSEN); + CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[instance].IOLowPort&0xF)-1)], OCTOSPIM_PCR_IOLEN); + CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[instance].IOHighPort&0xF)-1)], OCTOSPIM_PCR_IOHEN); + } + + /********************* Deactivation of other instance *********************/ + if ((cfg->ClkPort == IOM_cfg[other_instance].ClkPort) || (cfg->DQSPort == IOM_cfg[other_instance].DQSPort) || + (cfg->NCSPort == IOM_cfg[other_instance].NCSPort) || (cfg->IOLowPort == IOM_cfg[other_instance].IOLowPort) || + (cfg->IOHighPort == IOM_cfg[other_instance].IOHighPort)) + { + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].ClkPort-1)], OCTOSPIM_PCR_CLKEN); + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].DQSPort-1)], OCTOSPIM_PCR_DQSEN); + CLEAR_BIT(OCTOSPIM->PCR[(IOM_cfg[other_instance].NCSPort-1)], OCTOSPIM_PCR_NCSEN); + CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[other_instance].IOLowPort&0xF)-1)], OCTOSPIM_PCR_IOLEN); + CLEAR_BIT(OCTOSPIM->PCR[((IOM_cfg[other_instance].IOHighPort&0xF)-1)], OCTOSPIM_PCR_IOHEN); + } + + /******************** Activation of new configuration *********************/ + MODIFY_REG(OCTOSPIM->PCR[(cfg->ClkPort-1)], (OCTOSPIM_PCR_CLKEN | OCTOSPIM_PCR_CLKSRC), (OCTOSPIM_PCR_CLKEN | (instance << OCTOSPIM_PCR_CLKSRC_Pos))); + MODIFY_REG(OCTOSPIM->PCR[(cfg->DQSPort-1)], (OCTOSPIM_PCR_DQSEN | OCTOSPIM_PCR_DQSSRC), (OCTOSPIM_PCR_DQSEN | (instance << OCTOSPIM_PCR_DQSSRC_Pos))); + MODIFY_REG(OCTOSPIM->PCR[(cfg->NCSPort-1)], (OCTOSPIM_PCR_NCSEN | OCTOSPIM_PCR_NCSSRC), (OCTOSPIM_PCR_NCSEN | (instance << OCTOSPIM_PCR_NCSSRC_Pos))); + + if ((cfg->IOLowPort & OCTOSPIM_PCR_IOLEN) != 0) + { + MODIFY_REG(OCTOSPIM->PCR[((cfg->IOLowPort&0xF)-1)], (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC), + (OCTOSPIM_PCR_IOLEN | (instance << POSITION_VAL(OCTOSPIM_PCR_IOLSRC_1)))); + } + else + { + MODIFY_REG(OCTOSPIM->PCR[((cfg->IOLowPort&0xF)-1)], (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC), + (OCTOSPIM_PCR_IOHEN | (instance << POSITION_VAL(OCTOSPIM_PCR_IOHSRC_1)))); + } + if ((cfg->IOHighPort & OCTOSPIM_PCR_IOLEN) != 0) + { + MODIFY_REG(OCTOSPIM->PCR[((cfg->IOHighPort&0xF)-1)], (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC), + (OCTOSPIM_PCR_IOLEN | OCTOSPIM_PCR_IOLSRC_0 | (instance << POSITION_VAL(OCTOSPIM_PCR_IOLSRC_1)))); + } + else + { + MODIFY_REG(OCTOSPIM->PCR[((cfg->IOHighPort&0xF)-1)], (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC), + (OCTOSPIM_PCR_IOHEN | OCTOSPIM_PCR_IOHSRC_0 | (instance << POSITION_VAL(OCTOSPIM_PCR_IOHSRC_1)))); + } + + /******* Re-enable both OctoSPI after configure OctoSPI IO Manager ********/ + if ((ospi_enabled & 0x1) != 0) + { + SET_BIT(OCTOSPI1->CR, OCTOSPI_CR_EN); + } + if ((ospi_enabled & 0x2) != 0) + { + SET_BIT(OCTOSPI2->CR, OCTOSPI_CR_EN); + } + } + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** + @cond 0 + */ +/** + * @brief DMA OSPI process complete callback. + * @param hdma : DMA handle + * @retval None + */ +static void OSPI_DMACplt(DMA_HandleTypeDef *hdma) +{ + OSPI_HandleTypeDef* hospi = ( OSPI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + hospi->XferCount = 0; + + /* Disable the DMA transfer on the OctoSPI side */ + CLEAR_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + + /* Disable the DMA channel */ + __HAL_DMA_DISABLE(hdma); + + /* Enable the OSPI transfer complete Interrupt */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC); +} + +/** + * @brief DMA OSPI process half complete callback. + * @param hdma : DMA handle + * @retval None + */ +static void OSPI_DMAHalfCplt(DMA_HandleTypeDef *hdma) +{ + OSPI_HandleTypeDef* hospi = ( OSPI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + hospi->XferCount = (hospi->XferCount >> 1); + + if (hospi->State == HAL_OSPI_STATE_BUSY_RX) + { + HAL_OSPI_RxHalfCpltCallback(hospi); + } + else + { + HAL_OSPI_TxHalfCpltCallback(hospi); + } +} + +/** + * @brief DMA OSPI communication error callback. + * @param hdma : DMA handle + * @retval None + */ +static void OSPI_DMAError(DMA_HandleTypeDef *hdma) +{ + OSPI_HandleTypeDef* hospi = ( OSPI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + hospi->XferCount = 0; + hospi->ErrorCode = HAL_OSPI_ERROR_DMA; + + /* Disable the DMA transfer on the OctoSPI side */ + CLEAR_BIT(hospi->Instance->CR, OCTOSPI_CR_DMAEN); + + /* Abort the OctoSPI */ + HAL_OSPI_Abort_IT(hospi); +} + +/** + * @brief DMA OSPI abort complete callback. + * @param hdma : DMA handle + * @retval None + */ +static void OSPI_DMAAbortCplt(DMA_HandleTypeDef *hdma) +{ + OSPI_HandleTypeDef* hospi = ( OSPI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; + hospi->XferCount = 0; + + /* Check the state */ + if (hospi->State == HAL_OSPI_STATE_ABORT) + { + /* DMA abort called by OctoSPI abort */ + /* Clear transfer complete flag */ + __HAL_OSPI_CLEAR_FLAG(hospi, HAL_OSPI_FLAG_TC); + + /* Enable the transfer complete interrupts */ + __HAL_OSPI_ENABLE_IT(hospi, HAL_OSPI_IT_TC); + + /* Perform an abort of the OctoSPI */ + SET_BIT(hospi->Instance->CR, OCTOSPI_CR_ABORT); + } + else + { + /* DMA abort called due to a transfer error interrupt */ + /* Update state */ + hospi->State = HAL_OSPI_STATE_READY; + + /* Error callback */ + HAL_OSPI_ErrorCallback(hospi); + } +} + +/** + * @brief Wait for a flag state until timeout. + * @param hospi : OSPI handle + * @param Flag : Flag checked + * @param State : Value of the flag expected + * @param Timeout : Duration of the timeout + * @param Tickstart : Tick start value + * @retval HAL status + */ +static HAL_StatusTypeDef OSPI_WaitFlagStateUntilTimeout(OSPI_HandleTypeDef *hospi, uint32_t Flag, + FlagStatus State, uint32_t Tickstart, uint32_t Timeout) +{ + /* Wait until flag is in expected state */ + while((__HAL_OSPI_GET_FLAG(hospi, Flag)) != State) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick() - Tickstart) > Timeout)) + { + hospi->State = HAL_OSPI_STATE_ERROR; + hospi->ErrorCode |= HAL_OSPI_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief Configure the registers for the regular command mode. + * @param hospi : OSPI handle + * @param cmd : structure that contains the command configuration information + * @retval HAL status + */ +static HAL_StatusTypeDef OSPI_ConfigCmd(OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd) +{ + HAL_StatusTypeDef status = HAL_OK; + __IO uint32_t *ccr_reg, *tcr_reg, *ir_reg, *abr_reg; + + /* Re-initialize the value of the functional mode */ + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FMODE, 0); + + /* Configure the flash ID */ + if (hospi->Init.DualQuad == HAL_OSPI_DUALQUAD_DISABLE) + { + MODIFY_REG(hospi->Instance->CR, OCTOSPI_CR_FSEL, cmd->FlashId); + } + + if (cmd->OperationType != HAL_OSPI_OPTYPE_WRITE_CFG) + { + ccr_reg = &(hospi->Instance->CCR); + tcr_reg = &(hospi->Instance->TCR); + ir_reg = &(hospi->Instance->IR); + abr_reg = &(hospi->Instance->ABR); + } + else + { + ccr_reg = &(hospi->Instance->WCCR); + tcr_reg = &(hospi->Instance->WTCR); + ir_reg = &(hospi->Instance->WIR); + abr_reg = &(hospi->Instance->WABR); + } + + /* Configure the CCR register with DQS and SIOO modes */ + *ccr_reg = (cmd->DQSMode | cmd->SIOOMode); + + if (cmd->AlternateBytesMode != HAL_OSPI_ALTERNATE_BYTES_NONE) + { + /* Configure the ABR register with alternate bytes value */ + *abr_reg = cmd->AlternateBytes; + + /* Configure the CCR register with alternate bytes communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_ABMODE | OCTOSPI_CCR_ABDTR | OCTOSPI_CCR_ABSIZE), + (cmd->AlternateBytesMode | cmd->AlternateBytesDtrMode | cmd->AlternateBytesSize)); + } + + /* Configure the TCR register with the number of dummy cycles */ + MODIFY_REG((*tcr_reg), OCTOSPI_TCR_DCYC, cmd->DummyCycles); + + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + if (cmd->OperationType == HAL_OSPI_OPTYPE_COMMON_CFG) + { + /* Configure the DLR register with the number of data */ + hospi->Instance->DLR = (cmd->NbData - 1); + } + } + + if (cmd->InstructionMode != HAL_OSPI_INSTRUCTION_NONE) + { + if (cmd->AddressMode != HAL_OSPI_ADDRESS_NONE) + { + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + /* ---- Command with instruction, address and data ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_IMODE | OCTOSPI_CCR_IDTR | OCTOSPI_CCR_ISIZE | + OCTOSPI_CCR_ADMODE | OCTOSPI_CCR_ADDTR | OCTOSPI_CCR_ADSIZE | + OCTOSPI_CCR_DMODE | OCTOSPI_CCR_DDTR), + (cmd->InstructionMode | cmd->InstructionDtrMode | cmd->InstructionSize | + cmd->AddressMode | cmd->AddressDtrMode | cmd->AddressSize | + cmd->DataMode | cmd->DataDtrMode)); + } + else + { + /* ---- Command with instruction and address ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_IMODE | OCTOSPI_CCR_IDTR | OCTOSPI_CCR_ISIZE | + OCTOSPI_CCR_ADMODE | OCTOSPI_CCR_ADDTR | OCTOSPI_CCR_ADSIZE), + (cmd->InstructionMode | cmd->InstructionDtrMode | cmd->InstructionSize | + cmd->AddressMode | cmd->AddressDtrMode | cmd->AddressSize)); + + /* The DHQC bit is linked with DDTR bit which should be activated */ + if ((hospi->Init.DelayHoldQuarterCycle == HAL_OSPI_DHQC_ENABLE) && + (cmd->InstructionDtrMode == HAL_OSPI_INSTRUCTION_DTR_ENABLE)) + { + MODIFY_REG((*ccr_reg), OCTOSPI_CCR_DDTR, HAL_OSPI_DATA_DTR_ENABLE); + } + } + + /* Configure the IR register with the instruction value */ + *ir_reg = cmd->Instruction; + + /* Configure the AR register with the address value */ + hospi->Instance->AR = cmd->Address; + } + else + { + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + /* ---- Command with instruction and data ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_IMODE | OCTOSPI_CCR_IDTR | OCTOSPI_CCR_ISIZE | + OCTOSPI_CCR_DMODE | OCTOSPI_CCR_DDTR), + (cmd->InstructionMode | cmd->InstructionDtrMode | cmd->InstructionSize | + cmd->DataMode | cmd->DataDtrMode)); + } + else + { + /* ---- Command with only instruction ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_IMODE | OCTOSPI_CCR_IDTR | OCTOSPI_CCR_ISIZE), + (cmd->InstructionMode | cmd->InstructionDtrMode | cmd->InstructionSize)); + + /* The DHQC bit is linked with DDTR bit which should be activated */ + if ((hospi->Init.DelayHoldQuarterCycle == HAL_OSPI_DHQC_ENABLE) && + (cmd->InstructionDtrMode == HAL_OSPI_INSTRUCTION_DTR_ENABLE)) + { + MODIFY_REG((*ccr_reg), OCTOSPI_CCR_DDTR, HAL_OSPI_DATA_DTR_ENABLE); + } + } + + /* Configure the IR register with the instruction value */ + *ir_reg = cmd->Instruction; + + } + } + else + { + if (cmd->AddressMode != HAL_OSPI_ADDRESS_NONE) + { + if (cmd->DataMode != HAL_OSPI_DATA_NONE) + { + /* ---- Command with address and data ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_ADMODE | OCTOSPI_CCR_ADDTR | OCTOSPI_CCR_ADSIZE | + OCTOSPI_CCR_DMODE | OCTOSPI_CCR_DDTR), + (cmd->AddressMode | cmd->AddressDtrMode | cmd->AddressSize | + cmd->DataMode | cmd->DataDtrMode)); + } + else + { + /* ---- Command with only address ---- */ + + /* Configure the CCR register with all communication parameters */ + MODIFY_REG((*ccr_reg), (OCTOSPI_CCR_ADMODE | OCTOSPI_CCR_ADDTR | OCTOSPI_CCR_ADSIZE), + (cmd->AddressMode | cmd->AddressDtrMode | cmd->AddressSize)); + } + + /* Configure the AR register with the instruction value */ + hospi->Instance->AR = cmd->Address; + } + else + { + /* ---- Invalid command configuration (no instruction, no address) ---- */ + status = HAL_ERROR; + hospi->ErrorCode = HAL_OSPI_ERROR_INVALID_PARAM; + } + } + + /* Return function status */ + return status; +} + +/** + * @brief Get the current IOM configuration for an OctoSPI instance. + * @param instance_nb : number of the instance + * @param cfg : configuration of the IO Manager for the instance + * @retval HAL status + */ +static HAL_StatusTypeDef OSPIM_GetConfig(uint8_t instance_nb, OSPIM_CfgTypeDef *cfg) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t reg = 0, value = 0; + uint32_t index = 0; + + if ((instance_nb == 0) || (instance_nb > OSPI_NB_INSTANCE) || (cfg == NULL)) + { + /* Invalid parameter -> error returned */ + status = HAL_ERROR; + } + else + { + /* Initialize the structure */ + cfg->ClkPort = cfg->DQSPort = cfg->NCSPort = cfg->IOLowPort = cfg->IOHighPort = 0; + + if (instance_nb == 1) + { + value = 0; + } + else if (instance_nb == 2) + { + value = (OCTOSPIM_PCR_CLKSRC | OCTOSPIM_PCR_DQSSRC | OCTOSPIM_PCR_NCSSRC | OCTOSPIM_PCR_IOLSRC_1 | OCTOSPIM_PCR_IOHSRC_1); + } + + /* Get the information about the instance */ + for (index = 0; index < OSPI_IOM_NB_PORTS; index ++) + { + reg = OCTOSPIM->PCR[index]; + + if ((reg & OCTOSPIM_PCR_CLKEN) != 0) + { + /* The clock is enabled on this port */ + if ((reg & OCTOSPIM_PCR_CLKSRC) == (value & OCTOSPIM_PCR_CLKSRC)) + { + /* The clock correspond to the instance passed as parameter */ + cfg->ClkPort = index+1; + } + } + + if ((reg & OCTOSPIM_PCR_DQSEN) != 0) + { + /* The DQS is enabled on this port */ + if ((reg & OCTOSPIM_PCR_DQSSRC) == (value & OCTOSPIM_PCR_DQSSRC)) + { + /* The DQS correspond to the instance passed as parameter */ + cfg->DQSPort = index+1; + } + } + + if ((reg & OCTOSPIM_PCR_NCSEN) != 0) + { + /* The nCS is enabled on this port */ + if ((reg & OCTOSPIM_PCR_NCSSRC) == (value & OCTOSPIM_PCR_NCSSRC)) + { + /* The nCS correspond to the instance passed as parameter */ + cfg->NCSPort = index+1; + } + } + + if ((reg & OCTOSPIM_PCR_IOLEN) != 0) + { + /* The IO Low is enabled on this port */ + if ((reg & OCTOSPIM_PCR_IOLSRC_1) == (value & OCTOSPIM_PCR_IOLSRC_1)) + { + /* The IO Low correspond to the instance passed as parameter */ + if ((reg & OCTOSPIM_PCR_IOLSRC_0) == 0) + { + cfg->IOLowPort = (OCTOSPIM_PCR_IOLEN | (index+1)); + } + else + { + cfg->IOLowPort = (OCTOSPIM_PCR_IOHEN | (index+1)); + } + } + } + + if ((reg & OCTOSPIM_PCR_IOHEN) != 0) + { + /* The IO High is enabled on this port */ + if ((reg & OCTOSPIM_PCR_IOHSRC_1) == (value & OCTOSPIM_PCR_IOHSRC_1)) + { + /* The IO High correspond to the instance passed as parameter */ + if ((reg & OCTOSPIM_PCR_IOHSRC_0) == 0) + { + cfg->IOHighPort = (OCTOSPIM_PCR_IOLEN | (index+1)); + } + else + { + cfg->IOHighPort = (OCTOSPIM_PCR_IOHEN | (index+1)); + } + } + } + } + } + + /* Return function status */ + return status; +} + +/** + @endcond + */ + +/** + * @} + */ + +#endif /* HAL_OSPI_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* OCTOSPI || OCTOSPI1 || OCTOSPI2 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.h new file mode 100644 index 0000000000..82eb12e4b2 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_ospi.h @@ -0,0 +1,968 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_ospi.h + * @author MCD Application Team + * @brief Header file of OSPI HAL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_OSPI_H +#define __STM32L4xx_HAL_OSPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +#if defined(OCTOSPI) || defined(OCTOSPI1) || defined(OCTOSPI2) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup OSPI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup OSPI_Exported_Types OSPI Exported Types + * @{ + */ + +/** + * @brief OSPI Init structure definition + */ +typedef struct +{ + uint32_t FifoThreshold; /* This is the threshold used byt the IP to generate the interrupt + indicating that data are available in reception or free place + is available in transmission. + This parameter can be a value between 1 and 32 */ + uint32_t DualQuad; /* It enables or not the dual-quad mode which allow to access up to + quad mode on two different devices to increase the throughput. + This parameter can be a value of @ref OSPI_DualQuad */ + uint32_t MemoryType; /* It indicates the external device type connected to the OSPI. + This parameter can be a value of @ref OSPI_MemoryType */ + uint32_t DeviceSize; /* It defines the size of the external device connected to the OSPI, + it corresponds to the number of address bits required to access + the external device. + This parameter can be a value between 1 and 32 */ + uint32_t ChipSelectHighTime; /* It defines the minimun number of clocks which the chip select + must remain high between commands. + This parameter can be a value between 1 and 8 */ + uint32_t FreeRunningClock; /* It enables or not the free running clock. + This parameter can be a value of @ref OSPI_FreeRunningClock */ + uint32_t ClockMode; /* It indicates the level of clock when the chip select is released. + This parameter can be a value of @ref OSPI_ClockMode */ + uint32_t WrapSize; /* It indicates the wrap-size corresponding the external device configuration. + This parameter can be a value of @ref OSPI_WrapSize */ + uint32_t ClockPrescaler; /* It specifies the prescaler factor used for generating + the external clock based on the AHB clock. + This parameter can be a value between 1 and 256 */ + uint32_t SampleShifting; /* It allows to delay to 1/2 cycle the data sampling in order + to take in account external signal delays. + This parameter can be a value of @ref OSPI_SampleShifting */ + uint32_t DelayHoldQuarterCycle; /* It allows to hold to 1/4 cycle the data. + This parameter can be a value of @ref OSPI_DelayHoldQuarterCycle */ + uint32_t ChipSelectBoundary; /* It enables the transaction boundary feature and + defines the boundary of bytes to release the chip select. + This parameter can be a value between 0 and 31 */ +}OSPI_InitTypeDef; + +/** + * @brief HAL OSPI Handle Structure definition + */ +typedef struct +{ + OCTOSPI_TypeDef *Instance; /* OSPI registers base address */ + OSPI_InitTypeDef Init; /* OSPI initialization parameters */ + uint8_t *pBuffPtr; /* Address of the OSPI buffer for transfer */ + __IO uint32_t XferSize; /* Number of data to transfer */ + __IO uint32_t XferCount; /* Counter of data transferred */ + DMA_HandleTypeDef *hdma; /* Handle of the DMA channel used for the transfer */ + __IO uint32_t State; /* Internal state of the OSPI HAL driver */ + __IO uint32_t ErrorCode; /* Error code in case of HAL driver internal error */ + uint32_t Timeout; /* Timeout used for the OSPI external device access */ +}OSPI_HandleTypeDef; + +/** + * @brief HAL OSPI Regular Command Structure definition + */ +typedef struct +{ + uint32_t OperationType; /* It indicates if the configuration applies to the common regsiters or + to the registers for the write operation (these registers are only + used for memory-mapped mode). + This parameter can be a value of @ref OSPI_OperationType */ + uint32_t FlashId; /* It indicates which external device is selected for this command (it + applies only if Dualquad is disabled in the initialization structure). + This parameter can be a value of @ref OSPI_FlashId */ + uint32_t Instruction; /* It contains the instruction to be sent to the device. + This parameter can be a value between 0 and 0xFFFFFFFF */ + uint32_t InstructionMode; /* It indicates the mode of the instruction. + This parameter can be a value of @ref OSPI_InstructionMode */ + uint32_t InstructionSize; /* It indicates the size of the instruction. + This parameter can be a value of @ref OSPI_InstructionSize */ + uint32_t InstructionDtrMode; /* It enables or not the DTR mode for the instruction phase. + This parameter can be a value of @ref OSPI_InstructionDtrMode */ + uint32_t Address; /* It contains the address to be sent to the device. + This parameter can be a value between 0 and 0xFFFFFFFF */ + uint32_t AddressMode; /* It indicates the mode of the address. + This parameter can be a value of @ref OSPI_AddressMode */ + uint32_t AddressSize; /* It indicates the size of the address. + This parameter can be a value of @ref OSPI_AddressSize */ + uint32_t AddressDtrMode; /* It enables or not the DTR mode for the address phase. + This parameter can be a value of @ref OSPI_AddressDtrMode */ + uint32_t AlternateBytes; /* It contains the alternate bytes to be sent to the device. + This parameter can be a value between 0 and 0xFFFFFFFF */ + uint32_t AlternateBytesMode; /* It indicates the mode of the alternate bytes. + This parameter can be a value of @ref OSPI_AlternateBytesMode */ + uint32_t AlternateBytesSize; /* It indicates the size of the alternate bytes. + This parameter can be a value of @ref OSPI_AlternateBytesSize */ + uint32_t AlternateBytesDtrMode; /* It enables or not the DTR mode for the alternate bytes phase. + This parameter can be a value of @ref OSPI_AlternateBytesDtrMode */ + uint32_t DataMode; /* It indicates the mode of the data. + This parameter can be a value of @ref OSPI_DataMode */ + uint32_t NbData; /* It indicates the number of data transferred with this command. + This field is only used for indirect mode. + This parameter can be a value between 1 and 0xFFFFFFFF */ + uint32_t DataDtrMode; /* It enables or not the DTR mode for the data phase. + This parameter can be a value of @ref OSPI_DataDtrMode */ + uint32_t DummyCycles; /* It indicates the number of dummy cycles inserted before data phase. + This parameter can be a value between 0 and 31 */ + uint32_t DQSMode; /* It enables or not the data strobe management. + This parameter can be a value of @ref OSPI_DQSMode */ + uint32_t SIOOMode; /* It enables or not the SIOO mode. + This parameter can be a value of @ref OSPI_SIOOMode */ +}OSPI_RegularCmdTypeDef; + +/** + * @brief HAL OSPI Hyperbus Configuration Structure definition + */ +typedef struct +{ + uint32_t RWRecoveryTime; /* It indicates the number of cycles for the device read write recovery time. + This parameter can be a value between 0 and 255 */ + uint32_t AccessTime; /* It indicates the number of cycles for the device acces time. + This parameter can be a value between 0 and 255 */ + uint32_t WriteZeroLatency; /* It enables or not the latency for the write access. + This parameter can be a value of @ref OSPI_WriteZeroLatency */ + uint32_t LatencyMode; /* It configures the latency mode. + This parameter can be a value of @ref OSPI_LatencyMode */ +}OSPI_HyperbusCfgTypeDef; + +/** + * @brief HAL OSPI Hyperbus Command Structure definition + */ +typedef struct +{ + uint32_t AddressSpace; /* It indicates the address space accessed by the command. + This parameter can be a value of @ref OSPI_AddressSpace */ + uint32_t Address; /* It contains the address to be sent tot he device. + This parameter can be a value between 0 and 0xFFFFFFFF */ + uint32_t AddressSize; /* It indicates the size of the address. + This parameter can be a value of @ref OSPI_AddressSize */ + uint32_t NbData; /* It indicates the number of data transferred with this command. + This field is only used for indirect mode. + This parameter can be a value between 1 and 0xFFFFFFFF + In case of autopolling mode, this parameter can be any value between 1 and 4 */ + uint32_t DQSMode; /* It enables or not the data strobe management. + This parameter can be a value of @ref OSPI_DQSMode */ +}OSPI_HyperbusCmdTypeDef; + +/** + * @brief HAL OSPI Auto Polling mode configuration structure definition + */ +typedef struct +{ + uint32_t Match; /* Specifies the value to be compared with the masked status register to get a match. + This parameter can be any value between 0 and 0xFFFFFFFF */ + uint32_t Mask; /* Specifies the mask to be applied to the status bytes received. + This parameter can be any value between 0 and 0xFFFFFFFF */ + uint32_t MatchMode; /* Specifies the method used for determining a match. + This parameter can be a value of @ref OSPI_MatchMode */ + uint32_t AutomaticStop; /* Specifies if automatic polling is stopped after a match. + This parameter can be a value of @ref OSPI_AutomaticStop */ + uint32_t Interval; /* Specifies the number of clock cycles between two read during automatic polling phases. + This parameter can be any value between 0 and 0xFFFF */ +}OSPI_AutoPollingTypeDef; + +/** + * @brief HAL OSPI Memory Mapped mode configuration structure definition + */ +typedef struct +{ + uint32_t TimeOutActivation; /* Specifies if the timeout counter is enabled to release the chip select. + This parameter can be a value of @ref OSPI_TimeOutActivation */ + uint32_t TimeOutPeriod; /* Specifies the number of clock to wait when the FIFO is full before to release the chip select. + This parameter can be any value between 0 and 0xFFFF */ +}OSPI_MemoryMappedTypeDef; + +/** + * @brief HAL OSPI IO Manager Configuration structure definition + */ +typedef struct +{ + uint32_t ClkPort; /* It indicates which port of the OSPI IO Manager is used for the CLK pins. + This parameter can be a value between 1 and 8 */ + uint32_t DQSPort; /* It indicates which port of the OSPI IO Manager is used for the DQS pin. + This parameter can be a value between 1 and 8 */ + uint32_t NCSPort; /* It indicates which port of the OSPI IO Manager is used for the NCS pin. + This parameter can be a value between 1 and 8 */ + uint32_t IOLowPort; /* It indicates which port of the OSPI IO Manager is used for the IO[3:0] pins. + This parameter can be a value of @ref OSPIM_IOPort */ + uint32_t IOHighPort; /* It indicates which port of the OSPI IO Manager is used for the IO[7:4] pins. + This parameter can be a value of @ref OSPIM_IOPort */ +}OSPIM_CfgTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup OSPI_Exported_Constants OSPI Exported Constants + * @{ + */ + +/** @defgroup OSPI_State OSPI State + * @{ + */ +#define HAL_OSPI_STATE_RESET ((uint32_t)0x00000000U) /*!< Initial state */ +#define HAL_OSPI_STATE_HYPERBUS_INIT ((uint32_t)0x00000001U) /*!< Initialization done in hyperbus mode but timing configuration not done */ +#define HAL_OSPI_STATE_READY ((uint32_t)0x00000002U) /*!< Driver ready to be used */ +#define HAL_OSPI_STATE_CMD_CFG ((uint32_t)0x00000004U) /*!< Command (regular or hyperbus) configured, ready for an action */ +#define HAL_OSPI_STATE_READ_CMD_CFG ((uint32_t)0x00000014U) /*!< Read command configuration done, not the write command configuration */ +#define HAL_OSPI_STATE_WRITE_CMD_CFG ((uint32_t)0x00000024U) /*!< Write command configuration done, not the read command configuration */ +#define HAL_OSPI_STATE_BUSY_CMD ((uint32_t)0x00000008U) /*!< Command without data on-going */ +#define HAL_OSPI_STATE_BUSY_TX ((uint32_t)0x00000018U) /*!< Indirect Tx on-going */ +#define HAL_OSPI_STATE_BUSY_RX ((uint32_t)0x00000028U) /*!< Indirect Rx on-going */ +#define HAL_OSPI_STATE_BUSY_AUTO_POLLING ((uint32_t)0x00000048U) /*!< Auto-polling on-going */ +#define HAL_OSPI_STATE_BUSY_MEM_MAPPED ((uint32_t)0x00000088U) /*!< Memory-mapped on-going */ +#define HAL_OSPI_STATE_ABORT ((uint32_t)0x00000100U) /*!< Abort on-going */ +#define HAL_OSPI_STATE_ERROR ((uint32_t)0x00000200U) /*!< Blocking error, driver should be re-initialized */ +/** + * @} + */ + +/** @defgroup OSPI_ErrorCode OSPI Error Code + * @{ + */ +#define HAL_OSPI_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ +#define HAL_OSPI_ERROR_TIMEOUT ((uint32_t)0x00000001U) /*!< Timeout error */ +#define HAL_OSPI_ERROR_TRANSFER ((uint32_t)0x00000002U) /*!< Transfer error */ +#define HAL_OSPI_ERROR_DMA ((uint32_t)0x00000004U) /*!< DMA transfer error */ +#define HAL_OSPI_ERROR_INVALID_PARAM ((uint32_t)0x00000008U) /*!< Invalid parameters error */ +#define HAL_OSPI_ERROR_INVALID_SEQUENCE ((uint32_t)0x00000010U) /*!< Sequence of the state machine is incorrect */ +/** + * @} + */ + +/** @defgroup OSPI_DualQuad OSPI Dual-Quad + * @{ + */ +#define HAL_OSPI_DUALQUAD_DISABLE ((uint32_t)0x00000000U) /*!< Dual-Quad mode disabled */ +#define HAL_OSPI_DUALQUAD_ENABLE ((uint32_t)OCTOSPI_CR_DQM) /*!< Dual-Quad mode enabled */ +/** + * @} + */ + +/** @defgroup OSPI_MemoryType OSPI Memory Type + * @{ + */ +#define HAL_OSPI_MEMTYPE_MICRON ((uint32_t)0x00000000U) /*!< Micron mode */ +#define HAL_OSPI_MEMTYPE_MACRONIX ((uint32_t)OCTOSPI_DCR1_MTYP_0) /*!< Macronix mode */ +#define HAL_OSPI_MEMTYPE_MACRONIX_RAM ((uint32_t)(OCTOSPI_DCR1_MTYP_1 | OCTOSPI_DCR1_MTYP_0)) /*!< Macronix RAM mode */ +#define HAL_OSPI_MEMTYPE_HYPERBUS ((uint32_t)OCTOSPI_DCR1_MTYP_2) /*!< Hyperbus mode */ +/** + * @} + */ + +/** @defgroup OSPI_FreeRunningClock OSPI Free Running Clock + * @{ + */ +#define HAL_OSPI_FREERUNCLK_DISABLE ((uint32_t)0x00000000U) /*!< CLK is not free running */ +#define HAL_OSPI_FREERUNCLK_ENABLE ((uint32_t)OCTOSPI_DCR1_FRCK) /*!< CLK is free running (always provided) */ +/** + * @} + */ + +/** @defgroup OSPI_ClockMode OSPI Clock Mode + * @{ + */ +#define HAL_OSPI_CLOCK_MODE_0 ((uint32_t)0x00000000U) /*!< CLK must stay low while nCS is high */ +#define HAL_OSPI_CLOCK_MODE_3 ((uint32_t)OCTOSPI_DCR1_CKMODE) /*!< CLK must stay high while nCS is high */ +/** + * @} + */ + +/** @defgroup OSPI_WrapSize OSPI Wrap-Size + * @{ + */ +#define HAL_OSPI_WRAP_NOT_SUPPORTED ((uint32_t)0x00000000U) /*!< wrapped reads are not supported by the memory */ +#define HAL_OSPI_WRAP_16_BYTES ((uint32_t)OCTOSPI_DCR2_WRAPSIZE_1) /*!< external memory supports wrap size of 16 bytes */ +#define HAL_OSPI_WRAP_32_BYTES ((uint32_t)(OCTOSPI_DCR2_WRAPSIZE_0 | OCTOSPI_DCR2_WRAPSIZE_1)) /*!< external memory supports wrap size of 32 bytes */ +#define HAL_OSPI_WRAP_64_BYTES ((uint32_t)OCTOSPI_DCR2_WRAPSIZE_2) /*!< external memory supports wrap size of 64 bytes */ +#define HAL_OSPI_WRAP_128_BYTES ((uint32_t)(OCTOSPI_DCR2_WRAPSIZE_0 | OCTOSPI_DCR2_WRAPSIZE_2)) /*!< external memory supports wrap size of 128 bytes */ +/** + * @} + */ + +/** @defgroup OSPI_SampleShifting OSPI Sample Shifting + * @{ + */ +#define HAL_OSPI_SAMPLE_SHIFTING_NONE ((uint32_t)0x00000000U) /*!< No shift */ +#define HAL_OSPI_SAMPLE_SHIFTING_HALFCYCLE ((uint32_t)OCTOSPI_TCR_SSHIFT) /*!< 1/2 cycle shift */ +/** + * @} + */ + +/** @defgroup OSPI_DelayHoldQuarterCycle OSPI Delay Hold Quarter Cycle + * @{ + */ +#define HAL_OSPI_DHQC_DISABLE ((uint32_t)0x00000000U) /*!< No Delay */ +#define HAL_OSPI_DHQC_ENABLE ((uint32_t)OCTOSPI_TCR_DHQC) /*!< Delay Hold 1/4 cycle */ +/** + * @} + */ + +/** @defgroup OSPI_OperationType OSPI Operation Type + * @{ + */ +#define HAL_OSPI_OPTYPE_COMMON_CFG ((uint32_t)0x00000000U) /*!< Common configuration (indirect or auto-polling mode) */ +#define HAL_OSPI_OPTYPE_READ_CFG ((uint32_t)0x00000001U) /*!< Read configuration (memory-mapped mode) */ +#define HAL_OSPI_OPTYPE_WRITE_CFG ((uint32_t)0x00000002U) /*!< Write configuration (memory-mapped mode) */ +/** + * @} + */ + +/** @defgroup OSPI_FlashID OSPI Flash Id + * @{ + */ +#define HAL_OSPI_FLASH_ID_1 ((uint32_t)0x00000000U) /*!< FLASH 1 selected */ +#define HAL_OSPI_FLASH_ID_2 ((uint32_t)OCTOSPI_CR_FSEL) /*!< FLASH 2 selected */ +/** + * @} + */ + +/** @defgroup OSPI_InstructionMode OSPI Instruction Mode + * @{ + */ +#define HAL_OSPI_INSTRUCTION_NONE ((uint32_t)0x00000000U) /*!< No instruction */ +#define HAL_OSPI_INSTRUCTION_1_LINE ((uint32_t)OCTOSPI_CCR_IMODE_0) /*!< Instruction on a single line */ +#define HAL_OSPI_INSTRUCTION_2_LINES ((uint32_t)OCTOSPI_CCR_IMODE_1) /*!< Instruction on two lines */ +#define HAL_OSPI_INSTRUCTION_4_LINES ((uint32_t)(OCTOSPI_CCR_IMODE_0 | OCTOSPI_CCR_IMODE_1)) /*!< Instruction on four lines */ +#define HAL_OSPI_INSTRUCTION_8_LINES ((uint32_t)OCTOSPI_CCR_IMODE_2) /*!< Instruction on eight lines */ +/** + * @} + */ + +/** @defgroup OSPI_InstructionSize OSPI Instruction Size + * @{ + */ +#define HAL_OSPI_INSTRUCTION_8_BITS ((uint32_t)0x00000000U) /*!< 8-bit instruction */ +#define HAL_OSPI_INSTRUCTION_16_BITS ((uint32_t)OCTOSPI_CCR_ISIZE_0) /*!< 16-bit instruction */ +#define HAL_OSPI_INSTRUCTION_24_BITS ((uint32_t)OCTOSPI_CCR_ISIZE_1) /*!< 24-bit instruction */ +#define HAL_OSPI_INSTRUCTION_32_BITS ((uint32_t)OCTOSPI_CCR_ISIZE) /*!< 32-bit instruction */ +/** + * @} + */ + +/** @defgroup OSPI_InstructionDtrMode OSPI Instruction DTR Mode + * @{ + */ +#define HAL_OSPI_INSTRUCTION_DTR_DISABLE ((uint32_t)0x00000000U) /*!< DTR mode disabled for instruction phase */ +#define HAL_OSPI_INSTRUCTION_DTR_ENABLE ((uint32_t)OCTOSPI_CCR_IDTR) /*!< DTR mode enabled for instruction phase */ +/** + * @} + */ + +/** @defgroup OSPI_AddressMode OSPI Address Mode + * @{ + */ +#define HAL_OSPI_ADDRESS_NONE ((uint32_t)0x00000000U) /*!< No address */ +#define HAL_OSPI_ADDRESS_1_LINE ((uint32_t)OCTOSPI_CCR_ADMODE_0) /*!< Address on a single line */ +#define HAL_OSPI_ADDRESS_2_LINES ((uint32_t)OCTOSPI_CCR_ADMODE_1) /*!< Address on two lines */ +#define HAL_OSPI_ADDRESS_4_LINES ((uint32_t)(OCTOSPI_CCR_ADMODE_0 | OCTOSPI_CCR_ADMODE_1)) /*!< Address on four lines */ +#define HAL_OSPI_ADDRESS_8_LINES ((uint32_t)OCTOSPI_CCR_ADMODE_2) /*!< Address on eight lines */ +/** + * @} + */ + +/** @defgroup OSPI_AddressSize OSPI Address Size + * @{ + */ +#define HAL_OSPI_ADDRESS_8_BITS ((uint32_t)0x00000000U) /*!< 8-bit address */ +#define HAL_OSPI_ADDRESS_16_BITS ((uint32_t)OCTOSPI_CCR_ADSIZE_0) /*!< 16-bit address */ +#define HAL_OSPI_ADDRESS_24_BITS ((uint32_t)OCTOSPI_CCR_ADSIZE_1) /*!< 24-bit address */ +#define HAL_OSPI_ADDRESS_32_BITS ((uint32_t)OCTOSPI_CCR_ADSIZE) /*!< 32-bit address */ +/** + * @} + */ + +/** @defgroup OSPI_AddressDtrMode OSPI Address DTR Mode + * @{ + */ +#define HAL_OSPI_ADDRESS_DTR_DISABLE ((uint32_t)0x00000000U) /*!< DTR mode disabled for address phase */ +#define HAL_OSPI_ADDRESS_DTR_ENABLE ((uint32_t)OCTOSPI_CCR_ADDTR) /*!< DTR mode enabled for address phase */ +/** + * @} + */ + +/** @defgroup OSPI_AlternateBytesMode OSPI Alternate Bytes Mode + * @{ + */ +#define HAL_OSPI_ALTERNATE_BYTES_NONE ((uint32_t)0x00000000U) /*!< No alternate bytes */ +#define HAL_OSPI_ALTERNATE_BYTES_1_LINE ((uint32_t)OCTOSPI_CCR_ABMODE_0) /*!< Alternate bytes on a single line */ +#define HAL_OSPI_ALTERNATE_BYTES_2_LINES ((uint32_t)OCTOSPI_CCR_ABMODE_1) /*!< Alternate bytes on two lines */ +#define HAL_OSPI_ALTERNATE_BYTES_4_LINES ((uint32_t)(OCTOSPI_CCR_ABMODE_0 | OCTOSPI_CCR_ABMODE_1)) /*!< Alternate bytes on four lines */ +#define HAL_OSPI_ALTERNATE_BYTES_8_LINES ((uint32_t)OCTOSPI_CCR_ABMODE_2) /*!< Alternate bytes on eight lines */ +/** + * @} + */ + +/** @defgroup OSPI_AlternateBytesSize OSPI Alternate Bytes Size + * @{ + */ +#define HAL_OSPI_ALTERNATE_BYTES_8_BITS ((uint32_t)0x00000000U) /*!< 8-bit alternate bytes */ +#define HAL_OSPI_ALTERNATE_BYTES_16_BITS ((uint32_t)OCTOSPI_CCR_ABSIZE_0) /*!< 16-bit alternate bytes */ +#define HAL_OSPI_ALTERNATE_BYTES_24_BITS ((uint32_t)OCTOSPI_CCR_ABSIZE_1) /*!< 24-bit alternate bytes */ +#define HAL_OSPI_ALTERNATE_BYTES_32_BITS ((uint32_t)OCTOSPI_CCR_ABSIZE) /*!< 32-bit alternate bytes */ +/** + * @} + */ + +/** @defgroup OSPI_AlternateBytesDtrMode OSPI Alternate Bytes DTR Mode + * @{ + */ +#define HAL_OSPI_ALTERNATE_BYTES_DTR_DISABLE ((uint32_t)0x00000000U) /*!< DTR mode disabled for alternate bytes phase */ +#define HAL_OSPI_ALTERNATE_BYTES_DTR_ENABLE ((uint32_t)OCTOSPI_CCR_ABDTR) /*!< DTR mode enabled for alternate bytes phase */ +/** + * @} + */ + +/** @defgroup OSPI_DataMode OSPI Data Mode + * @{ + */ +#define HAL_OSPI_DATA_NONE ((uint32_t)0x00000000U) /*!< No data */ +#define HAL_OSPI_DATA_1_LINE ((uint32_t)OCTOSPI_CCR_DMODE_0) /*!< Data on a single line */ +#define HAL_OSPI_DATA_2_LINES ((uint32_t)OCTOSPI_CCR_DMODE_1) /*!< Data on two lines */ +#define HAL_OSPI_DATA_4_LINES ((uint32_t)(OCTOSPI_CCR_DMODE_0 | OCTOSPI_CCR_DMODE_1)) /*!< Data on four lines */ +#define HAL_OSPI_DATA_8_LINES ((uint32_t)OCTOSPI_CCR_DMODE_2) /*!< Data on eight lines */ +/** + * @} + */ + +/** @defgroup OSPI_DataDtrMode OSPI Data DTR Mode + * @{ + */ +#define HAL_OSPI_DATA_DTR_DISABLE ((uint32_t)0x00000000U) /*!< DTR mode disabled for data phase */ +#define HAL_OSPI_DATA_DTR_ENABLE ((uint32_t)OCTOSPI_CCR_DDTR) /*!< DTR mode enabled for data phase */ +/** + * @} + */ + +/** @defgroup OSPI_DQSMode OSPI DQS Mode + * @{ + */ +#define HAL_OSPI_DQS_DISABLE ((uint32_t)0x00000000U) /*!< DQS disabled */ +#define HAL_OSPI_DQS_ENABLE ((uint32_t)OCTOSPI_CCR_DQSE) /*!< DQS enabled */ +/** + * @} + */ + +/** @defgroup OSPI_SIOOMode OSPI SIOO Mode + * @{ + */ +#define HAL_OSPI_SIOO_INST_EVERY_CMD ((uint32_t)0x00000000U) /*!< Send instruction on every transaction */ +#define HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD ((uint32_t)OCTOSPI_CCR_SIOO) /*!< Send instruction only for the first command */ +/** + * @} + */ + +/** @defgroup OSPI_WriteZeroLatency OSPI Hyperbus Write Zero Latency Activation + * @{ + */ +#define HAL_OSPI_LATENCY_ON_WRITE ((uint32_t)0x00000000U) /*!< Latency on write accesses */ +#define HAL_OSPI_NO_LATENCY_ON_WRITE ((uint32_t)OCTOSPI_HLCR_WZL) /*!< No latency on write accesses */ +/** + * @} + */ + +/** @defgroup OSPI_LatencyMode OSPI Hyperbus Latency Mode + * @{ + */ +#define HAL_OSPI_VARIABLE_LATENCY ((uint32_t)0x00000000U) /*!< Variable initial latency */ +#define HAL_OSPI_FIXED_LATENCY ((uint32_t)OCTOSPI_HLCR_LM) /*!< Fixed latency */ +/** + * @} + */ + +/** @defgroup OSPI_AddressSpace OSPI Hyperbus Address Space + * @{ + */ +#define HAL_OSPI_MEMORY_ADDRESS_SPACE ((uint32_t)0x00000000U) /*!< HyperBus memory mode */ +#define HAL_OSPI_REGISTER_ADDRESS_SPACE ((uint32_t)OCTOSPI_DCR1_MTYP_0) /*!< HyperBus register mode */ +/** + * @} + */ + +/** @defgroup OSPI_MatchMode OSPI Match Mode + * @{ + */ +#define HAL_OSPI_MATCH_MODE_AND ((uint32_t)0x00000000U) /*!< AND match mode between unmasked bits */ +#define HAL_OSPI_MATCH_MODE_OR ((uint32_t)OCTOSPI_CR_PMM) /*!< OR match mode between unmasked bits */ +/** + * @} + */ + +/** @defgroup OSPI_AutomaticStop OSPI Automatic Stop + * @{ + */ +#define HAL_OSPI_AUTOMATIC_STOP_DISABLE ((uint32_t)0x00000000U) /*!< AutoPolling stops only with abort or OSPI disabling */ +#define HAL_OSPI_AUTOMATIC_STOP_ENABLE ((uint32_t)OCTOSPI_CR_APMS) /*!< AutoPolling stops as soon as there is a match */ +/** + * @} + */ + +/** @defgroup OSPI_TimeOutActivation OSPI Timeout Activation + * @{ + */ +#define HAL_OSPI_TIMEOUT_COUNTER_DISABLE ((uint32_t)0x00000000U) /*!< Timeout counter disabled, nCS remains active */ +#define HAL_OSPI_TIMEOUT_COUNTER_ENABLE ((uint32_t)OCTOSPI_CR_TCEN) /*!< Timeout counter enabled, nCS released when timeout expires */ +/** + * @} + */ + +/** @defgroup OSPI_Flags OSPI Flags + * @{ + */ +#define HAL_OSPI_FLAG_BUSY OCTOSPI_SR_BUSY /*!< Busy flag: operation is ongoing */ +#define HAL_OSPI_FLAG_TO OCTOSPI_SR_TOF /*!< Timeout flag: timeout occurs in memory-mapped mode */ +#define HAL_OSPI_FLAG_SM OCTOSPI_SR_SMF /*!< Status match flag: received data matches in autopolling mode */ +#define HAL_OSPI_FLAG_FT OCTOSPI_SR_FTF /*!< Fifo threshold flag: Fifo threshold reached or data left after read from memory is complete */ +#define HAL_OSPI_FLAG_TC OCTOSPI_SR_TCF /*!< Transfer complete flag: programmed number of data have been transferred or the transfer has been aborted */ +#define HAL_OSPI_FLAG_TE OCTOSPI_SR_TEF /*!< Transfer error flag: invalid address is being accessed */ +/** + * @} + */ + +/** @defgroup OSPI_Interrupts OSPI Interrupts + * @{ + */ +#define HAL_OSPI_IT_TO OCTOSPI_CR_TOIE /*!< Interrupt on the timeout flag */ +#define HAL_OSPI_IT_SM OCTOSPI_CR_SMIE /*!< Interrupt on the status match flag */ +#define HAL_OSPI_IT_FT OCTOSPI_CR_FTIE /*!< Interrupt on the fifo threshold flag */ +#define HAL_OSPI_IT_TC OCTOSPI_CR_TCIE /*!< Interrupt on the transfer complete flag */ +#define HAL_OSPI_IT_TE OCTOSPI_CR_TEIE /*!< Interrupt on the transfer error flag */ +/** + * @} + */ + +/** @defgroup OSPI_Timeout_definition OSPI Timeout definition + * @{ + */ +#define HAL_OSPI_TIMEOUT_DEFAULT_VALUE ((uint32_t)5000U) /* 5 s */ +/** + * @} + */ + +/** @defgroup OSPIM_IOPort OSPI IO Manager IO Port + * @{ + */ +#define HAL_OSPIM_IOPORT_1_LOW ((uint32_t)(OCTOSPIM_PCR_IOLEN | 0x1)) /*!< Port 1 - IO[3:0] */ +#define HAL_OSPIM_IOPORT_1_HIGH ((uint32_t)(OCTOSPIM_PCR_IOHEN | 0x1)) /*!< Port 1 - IO[7:4] */ +#define HAL_OSPIM_IOPORT_2_LOW ((uint32_t)(OCTOSPIM_PCR_IOLEN | 0x2)) /*!< Port 2 - IO[3:0] */ +#define HAL_OSPIM_IOPORT_2_HIGH ((uint32_t)(OCTOSPIM_PCR_IOHEN | 0x2)) /*!< Port 2 - IO[7:4] */ +/** + * @} + */ +/** + * @} + */ + +/* Exported macros -----------------------------------------------------------*/ +/** @defgroup OSPI_Exported_Macros OSPI Exported Macros + * @{ + */ +/** @brief Reset OSPI handle state. + * @param __HANDLE__: OSPI handle. + * @retval None + */ +#define __HAL_OSPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_OSPI_STATE_RESET) + +/** @brief Enable the OSPI peripheral. + * @param __HANDLE__: specifies the OSPI Handle. + * @retval None + */ +#define __HAL_OSPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, OCTOSPI_CR_EN) + +/** @brief Disable the OSPI peripheral. + * @param __HANDLE__: specifies the OSPI Handle. + * @retval None + */ +#define __HAL_OSPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR, OCTOSPI_CR_EN) + +/** @brief Enable the specified OSPI interrupt. + * @param __HANDLE__: specifies the OSPI Handle. + * @param __INTERRUPT__: specifies the OSPI interrupt source to enable. + * This parameter can be one of the following values: + * @arg HAL_OSPI_IT_TO: OSPI Timeout interrupt + * @arg HAL_OSPI_IT_SM: OSPI Status match interrupt + * @arg HAL_OSPI_IT_FT: OSPI FIFO threshold interrupt + * @arg HAL_OSPI_IT_TC: OSPI Transfer complete interrupt + * @arg HAL_OSPI_IT_TE: OSPI Transfer error interrupt + * @retval None + */ +#define __HAL_OSPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) + + +/** @brief Disable the specified OSPI interrupt. + * @param __HANDLE__: specifies the OSPI Handle. + * @param __INTERRUPT__: specifies the OSPI interrupt source to disable. + * This parameter can be one of the following values: + * @arg HAL_OSPI_IT_TO: OSPI Timeout interrupt + * @arg HAL_OSPI_IT_SM: OSPI Status match interrupt + * @arg HAL_OSPI_IT_FT: OSPI FIFO threshold interrupt + * @arg HAL_OSPI_IT_TC: OSPI Transfer complete interrupt + * @arg HAL_OSPI_IT_TE: OSPI Transfer error interrupt + * @retval None + */ +#define __HAL_OSPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) + +/** @brief Check whether the specified OSPI interrupt source is enabled or not. + * @param __HANDLE__: specifies the OSPI Handle. + * @param __INTERRUPT__: specifies the OSPI interrupt source to check. + * This parameter can be one of the following values: + * @arg HAL_OSPI_IT_TO: OSPI Timeout interrupt + * @arg HAL_OSPI_IT_SM: OSPI Status match interrupt + * @arg HAL_OSPI_IT_FT: OSPI FIFO threshold interrupt + * @arg HAL_OSPI_IT_TC: OSPI Transfer complete interrupt + * @arg HAL_OSPI_IT_TE: OSPI Transfer error interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_OSPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (READ_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) == (__INTERRUPT__)) + +/** + * @brief Check whether the selected OSPI flag is set or not. + * @param __HANDLE__: specifies the OSPI Handle. + * @param __FLAG__: specifies the OSPI flag to check. + * This parameter can be one of the following values: + * @arg HAL_OSPI_FLAG_BUSY: OSPI Busy flag + * @arg HAL_OSPI_FLAG_TO: OSPI Timeout flag + * @arg HAL_OSPI_FLAG_SM: OSPI Status match flag + * @arg HAL_OSPI_FLAG_FT: OSPI FIFO threshold flag + * @arg HAL_OSPI_FLAG_TC: OSPI Transfer complete flag + * @arg HAL_OSPI_FLAG_TE: OSPI Transfer error flag + * @retval None + */ +#define __HAL_OSPI_GET_FLAG(__HANDLE__, __FLAG__) ((READ_BIT((__HANDLE__)->Instance->SR, (__FLAG__)) != 0) ? SET : RESET) + +/** @brief Clears the specified OSPI's flag status. + * @param __HANDLE__: specifies the OSPI Handle. + * @param __FLAG__: specifies the OSPI clear register flag that needs to be set + * This parameter can be one of the following values: + * @arg HAL_OSPI_FLAG_TO: OSPI Timeout flag + * @arg HAL_OSPI_FLAG_SM: OSPI Status match flag + * @arg HAL_OSPI_FLAG_TC: OSPI Transfer complete flag + * @arg HAL_OSPI_FLAG_TE: OSPI Transfer error flag + * @retval None + */ +#define __HAL_OSPI_CLEAR_FLAG(__HANDLE__, __FLAG__) WRITE_REG((__HANDLE__)->Instance->FCR, (__FLAG__)) + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup OSPI_Exported_Functions + * @{ + */ + +/* Initialization/de-initialization functions ********************************/ +/** @addtogroup OSPI_Exported_Functions_Group1 + * @{ + */ +HAL_StatusTypeDef HAL_OSPI_Init (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_MspInit (OSPI_HandleTypeDef *hospi); +HAL_StatusTypeDef HAL_OSPI_DeInit (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_MspDeInit (OSPI_HandleTypeDef *hospi); + +/** + * @} + */ + +/* IO operation functions *****************************************************/ +/** @addtogroup OSPI_Exported_Functions_Group2 + * @{ + */ +/* OSPI IRQ handler function */ +void HAL_OSPI_IRQHandler (OSPI_HandleTypeDef *hospi); + +/* OSPI command configuration functions */ +HAL_StatusTypeDef HAL_OSPI_Command (OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd, uint32_t Timeout); +HAL_StatusTypeDef HAL_OSPI_Command_IT (OSPI_HandleTypeDef *hospi, OSPI_RegularCmdTypeDef *cmd); +HAL_StatusTypeDef HAL_OSPI_HyperbusCfg (OSPI_HandleTypeDef *hospi, OSPI_HyperbusCfgTypeDef *cfg, uint32_t Timeout); +HAL_StatusTypeDef HAL_OSPI_HyperbusCmd (OSPI_HandleTypeDef *hospi, OSPI_HyperbusCmdTypeDef *cmd, uint32_t Timeout); + +/* OSPI indirect mode functions */ +HAL_StatusTypeDef HAL_OSPI_Transmit (OSPI_HandleTypeDef *hospi, uint8_t *pData, uint32_t Timeout); +HAL_StatusTypeDef HAL_OSPI_Receive (OSPI_HandleTypeDef *hospi, uint8_t *pData, uint32_t Timeout); +HAL_StatusTypeDef HAL_OSPI_Transmit_IT (OSPI_HandleTypeDef *hospi, uint8_t *pData); +HAL_StatusTypeDef HAL_OSPI_Receive_IT (OSPI_HandleTypeDef *hospi, uint8_t *pData); +HAL_StatusTypeDef HAL_OSPI_Transmit_DMA (OSPI_HandleTypeDef *hospi, uint8_t *pData); +HAL_StatusTypeDef HAL_OSPI_Receive_DMA (OSPI_HandleTypeDef *hospi, uint8_t *pData); + +/* OSPI status flag polling mode functions */ +HAL_StatusTypeDef HAL_OSPI_AutoPolling (OSPI_HandleTypeDef *hospi, OSPI_AutoPollingTypeDef *cfg, uint32_t Timeout); +HAL_StatusTypeDef HAL_OSPI_AutoPolling_IT (OSPI_HandleTypeDef *hospi, OSPI_AutoPollingTypeDef *cfg); + +/* OSPI memory-mapped mode functions */ +HAL_StatusTypeDef HAL_OSPI_MemoryMapped (OSPI_HandleTypeDef *hospi, OSPI_MemoryMappedTypeDef *cfg); + +/* Callback functions in non-blocking modes ***********************************/ +void HAL_OSPI_ErrorCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_AbortCpltCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_FifoThresholdCallback(OSPI_HandleTypeDef *hospi); + +/* OSPI indirect mode functions */ +void HAL_OSPI_CmdCpltCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_RxCpltCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_TxCpltCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_RxHalfCpltCallback (OSPI_HandleTypeDef *hospi); +void HAL_OSPI_TxHalfCpltCallback (OSPI_HandleTypeDef *hospi); + +/* OSPI status flag polling mode functions */ +void HAL_OSPI_StatusMatchCallback (OSPI_HandleTypeDef *hospi); + +/* OSPI memory-mapped mode functions */ +void HAL_OSPI_TimeOutCallback (OSPI_HandleTypeDef *hospi); + +/** + * @} + */ + +/* Peripheral Control and State functions ************************************/ +/** @addtogroup OSPI_Exported_Functions_Group3 + * @{ + */ +HAL_StatusTypeDef HAL_OSPI_Abort (OSPI_HandleTypeDef *hospi); +HAL_StatusTypeDef HAL_OSPI_Abort_IT (OSPI_HandleTypeDef *hospi); +HAL_StatusTypeDef HAL_OSPI_SetFifoThreshold (OSPI_HandleTypeDef *hospi, uint32_t Threshold); +uint32_t HAL_OSPI_GetFifoThreshold (OSPI_HandleTypeDef *hospi); +HAL_StatusTypeDef HAL_OSPI_SetTimeout (OSPI_HandleTypeDef *hospi, uint32_t Timeout); +uint32_t HAL_OSPI_GetError (OSPI_HandleTypeDef *hospi); +uint32_t HAL_OSPI_GetState (OSPI_HandleTypeDef *hospi); + +/** + * @} + */ + +/* OSPI IO Manager configuration function ************************************/ +/** @addtogroup OSPI_Exported_Functions_Group4 + * @{ + */ +HAL_StatusTypeDef HAL_OSPIM_Config (OSPI_HandleTypeDef *hospi, OSPIM_CfgTypeDef *cfg, uint32_t Timeout); + +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** + @cond 0 + */ +#define IS_OSPI_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) >= 1) && ((THRESHOLD) <= 32)) + +#define IS_OSPI_DUALQUAD_MODE(MODE) (((MODE) == HAL_OSPI_DUALQUAD_DISABLE) || \ + ((MODE) == HAL_OSPI_DUALQUAD_ENABLE)) + +#define IS_OSPI_MEMORY_TYPE(TYPE) (((TYPE) == HAL_OSPI_MEMTYPE_MICRON) || \ + ((TYPE) == HAL_OSPI_MEMTYPE_MACRONIX) || \ + ((TYPE) == HAL_OSPI_MEMTYPE_HYPERBUS)) + +#define IS_OSPI_DEVICE_SIZE(SIZE) (((SIZE) >= 1) && ((SIZE) <= 32)) + +#define IS_OSPI_CS_HIGH_TIME(TIME) (((TIME) >= 1) && ((TIME) <= 8)) + +#define IS_OSPI_FREE_RUN_CLK(CLK) (((CLK) == HAL_OSPI_FREERUNCLK_DISABLE) || \ + ((CLK) == HAL_OSPI_FREERUNCLK_ENABLE)) + +#define IS_OSPI_CLOCK_MODE(MODE) (((MODE) == HAL_OSPI_CLOCK_MODE_0) || \ + ((MODE) == HAL_OSPI_CLOCK_MODE_3)) + +#define IS_OSPI_WRAP_SIZE(SIZE) (((SIZE) == HAL_OSPI_WRAP_NOT_SUPPORTED) || \ + ((SIZE) == HAL_OSPI_WRAP_16_BYTES) || \ + ((SIZE) == HAL_OSPI_WRAP_32_BYTES) || \ + ((SIZE) == HAL_OSPI_WRAP_64_BYTES) || \ + ((SIZE) == HAL_OSPI_WRAP_128_BYTES)) + +#define IS_OSPI_CLK_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 256)) + +#define IS_OSPI_SAMPLE_SHIFTING(CYCLE) (((CYCLE) == HAL_OSPI_SAMPLE_SHIFTING_NONE) || \ + ((CYCLE) == HAL_OSPI_SAMPLE_SHIFTING_HALFCYCLE)) + +#define IS_OSPI_DHQC(CYCLE) (((CYCLE) == HAL_OSPI_DHQC_DISABLE) || \ + ((CYCLE) == HAL_OSPI_DHQC_ENABLE)) + +#define IS_OSPI_OPERATION_TYPE(TYPE) (((TYPE) == HAL_OSPI_OPTYPE_COMMON_CFG) || \ + ((TYPE) == HAL_OSPI_OPTYPE_READ_CFG) || \ + ((TYPE) == HAL_OSPI_OPTYPE_WRITE_CFG)) + +#define IS_OSPI_FLASH_ID(FLASH) (((FLASH) == HAL_OSPI_FLASH_ID_1) || \ + ((FLASH) == HAL_OSPI_FLASH_ID_2)) + +#define IS_OSPI_INSTRUCTION_MODE(MODE) (((MODE) == HAL_OSPI_INSTRUCTION_NONE) || \ + ((MODE) == HAL_OSPI_INSTRUCTION_1_LINE) || \ + ((MODE) == HAL_OSPI_INSTRUCTION_2_LINES) || \ + ((MODE) == HAL_OSPI_INSTRUCTION_4_LINES) || \ + ((MODE) == HAL_OSPI_INSTRUCTION_8_LINES)) + +#define IS_OSPI_INSTRUCTION_SIZE(SIZE) (((SIZE) == HAL_OSPI_INSTRUCTION_8_BITS) || \ + ((SIZE) == HAL_OSPI_INSTRUCTION_16_BITS) || \ + ((SIZE) == HAL_OSPI_INSTRUCTION_24_BITS) || \ + ((SIZE) == HAL_OSPI_INSTRUCTION_32_BITS)) + +#define IS_OSPI_INSTRUCTION_DTR_MODE(MODE) (((MODE) == HAL_OSPI_INSTRUCTION_DTR_DISABLE) || \ + ((MODE) == HAL_OSPI_INSTRUCTION_DTR_ENABLE)) + +#define IS_OSPI_ADDRESS_MODE(MODE) (((MODE) == HAL_OSPI_ADDRESS_NONE) || \ + ((MODE) == HAL_OSPI_ADDRESS_1_LINE) || \ + ((MODE) == HAL_OSPI_ADDRESS_2_LINES) || \ + ((MODE) == HAL_OSPI_ADDRESS_4_LINES) || \ + ((MODE) == HAL_OSPI_ADDRESS_8_LINES)) + +#define IS_OSPI_ADDRESS_SIZE(SIZE) (((SIZE) == HAL_OSPI_ADDRESS_8_BITS) || \ + ((SIZE) == HAL_OSPI_ADDRESS_16_BITS) || \ + ((SIZE) == HAL_OSPI_ADDRESS_24_BITS) || \ + ((SIZE) == HAL_OSPI_ADDRESS_32_BITS)) + +#define IS_OSPI_ADDRESS_DTR_MODE(MODE) (((MODE) == HAL_OSPI_ADDRESS_DTR_DISABLE) || \ + ((MODE) == HAL_OSPI_ADDRESS_DTR_ENABLE)) + +#define IS_OSPI_ALT_BYTES_MODE(MODE) (((MODE) == HAL_OSPI_ALTERNATE_BYTES_NONE) || \ + ((MODE) == HAL_OSPI_ALTERNATE_BYTES_1_LINE) || \ + ((MODE) == HAL_OSPI_ALTERNATE_BYTES_2_LINES) || \ + ((MODE) == HAL_OSPI_ALTERNATE_BYTES_4_LINES) || \ + ((MODE) == HAL_OSPI_ALTERNATE_BYTES_8_LINES)) + +#define IS_OSPI_ALT_BYTES_SIZE(SIZE) (((SIZE) == HAL_OSPI_ALTERNATE_BYTES_8_BITS) || \ + ((SIZE) == HAL_OSPI_ALTERNATE_BYTES_16_BITS) || \ + ((SIZE) == HAL_OSPI_ALTERNATE_BYTES_24_BITS) || \ + ((SIZE) == HAL_OSPI_ALTERNATE_BYTES_32_BITS)) + +#define IS_OSPI_ALT_BYTES_DTR_MODE(MODE) (((MODE) == HAL_OSPI_ALTERNATE_BYTES_DTR_DISABLE) || \ + ((MODE) == HAL_OSPI_ALTERNATE_BYTES_DTR_ENABLE)) + +#define IS_OSPI_DATA_MODE(MODE) (((MODE) == HAL_OSPI_DATA_NONE) || \ + ((MODE) == HAL_OSPI_DATA_1_LINE) || \ + ((MODE) == HAL_OSPI_DATA_2_LINES) || \ + ((MODE) == HAL_OSPI_DATA_4_LINES) || \ + ((MODE) == HAL_OSPI_DATA_8_LINES)) + +#define IS_OSPI_NUMBER_DATA(NUMBER) ((NUMBER) >= 1) + +#define IS_OSPI_DATA_DTR_MODE(MODE) (((MODE) == HAL_OSPI_DATA_DTR_DISABLE) || \ + ((MODE) == HAL_OSPI_DATA_DTR_ENABLE)) + +#define IS_OSPI_DUMMY_CYCLES(NUMBER) ((NUMBER) <= 31) + +#define IS_OSPI_DQS_MODE(MODE) (((MODE) == HAL_OSPI_DQS_DISABLE) || \ + ((MODE) == HAL_OSPI_DQS_ENABLE)) + +#define IS_OSPI_SIOO_MODE(MODE) (((MODE) == HAL_OSPI_SIOO_INST_EVERY_CMD) || \ + ((MODE) == HAL_OSPI_SIOO_INST_ONLY_FIRST_CMD)) + +#define IS_OSPI_RW_RECOVERY_TIME(NUMBER) ((NUMBER) <= 255) + +#define IS_OSPI_ACCESS_TIME(NUMBER) ((NUMBER) <= 255) + +#define IS_OSPI_WRITE_ZERO_LATENCY(MODE) (((MODE) == HAL_OSPI_LATENCY_ON_WRITE) || \ + ((MODE) == HAL_OSPI_NO_LATENCY_ON_WRITE)) + +#define IS_OSPI_LATENCY_MODE(MODE) (((MODE) == HAL_OSPI_VARIABLE_LATENCY) || \ + ((MODE) == HAL_OSPI_FIXED_LATENCY)) + +#define IS_OSPI_ADDRESS_SPACE(SPACE) (((SPACE) == HAL_OSPI_MEMORY_ADDRESS_SPACE) || \ + ((SPACE) == HAL_OSPI_REGISTER_ADDRESS_SPACE)) + +#define IS_OSPI_MATCH_MODE(MODE) (((MODE) == HAL_OSPI_MATCH_MODE_AND) || \ + ((MODE) == HAL_OSPI_MATCH_MODE_OR)) + +#define IS_OSPI_AUTOMATIC_STOP(MODE) (((MODE) == HAL_OSPI_AUTOMATIC_STOP_ENABLE) || \ + ((MODE) == HAL_OSPI_AUTOMATIC_STOP_DISABLE)) + +#define IS_OSPI_INTERVAL(INTERVAL) ((INTERVAL) <= 0xFFFF) + +#define IS_OSPI_STATUS_BYTES_SIZE(SIZE) (((SIZE) >= 1) && ((SIZE) <= 4)) + +#define IS_OSPI_TIMEOUT_ACTIVATION(MODE) (((MODE) == HAL_OSPI_TIMEOUT_COUNTER_DISABLE) || \ + ((MODE) == HAL_OSPI_TIMEOUT_COUNTER_ENABLE)) + +#define IS_OSPI_TIMEOUT_PERIOD(PERIOD) ((PERIOD) <= 0xFFFF) + +#define IS_OSPI_CS_BOUNDARY(BOUNDARY) ((BOUNDARY) <= 31) + +#define IS_OSPIM_PORT(NUMBER) (((NUMBER) >= 1) && ((NUMBER) <= 2)) + +#define IS_OSPIM_IO_PORT(PORT) (((PORT) == HAL_OSPIM_IOPORT_1_LOW) || \ + ((PORT) == HAL_OSPIM_IOPORT_1_HIGH) || \ + ((PORT) == HAL_OSPIM_IOPORT_2_LOW) || \ + ((PORT) == HAL_OSPIM_IOPORT_2_HIGH)) +/** + @endcond + */ + +/* End of private macros -----------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* OCTOSPI || OCTOSPI1 || OCTOSPI2 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_OSPI_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c index 34cf7ec987..0d8687fa8e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pcd.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief PCD HAL module driver. * This file provides firmware functions to manage the following * functionalities of the USB Peripheral Controller: @@ -87,7 +85,8 @@ #if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ @@ -1667,7 +1666,8 @@ static HAL_StatusTypeDef PCD_EP_ISR_Handler(PCD_HandleTypeDef *hpcd) #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* HAL_PCD_MODULE_ENABLED */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h index 01be38c5fd..6db33ba463 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pcd.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of PCD HAL module. ****************************************************************************** * @attention @@ -46,7 +44,8 @@ #if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_usb.h" @@ -867,7 +866,8 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.c index d90cf064cb..8a3cc9a345 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pcd_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief PCD Extended HAL module driver. * This file provides firmware functions to manage the following * functionalities of the USB Peripheral Controller: @@ -45,18 +43,20 @@ /** @addtogroup STM32L4xx_HAL_Driver * @{ */ -#ifdef HAL_PCD_MODULE_ENABLED - -#if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ - defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) /** @defgroup PCDEx PCDEx * @brief PCD Extended HAL module driver * @{ */ +#ifdef HAL_PCD_MODULE_ENABLED + +#if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ + defined(STM32L452xx) || defined(STM32L462xx) || \ + defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private constants ---------------------------------------------------------*/ @@ -500,13 +500,6 @@ __weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef m * @} */ -/** - * @} - */ -/** - * @} - */ - /** * @} */ @@ -514,8 +507,17 @@ __weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef m #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* HAL_PCD_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.h index 45054ab320..f27c8b6a4a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pcd_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of PCD HAL module. ****************************************************************************** * @attention @@ -46,7 +44,8 @@ #if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -124,7 +123,8 @@ void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.c index 0ba3d39d61..3f5877b4d9 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pwr.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief PWR HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Power Controller (PWR) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.h index 7a2b6ae546..f33df34e85 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pwr.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of PWR HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.c index 9280365e54..1c08c0feff 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pwr_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended PWR HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Power Controller (PWR) peripheral: @@ -63,11 +61,11 @@ #define PWR_PORTH_AVAILABLE_PINS ((uint32_t)0x0000000B) /* PH0/PH1/PH3 */ #elif defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) #define PWR_PORTH_AVAILABLE_PINS ((uint32_t)0x00000003) /* PH0/PH1 */ -#elif defined (STM32L496xx) || defined (STM32L4A6xx) +#elif defined (STM32L496xx) || defined (STM32L4A6xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define PWR_PORTH_AVAILABLE_PINS ((uint32_t)0x0000FFFF) /* PH0..PH15 */ #endif -#if defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L496xx) || defined (STM32L4A6xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define PWR_PORTI_AVAILABLE_PINS ((uint32_t)0x00000FFF) /* PI0..PI11 */ #endif @@ -127,11 +125,28 @@ /** * @brief Return Voltage Scaling Range. - * @retval VOS bit field (PWR_REGULATOR_VOLTAGE_RANGE1 or PWR_REGULATOR_VOLTAGE_RANGE2) + * @retval VOS bit field (PWR_REGULATOR_VOLTAGE_RANGE1 or PWR_REGULATOR_VOLTAGE_RANGE2 + * or PWR_REGULATOR_VOLTAGE_SCALE1_BOOST when applicable) */ uint32_t HAL_PWREx_GetVoltageRange(void) { +#if defined(PWR_CR5_R1MODE) + if (READ_BIT(PWR->CR1, PWR_CR1_VOS) == PWR_REGULATOR_VOLTAGE_SCALE2) + { + return PWR_REGULATOR_VOLTAGE_SCALE2; + } + else if (READ_BIT(PWR->CR5, PWR_CR5_R1MODE) == PWR_CR5_R1MODE) + { + /* PWR_CR5_R1MODE bit set means that Range 1 Boost is disabled */ + return PWR_REGULATOR_VOLTAGE_SCALE1; + } + else + { + return PWR_REGULATOR_VOLTAGE_SCALE1_BOOST; + } +#else return (PWR->CR1 & PWR_CR1_VOS); +#endif } @@ -141,6 +156,11 @@ uint32_t HAL_PWREx_GetVoltageRange(void) * @param VoltageScaling: specifies the regulator output voltage to achieve * a tradeoff between performance and power consumption. * This parameter can be one of the following values: + @if STM32L4S9xx + * @arg @ref PWR_REGULATOR_VOLTAGE_SCALE1_BOOST when available, Regulator voltage output range 1 boost mode, + * typical output voltage at 1.2 V, + * system frequency up to 120 MHz. + @endif * @arg @ref PWR_REGULATOR_VOLTAGE_SCALE1 Regulator voltage output range 1 mode, * typical output voltage at 1.2 V, * system frequency up to 80 MHz. @@ -150,7 +170,8 @@ uint32_t HAL_PWREx_GetVoltageRange(void) * @note When moving from Range 1 to Range 2, the system frequency must be decreased to * a value below 26 MHz before calling HAL_PWREx_ControlVoltageScaling() API. * When moving from Range 2 to Range 1, the system frequency can be increased to - * a value up to 80 MHz after calling HAL_PWREx_ControlVoltageScaling() API. + * a value up to 80 MHz after calling HAL_PWREx_ControlVoltageScaling() API. For + * some devices, the system frequency can be increased up to 120 MHz. * @note When moving from Range 2 to Range 1, the API waits for VOSF flag to be * cleared before returning the status. If the flag is not cleared within * 50 microseconds, HAL_TIMEOUT status is reported. @@ -161,7 +182,76 @@ HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) uint32_t wait_loop_index = 0; assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling)); + +#if defined(PWR_CR5_R1MODE) + if (VoltageScaling == PWR_REGULATOR_VOLTAGE_SCALE1_BOOST) + { + /* If current range is range 2 */ + if (READ_BIT(PWR->CR1, PWR_CR1_VOS) == PWR_REGULATOR_VOLTAGE_SCALE2) + { + /* Make sure Range 1 Boost is enabled */ + CLEAR_BIT(PWR->CR5, PWR_CR5_R1MODE); + + /* Set Range 1 */ + MODIFY_REG(PWR->CR1, PWR_CR1_VOS, PWR_REGULATOR_VOLTAGE_SCALE1); + + /* Wait until VOSF is cleared */ + wait_loop_index = (PWR_FLAG_SETTING_DELAY_US * (SystemCoreClock / 1000000)); + while ((wait_loop_index != 0) && (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_VOSF))) + { + wait_loop_index--; + } + if (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_VOSF)) + { + return HAL_TIMEOUT; + } + } + /* If current range is range 1 normal or boost mode */ + else + { + /* Enable Range 1 Boost (no issue if bit already reset) */ + CLEAR_BIT(PWR->CR5, PWR_CR5_R1MODE); + } + } + else if (VoltageScaling == PWR_REGULATOR_VOLTAGE_SCALE1) + { + /* If current range is range 2 */ + if (READ_BIT(PWR->CR1, PWR_CR1_VOS) == PWR_REGULATOR_VOLTAGE_SCALE2) + { + /* Make sure Range 1 Boost is disabled */ + SET_BIT(PWR->CR5, PWR_CR5_R1MODE); + + /* Set Range 1 */ + MODIFY_REG(PWR->CR1, PWR_CR1_VOS, PWR_REGULATOR_VOLTAGE_SCALE1); + + /* Wait until VOSF is cleared */ + wait_loop_index = (PWR_FLAG_SETTING_DELAY_US * (SystemCoreClock / 1000000)); + while ((wait_loop_index != 0) && (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_VOSF))) + { + wait_loop_index--; + } + if (HAL_IS_BIT_SET(PWR->SR2, PWR_SR2_VOSF)) + { + return HAL_TIMEOUT; + } + } + /* If current range is range 1 normal or boost mode */ + else + { + /* Disable Range 1 Boost (no issue if bit already set) */ + SET_BIT(PWR->CR5, PWR_CR5_R1MODE); + } + } + else + { + /* Set Range 2 */ + MODIFY_REG(PWR->CR1, PWR_CR1_VOS, PWR_REGULATOR_VOLTAGE_SCALE2); + /* No need to wait for VOSF to be cleared for this transition */ + /* PWR_CR5_R1MODE bit setting has no effect in Range 2 */ + } +#else + /* If Set Range 1 */ if (VoltageScaling == PWR_REGULATOR_VOLTAGE_SCALE1) { @@ -191,6 +281,7 @@ HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling) /* No need to wait for VOSF to be cleared for this transition */ } } +#endif return HAL_OK; } @@ -658,8 +749,52 @@ void HAL_PWREx_DisableSRAM2ContentRetention(void) } +#if defined(PWR_CR1_RRSTP) +/** + * @brief Enable SRAM3 content retention in Stop 2 mode. + * @note When RRSTP bit is set, SRAM3 is powered by the low-power regulator in + * Stop 2 mode and its content is kept. + * @retval None + */ +void HAL_PWREx_EnableSRAM3ContentRetention(void) +{ + SET_BIT(PWR->CR1, PWR_CR1_RRSTP); +} +/** + * @brief Disable SRAM3 content retention in Stop 2 mode. + * @note When RRSTP bit is reset, SRAM3 is powered off in Stop 2 mode + * and its content is lost. + * @retval None + */ +void HAL_PWREx_DisableSRAM3ContentRetention(void) +{ + CLEAR_BIT(PWR->CR1, PWR_CR1_RRSTP); +} +#endif /* PWR_CR1_RRSTP */ + +#if defined(PWR_CR3_DSIPDEN) +/** + * @brief Enable pull-down activation on DSI pins. + * @retval None + */ +void HAL_PWREx_EnableDSIPinsPDActivation(void) +{ + SET_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} + + +/** + * @brief Disable pull-down activation on DSI pins. + * @retval None + */ +void HAL_PWREx_DisableDSIPinsPDActivation(void) +{ + CLEAR_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} +#endif /* PWR_CR3_DSIPDEN */ + #if defined(PWR_CR2_PVME1) /** * @brief Enable the Power Voltage Monitoring 1: VDDUSB versus 1.2V. diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.h index 8d044036c2..2830478169 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pwr_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_pwr_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of PWR HAL Extended module. ****************************************************************************** * @attention @@ -155,8 +153,11 @@ typedef struct /** @defgroup PWREx_Regulator_Voltage_Scale PWR Regulator voltage scale * @{ */ -#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR1_VOS_0 /*!< Voltage scaling range 1 */ -#define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_CR1_VOS_1 /*!< Voltage scaling range 2 */ +#if defined(PWR_CR5_R1MODE) +#define PWR_REGULATOR_VOLTAGE_SCALE1_BOOST ((uint32_t)0x00000000) /*!< Voltage scaling range 1 boost mode */ +#endif +#define PWR_REGULATOR_VOLTAGE_SCALE1 PWR_CR1_VOS_0 /*!< Voltage scaling range 1 normal mode */ +#define PWR_REGULATOR_VOLTAGE_SCALE2 PWR_CR1_VOS_1 /*!< Voltage scaling range 2 */ /** * @} */ @@ -717,7 +718,8 @@ typedef struct ((PIN) == PWR_WAKEUP_PIN5_LOW)) #if defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_PWR_PVM_TYPE(TYPE) (((TYPE) == PWR_PVM_1) ||\ ((TYPE) == PWR_PVM_2) ||\ ((TYPE) == PWR_PVM_3) ||\ @@ -745,8 +747,15 @@ typedef struct ((MODE) == PWR_PVM_MODE_EVENT_FALLING) ||\ ((MODE) == PWR_PVM_MODE_EVENT_RISING_FALLING)) +#if defined(PWR_CR5_R1MODE) +#define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1_BOOST) || \ + ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ + ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2)) +#else #define IS_PWR_VOLTAGE_SCALING_RANGE(RANGE) (((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ ((RANGE) == PWR_REGULATOR_VOLTAGE_SCALE2)) +#endif + #define IS_PWR_BATTERY_RESISTOR_SELECT(RESISTOR) (((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_5) ||\ ((RESISTOR) == PWR_BATTERY_CHARGING_RESISTOR_1_5)) @@ -779,7 +788,8 @@ typedef struct ((GPIO) == PWR_GPIO_F) ||\ ((GPIO) == PWR_GPIO_G) ||\ ((GPIO) == PWR_GPIO_H)) -#elif defined (STM32L496xx) || defined (STM32L4A6xx) +#elif defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_PWR_GPIO(GPIO) (((GPIO) == PWR_GPIO_A) ||\ ((GPIO) == PWR_GPIO_B) ||\ ((GPIO) == PWR_GPIO_C) ||\ @@ -829,6 +839,14 @@ void HAL_PWREx_EnablePullUpPullDownConfig(void); void HAL_PWREx_DisablePullUpPullDownConfig(void); void HAL_PWREx_EnableSRAM2ContentRetention(void); void HAL_PWREx_DisableSRAM2ContentRetention(void); +#if defined(PWR_CR1_RRSTP) +void HAL_PWREx_EnableSRAM3ContentRetention(void); +void HAL_PWREx_DisableSRAM3ContentRetention(void); +#endif /* PWR_CR1_RRSTP */ +#if defined(PWR_CR3_DSIPDEN) +void HAL_PWREx_EnableDSIPinsPDActivation(void); +void HAL_PWREx_DisableDSIPinsPDActivation(void); +#endif /* PWR_CR3_DSIPDEN */ #if defined(PWR_CR2_PVME1) void HAL_PWREx_EnablePVM1(void); void HAL_PWREx_DisablePVM1(void); diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.c index 1beb35b41d..27ae77c567 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_qspi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief QSPI HAL module driver. * This file provides firmware functions to manage the following * functionalities of the QuadSPI interface (QSPI). @@ -168,6 +166,8 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal.h" +#if defined(QUADSPI) || defined(QUADSPI1) || defined(QUADSPI2) + /** @addtogroup STM32L4xx_HAL_Driver * @{ */ @@ -241,7 +241,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /** * @brief Initialize the QSPI mode according to the specified parameters * in the QSPI_InitTypeDef and initialize the associated handle. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval HAL status */ HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi) @@ -263,9 +263,7 @@ HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi) assert_param(IS_QSPI_FLASH_SIZE(hqspi->Init.FlashSize)); assert_param(IS_QSPI_CS_HIGH_TIME(hqspi->Init.ChipSelectHighTime)); assert_param(IS_QSPI_CLOCK_MODE(hqspi->Init.ClockMode)); -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CR_DFM) assert_param(IS_QSPI_DUAL_FLASH_MODE(hqspi->Init.DualFlash)); if (hqspi->Init.DualFlash != QSPI_DUALFLASH_ENABLE ) @@ -291,7 +289,7 @@ HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi) /* Configure QSPI FIFO Threshold */ MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, - ((hqspi->Init.FifoThreshold - 1) << POSITION_VAL(QUADSPI_CR_FTHRES))); + ((hqspi->Init.FifoThreshold - 1) << QUADSPI_CR_FTHRES_Pos)); /* Wait till BUSY flag reset */ status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); @@ -299,21 +297,19 @@ HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi) if(status == HAL_OK) { /* Configure QSPI Clock Prescaler and Sample Shift */ -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CR_DFM) MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT | QUADSPI_CR_FSEL | QUADSPI_CR_DFM), - ((hqspi->Init.ClockPrescaler << POSITION_VAL(QUADSPI_CR_PRESCALER)) | + ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) | hqspi->Init.SampleShifting | hqspi->Init.FlashID | hqspi->Init.DualFlash)); #else MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT), - ((hqspi->Init.ClockPrescaler << POSITION_VAL(QUADSPI_CR_PRESCALER)) | + ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) | hqspi->Init.SampleShifting)); #endif /* Configure QSPI Flash Size, CS High Time and Clock Mode */ MODIFY_REG(hqspi->Instance->DCR, (QUADSPI_DCR_FSIZE | QUADSPI_DCR_CSHT | QUADSPI_DCR_CKMODE), - ((hqspi->Init.FlashSize << POSITION_VAL(QUADSPI_DCR_FSIZE)) | + ((hqspi->Init.FlashSize << QUADSPI_DCR_FSIZE_Pos) | hqspi->Init.ChipSelectHighTime | hqspi->Init.ClockMode)); /* Enable the QSPI peripheral */ @@ -335,7 +331,7 @@ HAL_StatusTypeDef HAL_QSPI_Init(QSPI_HandleTypeDef *hqspi) /** * @brief De-Initialize the QSPI peripheral. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval HAL status */ HAL_StatusTypeDef HAL_QSPI_DeInit(QSPI_HandleTypeDef *hqspi) @@ -369,10 +365,10 @@ HAL_StatusTypeDef HAL_QSPI_DeInit(QSPI_HandleTypeDef *hqspi) /** * @brief Initialize the QSPI MSP. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ -__weak void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) + __weak void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) { /* Prevent unused argument(s) compilation warning */ UNUSED(hqspi); @@ -384,10 +380,10 @@ __weak void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) /** * @brief DeInitialize the QSPI MSP. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ -__weak void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi) + __weak void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi) { /* Prevent unused argument(s) compilation warning */ UNUSED(hqspi); @@ -423,7 +419,7 @@ __weak void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi) /** * @brief Handle QSPI interrupt request. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) @@ -433,7 +429,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) uint32_t itsource = READ_REG(hqspi->Instance->CR); /* QSPI Fifo Threshold interrupt occurred ----------------------------------*/ - if((flag & QSPI_FLAG_FT) && (itsource & QSPI_IT_FT)) + if(((flag & QSPI_FLAG_FT) != 0) && ((itsource & QSPI_IT_FT) !=0 )) { data_reg = &hqspi->Instance->DR; @@ -445,7 +441,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) if (hqspi->TxXferCount > 0) { /* Fill the FIFO until the threshold is reached */ - *(__IO uint8_t *)data_reg = *hqspi->pTxBuffPtr++; + *(__IO uint8_t *)((__IO void *)data_reg) = *hqspi->pTxBuffPtr++; hqspi->TxXferCount--; } else @@ -465,7 +461,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) if (hqspi->RxXferCount > 0) { /* Read the FIFO until the threshold is reached */ - *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)data_reg; + *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)((__IO void *)data_reg); hqspi->RxXferCount--; } else @@ -483,7 +479,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) } /* QSPI Transfer Complete interrupt occurred -------------------------------*/ - else if((flag & QSPI_FLAG_TC) && (itsource & QSPI_IT_TC)) + else if(((flag & QSPI_FLAG_TC) != 0) && ((itsource & QSPI_IT_TC) != 0)) { /* Clear interrupt */ WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TC); @@ -494,7 +490,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) /* Transfer complete callback */ if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_TX) { - if (hqspi->Instance->CR & QUADSPI_CR_DMAEN) + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0) { /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); @@ -516,7 +512,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) } else if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_RX) { - if (hqspi->Instance->CR & QUADSPI_CR_DMAEN) + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0) { /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); @@ -532,7 +528,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) if (hqspi->RxXferCount > 0) { /* Read the last data received in the FIFO until it is empty */ - *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)data_reg; + *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)((__IO void *)data_reg); hqspi->RxXferCount--; } else @@ -547,7 +543,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) /* Workaround - Extra data written in the FIFO at the end of a read transfer */ HAL_QSPI_Abort_IT(hqspi); #endif - + /* Change state of QSPI */ hqspi->State = HAL_QSPI_STATE_READY; @@ -585,7 +581,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) } /* QSPI Status Match interrupt occurred ------------------------------------*/ - else if((flag & QSPI_FLAG_SM) && (itsource & QSPI_IT_SM)) + else if(((flag & QSPI_FLAG_SM) != 0) && ((itsource & QSPI_IT_SM) != 0)) { /* Clear interrupt */ WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_SM); @@ -605,7 +601,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) } /* QSPI Transfer Error interrupt occurred ----------------------------------*/ - else if((flag & QSPI_FLAG_TE) && (itsource & QSPI_IT_TE)) + else if(((flag & QSPI_FLAG_TE) != 0) && ((itsource & QSPI_IT_TE) != 0)) { /* Clear interrupt */ WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TE); @@ -616,7 +612,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) /* Set error code */ hqspi->ErrorCode |= HAL_QSPI_ERROR_TRANSFER; - if (hqspi->Instance->CR & QUADSPI_CR_DMAEN) + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0) { /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); @@ -629,14 +625,14 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) { /* Change state of QSPI */ hqspi->State = HAL_QSPI_STATE_READY; - + /* Error callback */ HAL_QSPI_ErrorCallback(hqspi); } } /* QSPI Timeout interrupt occurred -----------------------------------------*/ - else if((flag & QSPI_FLAG_TO) && (itsource & QSPI_IT_TO)) + else if(((flag & QSPI_FLAG_TO) != 0) && ((itsource & QSPI_IT_TO) != 0)) { /* Clear interrupt */ WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TO); @@ -648,7 +644,7 @@ void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) /** * @brief Set the command configuration. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @param cmd : structure that contains the command configuration information * @param Timeout : Timeout duration * @note This function is used only in Indirect Read or Write Modes @@ -738,7 +734,7 @@ HAL_StatusTypeDef HAL_QSPI_Command(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDe /** * @brief Set the command configuration in interrupt mode. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @param cmd : structure that contains the command configuration information * @note This function is used only in Indirect Read or Write Modes * @retval HAL status @@ -826,19 +822,19 @@ HAL_StatusTypeDef HAL_QSPI_Command_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTyp else { status = HAL_BUSY; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } - + /* Return function status */ return status; } /** * @brief Transmit an amount of data in blocking mode. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer * @param Timeout : Timeout duration * @note This function is used only in Indirect Write Mode * @retval HAL status @@ -855,7 +851,7 @@ HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, u if(hqspi->State == HAL_QSPI_STATE_READY) { hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; - + if(pData != NULL ) { /* Update state */ @@ -879,7 +875,7 @@ HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, u break; } - *(__IO uint8_t *)data_reg = *hqspi->pTxBuffPtr++; + *(__IO uint8_t *)((__IO void *)data_reg) = *hqspi->pTxBuffPtr++; hqspi->TxXferCount--; } @@ -923,8 +919,8 @@ HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, u /** * @brief Receive an amount of data in blocking mode. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer * @param Timeout : Timeout duration * @note This function is used only in Indirect Read Mode * @retval HAL status @@ -969,7 +965,7 @@ HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, ui break; } - *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)data_reg; + *hqspi->pRxBuffPtr++ = *(__IO uint8_t *)((__IO void *)data_reg); hqspi->RxXferCount--; } @@ -979,7 +975,7 @@ HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, ui status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); if (status == HAL_OK) - { + { /* Clear Transfer Complete bit */ __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); @@ -1012,8 +1008,8 @@ HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, ui /** * @brief Send an amount of data in non-blocking mode with interrupt. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer * @note This function is used only in Indirect Write Mode * @retval HAL status */ @@ -1072,8 +1068,8 @@ HAL_StatusTypeDef HAL_QSPI_Transmit_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData /** * @brief Receive an amount of data in non-blocking mode with interrupt. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer * @note This function is used only in Indirect Read Mode * @retval HAL status */ @@ -1136,8 +1132,8 @@ HAL_StatusTypeDef HAL_QSPI_Receive_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData) /** * @brief Send an amount of data in non-blocking mode with DMA. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer * @note This function is used only in Indirect Write Mode * @note If DMA peripheral access is configured as halfword, the number * of data and the fifo threshold should be aligned on halfword @@ -1174,7 +1170,7 @@ HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pDat => no transfer possible with DMA peripheral access configured as halfword */ hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; status = HAL_ERROR; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } @@ -1205,43 +1201,43 @@ HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pDat { /* Update state */ hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX; - + /* Clear interrupt */ __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC)); - + /* Configure size and pointer of the handle */ hqspi->TxXferSize = hqspi->TxXferCount; hqspi->pTxBuffPtr = pData; - + /* Configure QSPI: CCR register with functional mode as indirect write */ MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); - + /* Set the QSPI DMA transfer complete callback */ hqspi->hdma->XferCpltCallback = QSPI_DMATxCplt; - + /* Set the QSPI DMA Half transfer complete callback */ hqspi->hdma->XferHalfCpltCallback = QSPI_DMATxHalfCplt; - + /* Set the DMA error callback */ hqspi->hdma->XferErrorCallback = QSPI_DMAError; - + /* Clear the DMA abort callback */ hqspi->hdma->XferAbortCallback = NULL; - + /* Configure the direction of the DMA */ hqspi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH; MODIFY_REG(hqspi->hdma->Instance->CCR, DMA_CCR_DIR, hqspi->hdma->Init.Direction); - + /* Enable the QSPI transmit DMA Channel */ - tmp = (uint32_t*)&pData; + tmp = (uint32_t*)((void*)&pData); HAL_DMA_Start_IT(hqspi->hdma, *(uint32_t*)tmp, (uint32_t)&hqspi->Instance->DR, hqspi->TxXferSize); - + /* Process unlocked */ __HAL_UNLOCK(hqspi); - + /* Enable the QSPI transfer error Interrupt */ __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE); - + /* Enable the DMA transfer by setting the DMAEN bit in the QSPI CR register */ SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); } @@ -1250,7 +1246,7 @@ HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pDat { hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; status = HAL_ERROR; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } @@ -1258,18 +1254,18 @@ HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pDat else { status = HAL_BUSY; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } - + return status; } /** * @brief Receive an amount of data in non-blocking mode with DMA. - * @param hqspi: QSPI handle - * @param pData: pointer to data buffer. + * @param hqspi : QSPI handle + * @param pData : pointer to data buffer. * @note This function is used only in Indirect Read Mode * @note If DMA peripheral access is configured as halfword, the number * of data and the fifo threshold should be aligned on halfword @@ -1292,7 +1288,7 @@ HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData /* Clear the error code */ hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; - if(pData != NULL) + if(pData != NULL ) { /* Configure counters of the handle */ if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE) @@ -1324,7 +1320,7 @@ HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData => no transfer possible with DMA peripheral access configured as word */ hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; status = HAL_ERROR; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } @@ -1338,46 +1334,46 @@ HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData { /* Update state */ hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX; - + /* Clear interrupt */ __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC)); - + /* Configure size and pointer of the handle */ hqspi->RxXferSize = hqspi->RxXferCount; hqspi->pRxBuffPtr = pData; - + /* Set the QSPI DMA transfer complete callback */ hqspi->hdma->XferCpltCallback = QSPI_DMARxCplt; - + /* Set the QSPI DMA Half transfer complete callback */ hqspi->hdma->XferHalfCpltCallback = QSPI_DMARxHalfCplt; - + /* Set the DMA error callback */ hqspi->hdma->XferErrorCallback = QSPI_DMAError; - + /* Clear the DMA abort callback */ hqspi->hdma->XferAbortCallback = NULL; - + /* Configure the direction of the DMA */ hqspi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY; MODIFY_REG(hqspi->hdma->Instance->CCR, DMA_CCR_DIR, hqspi->hdma->Init.Direction); - + /* Enable the DMA Channel */ - tmp = (uint32_t*)&pData; + tmp = (uint32_t*)((void*)&pData); HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, *(uint32_t*)tmp, hqspi->RxXferSize); - + /* Configure QSPI: CCR register with functional as indirect read */ MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ); - + /* Start the transfer by re-writing the address in AR register */ WRITE_REG(hqspi->Instance->AR, addr_reg); - + /* Process unlocked */ __HAL_UNLOCK(hqspi); - + /* Enable the QSPI transfer error Interrupt */ __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE); - + /* Enable the DMA transfer by setting the DMAEN bit in the QSPI CR register */ SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); } @@ -1404,9 +1400,9 @@ HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData /** * @brief Configure the QSPI Automatic Polling Mode in blocking mode. - * @param hqspi: QSPI handle - * @param cmd: structure that contains the command configuration information. - * @param cfg: structure that contains the polling configuration information. + * @param hqspi : QSPI handle + * @param cmd : structure that contains the command configuration information. + * @param cfg : structure that contains the polling configuration information. * @param Timeout : Timeout duration * @note This function is used only in Automatic Polling Mode * @retval HAL status @@ -1505,9 +1501,9 @@ HAL_StatusTypeDef HAL_QSPI_AutoPolling(QSPI_HandleTypeDef *hqspi, QSPI_CommandTy /** * @brief Configure the QSPI Automatic Polling Mode in non-blocking mode. - * @param hqspi: QSPI handle - * @param cmd: structure that contains the command configuration information. - * @param cfg: structure that contains the polling configuration information. + * @param hqspi : QSPI handle + * @param cmd : structure that contains the command configuration information. + * @param cfg : structure that contains the polling configuration information. * @note This function is used only in Automatic Polling Mode * @retval HAL status */ @@ -1598,7 +1594,7 @@ HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_Comman else { status = HAL_BUSY; - + /* Process unlocked */ __HAL_UNLOCK(hqspi); } @@ -1609,9 +1605,9 @@ HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_Comman /** * @brief Configure the Memory Mapped mode. - * @param hqspi: QSPI handle - * @param cmd: structure that contains the command configuration information. - * @param cfg: structure that contains the memory mapped configuration information. + * @param hqspi : QSPI handle + * @param cmd : structure that contains the command configuration information. + * @param cfg : structure that contains the memory mapped configuration information. * @note This function is used only in Memory mapped Mode * @retval HAL status */ @@ -1664,9 +1660,9 @@ HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandT if (status == HAL_OK) { /* Configure QSPI: CR register with timeout counter enable */ - MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation); + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation); - if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE) + if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE) { assert_param(IS_QSPI_TIMEOUT_PERIOD(cfg->TimeOutPeriod)); @@ -1698,7 +1694,7 @@ HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandT /** * @brief Transfer Error callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi) @@ -1713,7 +1709,7 @@ __weak void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Abort completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi) @@ -1728,7 +1724,7 @@ __weak void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Command completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi) @@ -1743,7 +1739,7 @@ __weak void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Rx Transfer completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi) @@ -1758,7 +1754,7 @@ __weak void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Tx Transfer completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *hqspi) @@ -1773,7 +1769,7 @@ __weak void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Rx Half Transfer completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) @@ -1788,10 +1784,10 @@ __weak void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Tx Half Transfer completed callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ -__weak void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) + __weak void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) { /* Prevent unused argument(s) compilation warning */ UNUSED(hqspi); @@ -1803,7 +1799,7 @@ __weak void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) /** * @brief FIFO Threshold callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi) @@ -1818,7 +1814,7 @@ __weak void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Status Match callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi) @@ -1833,7 +1829,7 @@ __weak void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Timeout callback. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval None */ __weak void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi) @@ -1870,7 +1866,7 @@ __weak void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi) /** * @brief Return the QSPI handle state. - * @param hqspi: QSPI handle + * @param hqspi : QSPI handle * @retval HAL state */ HAL_QSPI_StateTypeDef HAL_QSPI_GetState(QSPI_HandleTypeDef *hqspi) @@ -1881,7 +1877,7 @@ HAL_QSPI_StateTypeDef HAL_QSPI_GetState(QSPI_HandleTypeDef *hqspi) /** * @brief Return the QSPI error code. -* @param hqspi: QSPI handle +* @param hqspi : QSPI handle * @retval QSPI Error Code */ uint32_t HAL_QSPI_GetError(QSPI_HandleTypeDef *hqspi) @@ -1891,7 +1887,7 @@ uint32_t HAL_QSPI_GetError(QSPI_HandleTypeDef *hqspi) /** * @brief Abort the current transmission. -* @param hqspi: QSPI handle +* @param hqspi : QSPI handle * @retval HAL status */ HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi) @@ -1905,11 +1901,11 @@ HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi) /* Process unlocked */ __HAL_UNLOCK(hqspi); - if (hqspi->Instance->CR & QUADSPI_CR_DMAEN) + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0) { /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); - + /* Abort DMA channel */ status = HAL_DMA_Abort(hqspi->hdma); if(status != HAL_OK) @@ -1917,21 +1913,21 @@ HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi) hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; } } - + /* Configure QSPI: CR register with Abort request */ SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); - + /* Wait until TC flag is set to go back in idle state */ status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout); - if(status == HAL_OK) - { + if (status == HAL_OK) + { __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); - + /* Wait until BUSY flag is reset */ status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); } - + if (status == HAL_OK) { /* Update state */ @@ -1944,7 +1940,7 @@ HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi) /** * @brief Abort the current transmission (non-blocking function) -* @param hqspi: QSPI handle +* @param hqspi : QSPI handle * @retval HAL status */ HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi) @@ -1956,18 +1952,18 @@ HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi) { /* Process unlocked */ __HAL_UNLOCK(hqspi); - + /* Update QSPI state */ hqspi->State = HAL_QSPI_STATE_ABORT; - + /* Disable all interrupts */ __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_TO | QSPI_IT_SM | QSPI_IT_FT | QSPI_IT_TC | QSPI_IT_TE)); - - if (hqspi->Instance->CR & QUADSPI_CR_DMAEN) + + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0) { /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); - + /* Abort DMA channel */ hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt; HAL_DMA_Abort_IT(hqspi->hdma); @@ -1976,10 +1972,10 @@ HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi) { /* Clear interrupt */ __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); - + /* Enable the QSPI Transfer Complete Interrupt */ __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC); - + /* Configure QSPI: CR register with Abort request */ SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); } @@ -1988,8 +1984,8 @@ HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi) } /** @brief Set QSPI timeout. - * @param hqspi: QSPI handle. - * @param Timeout: Timeout for the QSPI memory access. + * @param hqspi : QSPI handle. + * @param Timeout : Timeout for the QSPI memory access. * @retval None */ void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) @@ -1998,8 +1994,8 @@ void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) } /** @brief Set QSPI Fifo threshold. - * @param hqspi: QSPI handle. - * @param Threshold: Threshold of the Fifo (value between 1 and 16). + * @param hqspi : QSPI handle. + * @param Threshold : Threshold of the Fifo (value between 1 and 16). * @retval HAL status */ HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold) @@ -2016,7 +2012,7 @@ HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t /* Configure QSPI FIFO Threshold */ MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, - ((hqspi->Init.FifoThreshold - 1) << POSITION_VAL(QUADSPI_CR_FTHRES))); + ((hqspi->Init.FifoThreshold - 1) << QUADSPI_CR_FTHRES_Pos)); } else { @@ -2031,12 +2027,12 @@ HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t } /** @brief Get QSPI Fifo threshold. - * @param hqspi: QSPI handle. + * @param hqspi : QSPI handle. * @retval Fifo threshold (value between 1 and 16) */ uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi) { - return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> POSITION_VAL(QUADSPI_CR_FTHRES)) + 1); + return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1); } /** @@ -2045,7 +2041,7 @@ uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi) /** * @brief DMA QSPI receive process complete callback. - * @param hdma: DMA handle + * @param hdma : DMA handle * @retval None */ static void QSPI_DMARxCplt(DMA_HandleTypeDef *hdma) @@ -2059,7 +2055,7 @@ static void QSPI_DMARxCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA QSPI transmit process complete callback. - * @param hdma: DMA handle + * @param hdma : DMA handle * @retval None */ static void QSPI_DMATxCplt(DMA_HandleTypeDef *hdma) @@ -2097,7 +2093,7 @@ static void QSPI_DMATxHalfCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA QSPI communication error callback. - * @param hdma: DMA handle + * @param hdma : DMA handle * @retval None */ static void QSPI_DMAError(DMA_HandleTypeDef *hdma) @@ -2117,7 +2113,7 @@ static void QSPI_DMAError(DMA_HandleTypeDef *hdma) /** * @brief DMA QSPI abort complete callback. - * @param hdma: DMA handle + * @param hdma : DMA handle * @retval None */ static void QSPI_DMAAbortCplt(DMA_HandleTypeDef *hdma) @@ -2144,25 +2140,26 @@ static void QSPI_DMAAbortCplt(DMA_HandleTypeDef *hdma) /* DMA Abort called due to a transfer error interrupt */ /* Change state of QSPI */ hqspi->State = HAL_QSPI_STATE_READY; - + /* Error callback */ HAL_QSPI_ErrorCallback(hqspi); } } + /** * @brief Wait for a flag state until timeout. - * @param hqspi: QSPI handle - * @param Flag: Flag checked - * @param State: Value of the flag expected - * @param Timeout: Duration of the timeout + * @param hqspi : QSPI handle + * @param Flag : Flag checked + * @param State : Value of the flag expected + * @param Timeout : Duration of the timeout * @param Tickstart Tick start value * @retval HAL status */ -static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag, +static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Tickstart, uint32_t Timeout) { /* Wait until flag is in expected state */ - while((FlagStatus)(__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State) + while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State) { /* Check for the Timeout */ if (Timeout != HAL_MAX_DELAY) @@ -2181,9 +2178,9 @@ static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqsp /** * @brief Configure the communication registers. - * @param hqspi: QSPI handle - * @param cmd: structure that contains the command configuration information - * @param FunctionalMode: functional mode to configured + * @param hqspi : QSPI handle + * @param cmd : structure that contains the command configuration information + * @param FunctionalMode : functional mode to configured * This parameter can be one of the following values: * @arg QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE: Indirect write mode * @arg QSPI_FUNCTIONAL_MODE_INDIRECT_READ: Indirect read mode @@ -2213,7 +2210,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with instruction, address and alternate bytes ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateBytesSize | cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode | cmd->Instruction | FunctionalMode)); @@ -2229,7 +2226,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with instruction and alternate bytes ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateBytesSize | cmd->AlternateByteMode | cmd->AddressMode | cmd->InstructionMode | cmd->Instruction | FunctionalMode)); @@ -2242,7 +2239,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with instruction and address ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode | cmd->Instruction | FunctionalMode)); @@ -2257,7 +2254,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with only instruction ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateByteMode | cmd->AddressMode | cmd->InstructionMode | cmd->Instruction | FunctionalMode)); } @@ -2275,7 +2272,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with address and alternate bytes ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateBytesSize | cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); @@ -2291,7 +2288,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with only alternate bytes ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateBytesSize | cmd->AlternateByteMode | cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); } @@ -2303,7 +2300,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin /*---- Command with only address ----*/ /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); @@ -2320,7 +2317,7 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin { /* Configure QSPI: CCR register with all communications parameters */ WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | - cmd->DataMode | (cmd->DummyCycles << POSITION_VAL(QUADSPI_CCR_DCYC)) | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | cmd->AlternateByteMode | cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); } @@ -2342,4 +2339,6 @@ static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uin * @} */ +#endif /* defined(QUADSPI) || defined(QUADSPI1) || defined(QUADSPI2) */ + /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.h index 9b2e82197d..cef4014d75 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_qspi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_qspi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of QSPI HAL module. ****************************************************************************** * @attention @@ -46,6 +44,8 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" +#if defined(QUADSPI) || defined(QUADSPI1) || defined(QUADSPI2) + /** @addtogroup STM32L4xx_HAL_Driver * @{ */ @@ -81,9 +81,7 @@ typedef struct This parameter can be a value of @ref QSPI_ChipSelectHighTime */ uint32_t ClockMode; /* Specifies the Clock Mode. It indicates the level that clock takes between commands. This parameter can be a value of @ref QSPI_ClockMode */ -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CR_DFM) uint32_t FlashID; /* Specifies the Flash which will be used, This parameter can be a value of @ref QSPI_Flash_Select */ uint32_t DualFlash; /* Specifies the Dual Flash Mode State @@ -206,10 +204,10 @@ typedef struct /** @defgroup QSPI_ErrorCode QSPI Error Code * @{ */ -#define HAL_QSPI_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ -#define HAL_QSPI_ERROR_TIMEOUT ((uint32_t)0x00000001) /*!< Timeout error */ -#define HAL_QSPI_ERROR_TRANSFER ((uint32_t)0x00000002) /*!< Transfer error */ -#define HAL_QSPI_ERROR_DMA ((uint32_t)0x00000004) /*!< DMA transfer error */ +#define HAL_QSPI_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ +#define HAL_QSPI_ERROR_TIMEOUT ((uint32_t)0x00000001) /*!< Timeout error */ +#define HAL_QSPI_ERROR_TRANSFER ((uint32_t)0x00000002) /*!< Transfer error */ +#define HAL_QSPI_ERROR_DMA ((uint32_t)0x00000004) /*!< DMA transfer error */ #define HAL_QSPI_ERROR_INVALID_PARAM ((uint32_t)0x00000008) /*!< Invalid parameters error */ /** * @} @@ -248,9 +246,7 @@ typedef struct * @} */ -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CR_DFM) /** @defgroup QSPI_Flash_Select QSPI Flash Select * @{ */ @@ -328,7 +324,7 @@ typedef struct /** @defgroup QSPI_DataMode QSPI Data Mode * @{ */ -#define QSPI_DATA_NONE ((uint32_t)0X00000000) /*!State = HAL_QSPI_STATE_RESET) /** @brief Enable the QSPI peripheral. - * @param __HANDLE__: specifies the QSPI Handle. + * @param __HANDLE__ : specifies the QSPI Handle. * @retval None */ #define __HAL_QSPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN) /** @brief Disable the QSPI peripheral. - * @param __HANDLE__: specifies the QSPI Handle. + * @param __HANDLE__ : specifies the QSPI Handle. * @retval None */ #define __HAL_QSPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN) @@ -507,7 +501,7 @@ typedef struct * @arg QSPI_FLAG_TE: QSPI Transfer error flag * @retval None */ -#define __HAL_QSPI_GET_FLAG(__HANDLE__, __FLAG__) (READ_BIT((__HANDLE__)->Instance->SR, (__FLAG__)) != 0) +#define __HAL_QSPI_GET_FLAG(__HANDLE__, __FLAG__) ((READ_BIT((__HANDLE__)->Instance->SR, (__FLAG__)) != 0) ? SET : RESET) /** @brief Clears the specified QSPI's flag status. * @param __HANDLE__: specifies the QSPI Handle. @@ -611,9 +605,7 @@ uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi); #define IS_QSPI_CLOCK_MODE(CLKMODE) (((CLKMODE) == QSPI_CLOCK_MODE_0) || \ ((CLKMODE) == QSPI_CLOCK_MODE_3)) -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CR_DFM) #define IS_QSPI_FLASH_ID(FLASH) (((FLASH) == QSPI_FLASH_ID_1) || \ ((FLASH) == QSPI_FLASH_ID_2)) @@ -658,9 +650,7 @@ uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi); #define IS_QSPI_DDR_MODE(DDR_MODE) (((DDR_MODE) == QSPI_DDR_MODE_DISABLE) || \ ((DDR_MODE) == QSPI_DDR_MODE_ENABLE)) -#if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || \ - defined(STM32L443xx) || defined(STM32L451xx) || defined(STM32L452xx) || defined(STM32L462xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) +#if defined(QUADSPI_CCR_DHHC) #define IS_QSPI_DDR_HHC(DDR_HHC) (((DDR_HHC) == QSPI_DDR_HHC_ANALOG_DELAY) || \ ((DDR_HHC) == QSPI_DDR_HHC_HALF_CLK_DELAY)) #else @@ -696,7 +686,9 @@ uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi); /** * @} */ - + +#endif /* defined(QUADSPI) || defined(QUADSPI1) || defined(QUADSPI2) */ + #ifdef __cplusplus } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c index 4835c433d3..50e2470772 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rcc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RCC HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Reset and Clock Control (RCC) peripheral: @@ -87,12 +85,12 @@ * @{ */ #define HSE_TIMEOUT_VALUE HSE_STARTUP_TIMEOUT -#define HSI_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define MSI_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define LSI_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define HSI48_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define PLL_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define CLOCKSWITCH_TIMEOUT_VALUE ((uint32_t)5000U) /* 5 s */ +#define HSI_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define MSI_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define LSI_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define HSI48_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define PLL_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define CLOCKSWITCH_TIMEOUT_VALUE 5000U /* 5 s */ /** * @} */ @@ -106,25 +104,21 @@ #define MCO1_PIN GPIO_PIN_8 #define RCC_PLL_OSCSOURCE_CONFIG(__HAL_RCC_PLLSOURCE__) \ - (MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, (uint32_t)(__HAL_RCC_PLLSOURCE__))) + (MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, (__HAL_RCC_PLLSOURCE__))) /** * @} */ /* Private variables ---------------------------------------------------------*/ -/** @defgroup RCC_Private_Variables RCC Private Variables - * @{ - */ - -/** - * @} - */ /* Private function prototypes -----------------------------------------------*/ /** @defgroup RCC_Private_Functions RCC Private Functions * @{ */ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +static uint32_t RCC_GetSysClockFreqFromPLLSource(void); +#endif /** * @} */ @@ -150,11 +144,11 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange); [..] Internal/external clock and PLL configuration (+) HSI (high-speed internal): 16 MHz factory-trimmed RC used directly or through the PLL as System clock source. - + (+) MSI (Mutiple Speed Internal): Its frequency is software trimmable from 100KHZ to 48MHZ. It can be used to generate the clock for the USB OTG FS (48 MHz). - The number of flash wait states is automatically adjusted when MSI range is updated with - HAL_RCC_OscConfig() and the MSI is used as System clock source. + The number of flash wait states is automatically adjusted when MSI range is updated with + HAL_RCC_OscConfig() and the MSI is used as System clock source. (+) LSI (low-speed internal): 32 KHz low consumption RC used as IWDG and/or RTC clock source. @@ -212,21 +206,41 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange); You have to use __HAL_RCC_RTC_ENABLE() and HAL_RCCEx_PeriphCLKConfig() function to configure this clock. (+@) USB OTG FS, SDMMC1 and RNG: USB OTG FS requires a frequency equal to 48 MHz - to work correctly, while the SDMMC1 and RNG peripherals require a frequency + to work correctly, while the SDMMC1 and RNG peripherals require a frequency equal or lower than to 48 MHz. This clock is derived of the main PLL or PLLSAI1 - through PLLQ divider. You have to enable the peripheral clock and use + through PLLQ divider. You have to enable the peripheral clock and use HAL_RCCEx_PeriphCLKConfig() function to configure this clock. (+@) IWDG clock which is always the LSI clock. - (+) The maximum frequency of the SYSCLK, HCLK, PCLK1 and PCLK2 is 80 MHz. + (+) The maximum frequency of the SYSCLK, HCLK, PCLK1 and PCLK2 is 80 MHz. The clock source frequency should be adapted depending on the device voltage range as listed in the Reference Manual "Clock source frequency versus voltage scaling" chapter. @endverbatim - - Table 1. HCLK clock frequency. - +-------------------------------------------------------+ + + Table 1. HCLK clock frequency for STM32L4Rx/STM32L4Sx devices + +--------------------------------------------------------+ + | Latency | HCLK clock frequency (MHz) | + | |--------------------------------------| + | | voltage range 1 | voltage range 2 | + | | 1.2 V | 1.0 V | + |-----------------|-------------------|------------------| + |0WS(1 CPU cycles)| 0 < HCLK <= 20 | 0 < HCLK <= 8 | + |-----------------|-------------------|------------------| + |1WS(2 CPU cycles)| 20 < HCLK <= 40 | 8 < HCLK <= 16 | + |-----------------|-------------------|------------------| + |2WS(3 CPU cycles)| 40 < HCLK <= 60 | 16 < HCLK <= 26 | + |-----------------|-------------------|------------------| + |3WS(4 CPU cycles)| 60 < HCLK <= 80 | 16 < HCLK <= 26 | + |-----------------|-------------------|------------------| + |4WS(5 CPU cycles)| 80 < HCLK <= 100 | 16 < HCLK <= 26 | + |-----------------|-------------------|------------------| + |5WS(6 CPU cycles)| 100 < HCLK <= 120 | 16 < HCLK <= 26 | + +--------------------------------------------------------+ + + Table 2. HCLK clock frequency for other STM32L4 devices + +-------------------------------------------------------+ | Latency | HCLK clock frequency (MHz) | | |-------------------------------------| | | voltage range 1 | voltage range 2 | @@ -253,28 +267,63 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange); * - AHB, APB1 and APB2 prescaler set to 1. * - CSS, MCO1 OFF * - All interrupts disabled + * - All interrupt and reset flags cleared * @note This function doesn't modify the configuration of the * - Peripheral clocks * - LSI, LSE and RTC clocks - * @retval None + * @retval HAL status */ -void HAL_RCC_DeInit(void) +HAL_StatusTypeDef HAL_RCC_DeInit(void) { + uint32_t tickstart = 0; + /* Set MSION bit */ SET_BIT(RCC->CR, RCC_CR_MSION); /* Insure MSIRDY bit is set before writing default MSIRANGE value */ - while(READ_BIT(RCC->CR, RCC_CR_MSIRDY) == RESET) { __NOP(); } - + /* Get start tick */ + tickstart = HAL_GetTick(); + + /* Wait till MSI is ready */ + while(READ_BIT(RCC->CR, RCC_CR_MSIRDY) == RESET) + { + if((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Set MSIRANGE default value */ MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, RCC_MSIRANGE_6); - + /* Reset CFGR register (MSI is selected as system clock source) */ CLEAR_REG(RCC->CFGR); + /* Update the SystemCoreClock global variable for MSI as system clock source */ + SystemCoreClock = MSI_VALUE; + + /* Configure the source of time base considering new system clock settings */ + if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) + { + return HAL_ERROR; + } + + /* Insure MSI selected as system clock source */ + /* Get start tick */ + tickstart = HAL_GetTick(); + + /* Wait till system clock source is ready */ + while(READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RCC_CFGR_SWS_MSI) + { + if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset HSION, HSIKERON, HSIASFS, HSEON, HSECSSON, PLLON, PLLSAIxON bits */ #if defined(RCC_PLLSAI2_SUPPORT) - + CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_HSION | RCC_CR_HSIKERON| RCC_CR_HSIASFS | RCC_CR_PLLON | RCC_CR_PLLSAI1ON | RCC_CR_PLLSAI2ON); #else @@ -282,7 +331,27 @@ void HAL_RCC_DeInit(void) CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_HSION | RCC_CR_HSIKERON| RCC_CR_HSIASFS | RCC_CR_PLLON | RCC_CR_PLLSAI1ON); #endif /* RCC_PLLSAI2_SUPPORT */ - + + /* Insure PLLRDY, PLLSAI1RDY and PLLSAI2RDY (if present) are reset */ + /* Get start tick */ + tickstart = HAL_GetTick(); + +#if defined(RCC_PLLSAI2_SUPPORT) + + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY | RCC_CR_PLLSAI1RDY | RCC_CR_PLLSAI2RDY) != 0U) + +#else + + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY | RCC_CR_PLLSAI1RDY) != 0U) + +#endif + { + if((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + /* Reset PLLCFGR register */ CLEAR_REG(RCC->PLLCFGR); SET_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN_4 ); @@ -292,11 +361,11 @@ void HAL_RCC_DeInit(void) SET_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N_4 ); #if defined(RCC_PLLSAI2_SUPPORT) - + /* Reset PLLSAI2CFGR register */ CLEAR_REG(RCC->PLLSAI2CFGR); SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N_4 ); - + #endif /* RCC_PLLSAI2_SUPPORT */ /* Reset HSEBYP bit */ @@ -305,8 +374,13 @@ void HAL_RCC_DeInit(void) /* Disable all interrupts */ CLEAR_REG(RCC->CIER); - /* Update the SystemCoreClock global variable */ - SystemCoreClock = MSI_VALUE; + /* Clear all interrupt flags */ + WRITE_REG(RCC->CICR, 0xFFFFFFFFU); + + /* Clear all reset flags */ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); + + return HAL_OK; } /** @@ -378,12 +452,12 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) if(RCC_SetFlashLatencyFromMSIRange(RCC_OscInitStruct->MSIClockRange) != HAL_OK) { return HAL_ERROR; - } + } } /* Update the SystemCoreClock global variable */ - SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> POSITION_VAL(RCC_CFGR_HPRE)]; - + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[READ_BIT(RCC->CFGR, RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; + /* Configure the source of time base considering new system clocks settings*/ HAL_InitTick (TICK_INT_PRIORITY); } @@ -439,7 +513,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState)); /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */ - if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) || + if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) { if((READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) @@ -490,7 +564,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); assert_param(IS_RCC_HSI_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); - /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ + /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI))) { @@ -594,7 +668,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) { FlagStatus pwrclkchanged = RESET; - + /* Check the parameters */ assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState)); @@ -605,12 +679,12 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) __HAL_RCC_PWR_CLK_ENABLE(); pwrclkchanged = SET; } - + if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP)) { /* Enable write access to Backup domain */ SET_BIT(PWR->CR1, PWR_CR1_DBP); - + /* Wait for Backup domain Write protection disable */ tickstart = HAL_GetTick(); @@ -774,14 +848,14 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) /* Disable all PLL outputs to save power if no PLLs on */ if((READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == RESET) #if defined(RCC_PLLSAI2_SUPPORT) - && + && (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == RESET) #endif /* RCC_PLLSAI2_SUPPORT */ ) - { + { MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, RCC_PLLSOURCE_NONE); } - + #if defined(RCC_PLLSAI2_SUPPORT) __HAL_RCC_PLLCLKOUT_DISABLE(RCC_PLL_SYSCLK | RCC_PLL_48M1CLK | RCC_PLL_SAI3CLK); #else @@ -845,6 +919,19 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) * @arg FLASH_LATENCY_2 FLASH 2 Latency cycles * @arg FLASH_LATENCY_3 FLASH 3 Latency cycles * @arg FLASH_LATENCY_4 FLASH 4 Latency cycles + @if STM32L4S9xx + * @arg FLASH_LATENCY_5 FLASH 5 Latency cycles + * @arg FLASH_LATENCY_6 FLASH 6 Latency cycles + * @arg FLASH_LATENCY_7 FLASH 7 Latency cycles + * @arg FLASH_LATENCY_8 FLASH 8 Latency cycles + * @arg FLASH_LATENCY_9 FLASH 9 Latency cycles + * @arg FLASH_LATENCY_10 FLASH 10 Latency cycles + * @arg FLASH_LATENCY_11 FLASH 11 Latency cycles + * @arg FLASH_LATENCY_12 FLASH 12 Latency cycles + * @arg FLASH_LATENCY_13 FLASH 13 Latency cycles + * @arg FLASH_LATENCY_14 FLASH 14 Latency cycles + * @arg FLASH_LATENCY_15 FLASH 15 Latency cycles + @endif * * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency * and updated by HAL_RCC_GetHCLKFreq() function called within this function @@ -854,7 +941,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) * the MSI frequency is set to its default value 4 MHz. * * @note The HSI can be selected as system clock source after - * from STOP modes or in case of failure of the HSE used directly or indirectly + * from STOP modes or in case of failure of the HSE used directly or indirectly * as system clock (if the Clock Security System CSS is enabled). * * @note A switch from one clock source to another occurs only if the target @@ -873,6 +960,10 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) { uint32_t tickstart = 0; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t pllfreq = 0; + uint32_t hpre = RCC_SYSCLK_DIV1; +#endif /* Check the parameters */ assert_param(RCC_ClkInitStruct != NULL); @@ -884,83 +975,97 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui (HCLK) and the supply voltage of the device. */ /* Increasing the number of wait states because of higher CPU frequency */ - if(FLatency > (FLASH->ACR & FLASH_ACR_LATENCY)) + if(FLatency > READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)) { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ - if((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) + if(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY) != FLatency) { return HAL_ERROR; } } - /*-------------------------- HCLK Configuration --------------------------*/ - if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) - { - assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); - } - /*------------------------- SYSCLK Configuration ---------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) { assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); - /* HSE is selected as System Clock Source */ - if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - { - /* Check the HSE ready flag */ - if(READ_BIT(RCC->CR, RCC_CR_HSERDY) == RESET) - { - return HAL_ERROR; - } - } /* PLL is selected as System Clock Source */ - else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) { /* Check the PLL ready flag */ if(READ_BIT(RCC->CR, RCC_CR_PLLRDY) == RESET) { return HAL_ERROR; } - } - /* MSI is selected as System Clock Source */ - else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_MSI) - { - /* Check the MSI ready flag */ - if(READ_BIT(RCC->CR, RCC_CR_MSIRDY) == RESET) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Undershoot management when selection PLL as SYSCLK source and frequency above 80Mhz */ + /* Compute target PLL output frequency */ + pllfreq = RCC_GetSysClockFreqFromPLLSource(); + + /* Intermediate step with HCLK prescaler 2 necessary before to go over 80Mhz */ + if((pllfreq > 80000000U) && + (((((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) && (RCC_ClkInitStruct->AHBCLKDivider == RCC_SYSCLK_DIV1)) + || + ((READ_BIT(RCC->CFGR, RCC_CFGR_HPRE) == RCC_SYSCLK_DIV1)))) { - return HAL_ERROR; + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_SYSCLK_DIV2); + hpre = RCC_SYSCLK_DIV2; } +#endif } - /* HSI is selected as System Clock Source */ else { - /* Check the HSI ready flag */ - if(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + /* HSE is selected as System Clock Source */ + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) { - return HAL_ERROR; + /* Check the HSE ready flag */ + if(READ_BIT(RCC->CR, RCC_CR_HSERDY) == RESET) + { + return HAL_ERROR; + } } + /* MSI is selected as System Clock Source */ + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_MSI) + { + /* Check the MSI ready flag */ + if(READ_BIT(RCC->CR, RCC_CR_MSIRDY) == RESET) + { + return HAL_ERROR; + } + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + { + return HAL_ERROR; + } + } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Overshoot management when going down from PLL as SYSCLK source and frequency above 80Mhz */ + pllfreq = HAL_RCC_GetSysClockFreq(); + + /* Intermediate step with HCLK prescaler 2 necessary before to go under 80Mhz */ + if(pllfreq > 80000000U) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_SYSCLK_DIV2); + hpre = RCC_SYSCLK_DIV2; + } +#endif + } + MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource); /* Get Start Tick*/ tickstart = HAL_GetTick(); - if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - { - while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_HSE) - { - if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - { - return HAL_TIMEOUT; - } - } - } - else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) { while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) { @@ -970,42 +1075,72 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui } } } - else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_MSI) - { - while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_MSI) - { - if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - { - return HAL_TIMEOUT; - } - } - } else { - while(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_HSI) + if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) { - if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_HSE) { - return HAL_TIMEOUT; + if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_MSI) + { + while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_MSI) + { + if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } + } + } + else + { + while(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_HSI) + { + if((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + { + return HAL_TIMEOUT; + } } } } } - + + /*-------------------------- HCLK Configuration --------------------------*/ + if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + { + assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); + } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + else + { + /* Is intermediate HCLK prescaler 2 applied internally, complete with HCLK prescaler 1 */ + if(hpre == RCC_SYSCLK_DIV2) + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_SYSCLK_DIV1); + } + } +#endif + /* Decreasing the number of wait states because of lower CPU frequency */ - if(FLatency < (FLASH->ACR & FLASH_ACR_LATENCY)) + if(FLatency < READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)) { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ - if((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) + if(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY) != FLatency) { return HAL_ERROR; } } - + /*-------------------------- PCLK1 Configuration ---------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) { @@ -1021,7 +1156,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui } /* Update the SystemCoreClock global variable */ - SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> POSITION_VAL(RCC_CFGR_HPRE)]; + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[READ_BIT(RCC->CFGR, RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; /* Configure the source of time base considering new system clocks settings*/ HAL_InitTick (TICK_INT_PRIORITY); @@ -1033,7 +1168,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui * @} */ -/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions +/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions * @brief RCC clocks control functions * @verbatim @@ -1042,7 +1177,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui =============================================================================== [..] This subsection provides a set of functions allowing to: - + (+) Ouput clock to MCO pin. (+) Retrieve current clock frequencies. (+) Enable the Clock Security System. @@ -1147,11 +1282,11 @@ uint32_t HAL_RCC_GetSysClockFreq(void) /* Get SYSCLK source */ if(READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) == RESET) { /* MSISRANGE from RCC_CSR applies */ - msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> POSITION_VAL(RCC_CSR_MSISRANGE); + msirange = READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE) >> RCC_CSR_MSISRANGE_Pos; } else { /* MSIRANGE from RCC_CR applies */ - msirange = (RCC->CR & RCC_CR_MSIRANGE) >> POSITION_VAL(RCC_CR_MSIRANGE); + msirange = READ_BIT(RCC->CR, RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos; } /*MSI frequency range in HZ*/ msirange = MSIRangeTable[msirange]; @@ -1180,25 +1315,25 @@ uint32_t HAL_RCC_GetSysClockFreq(void) /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN SYSCLK = PLL_VCO / PLLR */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); - pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U ; + pllsource = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC); + pllm = (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U ; switch (pllsource) { case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)); + pllvco = (HSI_VALUE / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); break; case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)); + pllvco = (HSE_VALUE / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); break; case RCC_PLLSOURCE_MSI: /* MSI used as PLL clock source */ default: - pllvco = (msirange / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)); + pllvco = (msirange / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); break; } - pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> POSITION_VAL(RCC_PLLCFGR_PLLR)) + 1U ) * 2U; + pllr = ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1U ) * 2U; sysclockfreq = pllvco/pllr; } @@ -1227,7 +1362,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void) uint32_t HAL_RCC_GetPCLK1Freq(void) { /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ - return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> POSITION_VAL(RCC_CFGR_PPRE1)]); + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]); } /** @@ -1239,7 +1374,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void) uint32_t HAL_RCC_GetPCLK2Freq(void) { /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ - return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> POSITION_VAL(RCC_CFGR_PPRE2)]); + return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]); } /** @@ -1264,11 +1399,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) #endif /* RCC_HSI48_SUPPORT */ /* Get the HSE configuration -----------------------------------------------*/ - if((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) + if(READ_BIT(RCC->CR, RCC_CR_HSEBYP) == RCC_CR_HSEBYP) { RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS; } - else if((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) + else if(READ_BIT(RCC->CR, RCC_CR_HSEON) == RCC_CR_HSEON) { RCC_OscInitStruct->HSEState = RCC_HSE_ON; } @@ -1278,7 +1413,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) } /* Get the MSI configuration -----------------------------------------------*/ - if((RCC->CR & RCC_CR_MSION) == RCC_CR_MSION) + if(READ_BIT(RCC->CR, RCC_CR_MSION) == RCC_CR_MSION) { RCC_OscInitStruct->MSIState = RCC_MSI_ON; } @@ -1287,11 +1422,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) RCC_OscInitStruct->MSIState = RCC_MSI_OFF; } - RCC_OscInitStruct->MSICalibrationValue = (uint32_t)((RCC->ICSCR & RCC_ICSCR_MSITRIM) >> POSITION_VAL(RCC_ICSCR_MSITRIM)); - RCC_OscInitStruct->MSIClockRange = (uint32_t)((RCC->CR & RCC_CR_MSIRANGE) ); + RCC_OscInitStruct->MSICalibrationValue = READ_BIT(RCC->ICSCR, RCC_ICSCR_MSITRIM) >> RCC_ICSCR_MSITRIM_Pos; + RCC_OscInitStruct->MSIClockRange = READ_BIT(RCC->CR, RCC_CR_MSIRANGE); /* Get the HSI configuration -----------------------------------------------*/ - if((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) + if(READ_BIT(RCC->CR, RCC_CR_HSION) == RCC_CR_HSION) { RCC_OscInitStruct->HSIState = RCC_HSI_ON; } @@ -1300,14 +1435,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) RCC_OscInitStruct->HSIState = RCC_HSI_OFF; } - RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->ICSCR & RCC_ICSCR_HSITRIM) >> POSITION_VAL(RCC_ICSCR_HSITRIM)); + RCC_OscInitStruct->HSICalibrationValue = READ_BIT(RCC->ICSCR, RCC_ICSCR_HSITRIM) >> RCC_ICSCR_HSITRIM_Pos; /* Get the LSE configuration -----------------------------------------------*/ - if((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) + if(READ_BIT(RCC->BDCR, RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) { RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS; } - else if((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) + else if(READ_BIT(RCC->BDCR, RCC_BDCR_LSEON) == RCC_BDCR_LSEON) { RCC_OscInitStruct->LSEState = RCC_LSE_ON; } @@ -1317,7 +1452,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) } /* Get the LSI configuration -----------------------------------------------*/ - if((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) + if(READ_BIT(RCC->CSR, RCC_CSR_LSION) == RCC_CSR_LSION) { RCC_OscInitStruct->LSIState = RCC_LSI_ON; } @@ -1328,7 +1463,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) #if defined(RCC_HSI48_SUPPORT) /* Get the HSI48 configuration ---------------------------------------------*/ - if((RCC->CRRCR & RCC_CRRCR_HSI48ON) == RCC_CRRCR_HSI48ON) + if(READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON) == RCC_CRRCR_HSI48ON) { RCC_OscInitStruct->HSI48State = RCC_HSI48_ON; } @@ -1341,7 +1476,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) #endif /* RCC_HSI48_SUPPORT */ /* Get the PLL configuration -----------------------------------------------*/ - if((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) + if(READ_BIT(RCC->CR, RCC_CR_PLLON) == RCC_CR_PLLON) { RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON; } @@ -1349,15 +1484,15 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) { RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF; } - RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); - RCC_OscInitStruct->PLL.PLLM = (uint32_t)(((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U); - RCC_OscInitStruct->PLL.PLLN = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN)); - RCC_OscInitStruct->PLL.PLLQ = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLQ) >> POSITION_VAL(RCC_PLLCFGR_PLLQ)) + 1U) << 1U); - RCC_OscInitStruct->PLL.PLLR = (uint32_t)((((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> POSITION_VAL(RCC_PLLCFGR_PLLR)) + 1U) << 1U); + RCC_OscInitStruct->PLL.PLLSource = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC); + RCC_OscInitStruct->PLL.PLLM = (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U; + RCC_OscInitStruct->PLL.PLLN = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; + RCC_OscInitStruct->PLL.PLLQ = (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U); + RCC_OscInitStruct->PLL.PLLR = (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1U) << 1U); #if defined(RCC_PLLP_DIV_2_31_SUPPORT) - RCC_OscInitStruct->PLL.PLLP = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLPDIV) >> POSITION_VAL(RCC_PLLCFGR_PLLPDIV)); + RCC_OscInitStruct->PLL.PLLP = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> RCC_PLLCFGR_PLLPDIV_Pos; #else - if((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) != RESET) + if(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP) != RESET) { RCC_OscInitStruct->PLL.PLLP = RCC_PLLP_DIV17; } @@ -1386,19 +1521,19 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; /* Get the SYSCLK configuration --------------------------------------------*/ - RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW); + RCC_ClkInitStruct->SYSCLKSource = READ_BIT(RCC->CFGR, RCC_CFGR_SW); /* Get the HCLK configuration ----------------------------------------------*/ - RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE); + RCC_ClkInitStruct->AHBCLKDivider = READ_BIT(RCC->CFGR, RCC_CFGR_HPRE); /* Get the APB1 configuration ----------------------------------------------*/ - RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1); + RCC_ClkInitStruct->APB1CLKDivider = READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1); /* Get the APB2 configuration ----------------------------------------------*/ - RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3U); + RCC_ClkInitStruct->APB2CLKDivider = (READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2) >> 3U); /* Get the Flash Wait State (Latency) configuration ------------------------*/ - *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY); + *pFLatency = READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY); } /** @@ -1458,7 +1593,7 @@ __weak void HAL_RCC_CSSCallback(void) * @{ */ /** - * @brief Update number of Flash wait states in line with MSI range and current + * @brief Update number of Flash wait states in line with MSI range and current voltage range. * @param msirange MSI range value from RCC_MSIRANGE_0 to RCC_MSIRANGE_11 * @retval HAL status @@ -1467,7 +1602,7 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange) { uint32_t vos = 0; uint32_t latency = FLASH_LATENCY_0; /* default value 0WS */ - + if(__HAL_RCC_PWR_IS_CLK_ENABLED()) { vos = HAL_PWREx_GetVoltageRange(); @@ -1478,7 +1613,7 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange) vos = HAL_PWREx_GetVoltageRange(); __HAL_RCC_PWR_CLK_DISABLE(); } - + if(vos == PWR_REGULATOR_VOLTAGE_SCALE1) { if(msirange > RCC_MSIRANGE_8) @@ -1499,6 +1634,22 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange) } else { +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + if(msirange >= RCC_MSIRANGE_8) + { + /* MSI >= 16Mhz */ + latency = FLASH_LATENCY_2; /* 2WS */ + } + else + { + if(msirange == RCC_MSIRANGE_7) + { + /* MSI 8Mhz */ + latency = FLASH_LATENCY_1; /* 1WS */ + } + /* else MSI < 8Mhz default FLASH_LATENCY_0 0WS */ + } +#else if(msirange > RCC_MSIRANGE_8) { /* MSI > 16Mhz */ @@ -1511,27 +1662,82 @@ static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t msirange) /* MSI 16Mhz */ latency = FLASH_LATENCY_2; /* 2WS */ } - else if(msirange == RCC_MSIRANGE_7) + else if(msirange == RCC_MSIRANGE_7) { /* MSI 8Mhz */ latency = FLASH_LATENCY_1; /* 1WS */ } /* else MSI < 8Mhz default FLASH_LATENCY_0 0WS */ } +#endif } - + __HAL_FLASH_SET_LATENCY(latency); - + /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ - if((FLASH->ACR & FLASH_ACR_LATENCY) != latency) + if(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY) != latency) { return HAL_ERROR; } - + return HAL_OK; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** + * @brief Compute SYSCLK frequency based on PLL SYSCLK source. + * @retval SYSCLK frequency + */ +static uint32_t RCC_GetSysClockFreqFromPLLSource(void) +{ + uint32_t msirange = 0U, pllvco = 0U, pllsource = 0U, pllr = 2U, pllm = 2U; + uint32_t sysclockfreq = 0U; + + if(__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_MSI) + { + /* Get MSI range source */ + if(READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) == RESET) + { /* MSISRANGE from RCC_CSR applies */ + msirange = READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE) >> RCC_CSR_MSISRANGE_Pos; + } + else + { /* MSIRANGE from RCC_CR applies */ + msirange = READ_BIT(RCC->CR, RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos; + } + /*MSI frequency range in HZ*/ + msirange = MSIRangeTable[msirange]; + } + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN + SYSCLK = PLL_VCO / PLLR + */ + pllsource = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC); + pllm = (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U ; + + switch (pllsource) + { + case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + break; + + case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + break; + + case RCC_PLLSOURCE_MSI: /* MSI used as PLL clock source */ + default: + pllvco = (msirange / pllm) * (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos); + break; + } + + pllr = ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1U ) * 2U; + sysclockfreq = pllvco/pllr; + + return sysclockfreq; +} +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.h index 709970c95b..9c8014cdef 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rcc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RCC HAL module. ****************************************************************************** * @attention @@ -71,7 +69,8 @@ typedef struct This parameter must be a value of @ref RCC_PLL_Clock_Source */ uint32_t PLLM; /*!< PLLM: Division factor for PLL VCO input clock. - This parameter must be a number between Min_Data = 1 and Max_Data = 8 */ + This parameter must be a number between Min_Data = 1 and Max_Data = 16 on STM32L4Rx/STM32L4Sx devices. + This parameter must be a number between Min_Data = 1 and Max_Data = 8 on the other devices */ uint32_t PLLN; /*!< PLLN: Multiplication factor for PLL VCO output clock. This parameter must be a number between Min_Data = 8 and Max_Data = 86 */ @@ -121,7 +120,7 @@ typedef struct uint32_t MSIClockRange; /*!< The MSI frequency range. This parameter can be a value of @ref RCC_MSI_Clock_Range */ - uint32_t HSI48State; /*!< The new state of the HSI48 (only applicable to STM32L43x/STM32L44x/STM32L45x/STM32L46x/STM32L49x/STM32L4Ax devices). + uint32_t HSI48State; /*!< The new state of the HSI48 (only applicable to STM32L43x/STM32L44x/STM32L49x/STM32L4Ax devices). This parameter can be a value of @ref RCC_HSI48_Config */ RCC_PLLInitTypeDef PLL; /*!< Main PLL structure parameters */ @@ -162,7 +161,7 @@ typedef struct /** @defgroup RCC_Timeout_Value Timeout Values * @{ */ -#define RCC_DBP_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ +#define RCC_DBP_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ #define RCC_LSE_TIMEOUT_VALUE LSE_STARTUP_TIMEOUT /** * @} @@ -171,14 +170,14 @@ typedef struct /** @defgroup RCC_Oscillator_Type Oscillator Type * @{ */ -#define RCC_OSCILLATORTYPE_NONE ((uint32_t)0x00000000U) /*!< Oscillator configuration unchanged */ -#define RCC_OSCILLATORTYPE_HSE ((uint32_t)0x00000001U) /*!< HSE to configure */ -#define RCC_OSCILLATORTYPE_HSI ((uint32_t)0x00000002U) /*!< HSI to configure */ -#define RCC_OSCILLATORTYPE_LSE ((uint32_t)0x00000004U) /*!< LSE to configure */ -#define RCC_OSCILLATORTYPE_LSI ((uint32_t)0x00000008U) /*!< LSI to configure */ -#define RCC_OSCILLATORTYPE_MSI ((uint32_t)0x00000010U) /*!< MSI to configure */ +#define RCC_OSCILLATORTYPE_NONE 0x00000000U /*!< Oscillator configuration unchanged */ +#define RCC_OSCILLATORTYPE_HSE 0x00000001U /*!< HSE to configure */ +#define RCC_OSCILLATORTYPE_HSI 0x00000002U /*!< HSI to configure */ +#define RCC_OSCILLATORTYPE_LSE 0x00000004U /*!< LSE to configure */ +#define RCC_OSCILLATORTYPE_LSI 0x00000008U /*!< LSI to configure */ +#define RCC_OSCILLATORTYPE_MSI 0x00000010U /*!< MSI to configure */ #if defined(RCC_HSI48_SUPPORT) -#define RCC_OSCILLATORTYPE_HSI48 ((uint32_t)0x00000020U) /*!< HSI48 to configure */ +#define RCC_OSCILLATORTYPE_HSI48 0x00000020U /*!< HSI48 to configure */ #endif /* RCC_HSI48_SUPPORT */ /** * @} @@ -187,9 +186,9 @@ typedef struct /** @defgroup RCC_HSE_Config HSE Config * @{ */ -#define RCC_HSE_OFF ((uint32_t)0x00000000U) /*!< HSE clock deactivation */ -#define RCC_HSE_ON RCC_CR_HSEON /*!< HSE clock activation */ -#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */ +#define RCC_HSE_OFF 0x00000000U /*!< HSE clock deactivation */ +#define RCC_HSE_ON RCC_CR_HSEON /*!< HSE clock activation */ +#define RCC_HSE_BYPASS (RCC_CR_HSEBYP | RCC_CR_HSEON) /*!< External clock source for HSE clock */ /** * @} */ @@ -197,9 +196,9 @@ typedef struct /** @defgroup RCC_LSE_Config LSE Config * @{ */ -#define RCC_LSE_OFF ((uint32_t)0x00000000U) /*!< LSE clock deactivation */ -#define RCC_LSE_ON RCC_BDCR_LSEON /*!< LSE clock activation */ -#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */ +#define RCC_LSE_OFF 0x00000000U /*!< LSE clock deactivation */ +#define RCC_LSE_ON RCC_BDCR_LSEON /*!< LSE clock activation */ +#define RCC_LSE_BYPASS (RCC_BDCR_LSEBYP | RCC_BDCR_LSEON) /*!< External clock source for LSE clock */ /** * @} */ @@ -207,14 +206,14 @@ typedef struct /** @defgroup RCC_HSI_Config HSI Config * @{ */ -#define RCC_HSI_OFF ((uint32_t)0x00000000U) /*!< HSI clock deactivation */ -#define RCC_HSI_ON RCC_CR_HSION /*!< HSI clock activation */ +#define RCC_HSI_OFF 0x00000000U /*!< HSI clock deactivation */ +#define RCC_HSI_ON RCC_CR_HSION /*!< HSI clock activation */ #if defined(STM32L431xx) || defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) -#define RCC_HSICALIBRATION_DEFAULT ((uint32_t)0x10U) /* Default HSI calibration trimming value */ +#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */ #else -#define RCC_HSICALIBRATION_DEFAULT ((uint32_t)0x40U) /* Default HSI calibration trimming value */ +#define RCC_HSICALIBRATION_DEFAULT 0x40U /* Default HSI calibration trimming value */ #endif /* STM32L431xx || STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ /** @@ -224,8 +223,8 @@ typedef struct /** @defgroup RCC_LSI_Config LSI Config * @{ */ -#define RCC_LSI_OFF ((uint32_t)0x00000000U) /*!< LSI clock deactivation */ -#define RCC_LSI_ON RCC_CSR_LSION /*!< LSI clock activation */ +#define RCC_LSI_OFF 0x00000000U /*!< LSI clock deactivation */ +#define RCC_LSI_ON RCC_CSR_LSION /*!< LSI clock activation */ /** * @} */ @@ -233,10 +232,10 @@ typedef struct /** @defgroup RCC_MSI_Config MSI Config * @{ */ -#define RCC_MSI_OFF ((uint32_t)0x00000000U) /*!< MSI clock deactivation */ -#define RCC_MSI_ON RCC_CR_MSION /*!< MSI clock activation */ +#define RCC_MSI_OFF 0x00000000U /*!< MSI clock deactivation */ +#define RCC_MSI_ON RCC_CR_MSION /*!< MSI clock activation */ -#define RCC_MSICALIBRATION_DEFAULT ((uint32_t)0) /*!< Default MSI calibration trimming value */ +#define RCC_MSICALIBRATION_DEFAULT 0U /*!< Default MSI calibration trimming value */ /** * @} */ @@ -245,8 +244,8 @@ typedef struct /** @defgroup RCC_HSI48_Config HSI48 Config * @{ */ -#define RCC_HSI48_OFF ((uint32_t)0x00000000U) /*!< HSI48 clock deactivation */ -#define RCC_HSI48_ON RCC_CRRCR_HSI48ON /*!< HSI48 clock activation */ +#define RCC_HSI48_OFF 0x00000000U /*!< HSI48 clock deactivation */ +#define RCC_HSI48_ON RCC_CRRCR_HSI48ON /*!< HSI48 clock activation */ /** * @} */ @@ -254,7 +253,7 @@ typedef struct /** @defgroup RCC_HSI48_Config HSI48 Config * @{ */ -#define RCC_HSI48_OFF ((uint32_t)0x00000000U) /*!< HSI48 clock deactivation */ +#define RCC_HSI48_OFF 0x00000000U /*!< HSI48 clock deactivation */ /** * @} */ @@ -263,9 +262,9 @@ typedef struct /** @defgroup RCC_PLL_Config PLL Config * @{ */ -#define RCC_PLL_NONE ((uint32_t)0x00000000U) /*!< PLL configuration unchanged */ -#define RCC_PLL_OFF ((uint32_t)0x00000001U) /*!< PLL deactivation */ -#define RCC_PLL_ON ((uint32_t)0x00000002U) /*!< PLL activation */ +#define RCC_PLL_NONE 0x00000000U /*!< PLL configuration unchanged */ +#define RCC_PLL_OFF 0x00000001U /*!< PLL deactivation */ +#define RCC_PLL_ON 0x00000002U /*!< PLL activation */ /** * @} */ @@ -274,39 +273,39 @@ typedef struct * @{ */ #if defined(RCC_PLLP_DIV_2_31_SUPPORT) -#define RCC_PLLP_DIV2 ((uint32_t)0x00000002U) /*!< PLLP division factor = 2 */ -#define RCC_PLLP_DIV3 ((uint32_t)0x00000003U) /*!< PLLP division factor = 3 */ -#define RCC_PLLP_DIV4 ((uint32_t)0x00000004U) /*!< PLLP division factor = 4 */ -#define RCC_PLLP_DIV5 ((uint32_t)0x00000005U) /*!< PLLP division factor = 5 */ -#define RCC_PLLP_DIV6 ((uint32_t)0x00000006U) /*!< PLLP division factor = 6 */ -#define RCC_PLLP_DIV7 ((uint32_t)0x00000007U) /*!< PLLP division factor = 7 */ -#define RCC_PLLP_DIV8 ((uint32_t)0x00000008U) /*!< PLLP division factor = 8 */ -#define RCC_PLLP_DIV9 ((uint32_t)0x00000009U) /*!< PLLP division factor = 9 */ -#define RCC_PLLP_DIV10 ((uint32_t)0x0000000AU) /*!< PLLP division factor = 10 */ -#define RCC_PLLP_DIV11 ((uint32_t)0x0000000BU) /*!< PLLP division factor = 11 */ -#define RCC_PLLP_DIV12 ((uint32_t)0x0000000CU) /*!< PLLP division factor = 12 */ -#define RCC_PLLP_DIV13 ((uint32_t)0x0000000DU) /*!< PLLP division factor = 13 */ -#define RCC_PLLP_DIV14 ((uint32_t)0x0000000EU) /*!< PLLP division factor = 14 */ -#define RCC_PLLP_DIV15 ((uint32_t)0x0000000FU) /*!< PLLP division factor = 15 */ -#define RCC_PLLP_DIV16 ((uint32_t)0x00000010U) /*!< PLLP division factor = 16 */ -#define RCC_PLLP_DIV17 ((uint32_t)0x00000011U) /*!< PLLP division factor = 17 */ -#define RCC_PLLP_DIV18 ((uint32_t)0x00000012U) /*!< PLLP division factor = 18 */ -#define RCC_PLLP_DIV19 ((uint32_t)0x00000013U) /*!< PLLP division factor = 19 */ -#define RCC_PLLP_DIV20 ((uint32_t)0x00000014U) /*!< PLLP division factor = 20 */ -#define RCC_PLLP_DIV21 ((uint32_t)0x00000015U) /*!< PLLP division factor = 21 */ -#define RCC_PLLP_DIV22 ((uint32_t)0x00000016U) /*!< PLLP division factor = 22 */ -#define RCC_PLLP_DIV23 ((uint32_t)0x00000017U) /*!< PLLP division factor = 23 */ -#define RCC_PLLP_DIV24 ((uint32_t)0x00000018U) /*!< PLLP division factor = 24 */ -#define RCC_PLLP_DIV25 ((uint32_t)0x00000019U) /*!< PLLP division factor = 25 */ -#define RCC_PLLP_DIV26 ((uint32_t)0x0000001AU) /*!< PLLP division factor = 26 */ -#define RCC_PLLP_DIV27 ((uint32_t)0x0000001BU) /*!< PLLP division factor = 27 */ -#define RCC_PLLP_DIV28 ((uint32_t)0x0000001CU) /*!< PLLP division factor = 28 */ -#define RCC_PLLP_DIV29 ((uint32_t)0x0000001DU) /*!< PLLP division factor = 29 */ -#define RCC_PLLP_DIV30 ((uint32_t)0x0000001EU) /*!< PLLP division factor = 30 */ -#define RCC_PLLP_DIV31 ((uint32_t)0x0000001FU) /*!< PLLP division factor = 31 */ +#define RCC_PLLP_DIV2 0x00000002U /*!< PLLP division factor = 2 */ +#define RCC_PLLP_DIV3 0x00000003U /*!< PLLP division factor = 3 */ +#define RCC_PLLP_DIV4 0x00000004U /*!< PLLP division factor = 4 */ +#define RCC_PLLP_DIV5 0x00000005U /*!< PLLP division factor = 5 */ +#define RCC_PLLP_DIV6 0x00000006U /*!< PLLP division factor = 6 */ +#define RCC_PLLP_DIV7 0x00000007U /*!< PLLP division factor = 7 */ +#define RCC_PLLP_DIV8 0x00000008U /*!< PLLP division factor = 8 */ +#define RCC_PLLP_DIV9 0x00000009U /*!< PLLP division factor = 9 */ +#define RCC_PLLP_DIV10 0x0000000AU /*!< PLLP division factor = 10 */ +#define RCC_PLLP_DIV11 0x0000000BU /*!< PLLP division factor = 11 */ +#define RCC_PLLP_DIV12 0x0000000CU /*!< PLLP division factor = 12 */ +#define RCC_PLLP_DIV13 0x0000000DU /*!< PLLP division factor = 13 */ +#define RCC_PLLP_DIV14 0x0000000EU /*!< PLLP division factor = 14 */ +#define RCC_PLLP_DIV15 0x0000000FU /*!< PLLP division factor = 15 */ +#define RCC_PLLP_DIV16 0x00000010U /*!< PLLP division factor = 16 */ +#define RCC_PLLP_DIV17 0x00000011U /*!< PLLP division factor = 17 */ +#define RCC_PLLP_DIV18 0x00000012U /*!< PLLP division factor = 18 */ +#define RCC_PLLP_DIV19 0x00000013U /*!< PLLP division factor = 19 */ +#define RCC_PLLP_DIV20 0x00000014U /*!< PLLP division factor = 20 */ +#define RCC_PLLP_DIV21 0x00000015U /*!< PLLP division factor = 21 */ +#define RCC_PLLP_DIV22 0x00000016U /*!< PLLP division factor = 22 */ +#define RCC_PLLP_DIV23 0x00000017U /*!< PLLP division factor = 23 */ +#define RCC_PLLP_DIV24 0x00000018U /*!< PLLP division factor = 24 */ +#define RCC_PLLP_DIV25 0x00000019U /*!< PLLP division factor = 25 */ +#define RCC_PLLP_DIV26 0x0000001AU /*!< PLLP division factor = 26 */ +#define RCC_PLLP_DIV27 0x0000001BU /*!< PLLP division factor = 27 */ +#define RCC_PLLP_DIV28 0x0000001CU /*!< PLLP division factor = 28 */ +#define RCC_PLLP_DIV29 0x0000001DU /*!< PLLP division factor = 29 */ +#define RCC_PLLP_DIV30 0x0000001EU /*!< PLLP division factor = 30 */ +#define RCC_PLLP_DIV31 0x0000001FU /*!< PLLP division factor = 31 */ #else -#define RCC_PLLP_DIV7 ((uint32_t)0x00000007U) /*!< PLLP division factor = 7 */ -#define RCC_PLLP_DIV17 ((uint32_t)0x00000011U) /*!< PLLP division factor = 17 */ +#define RCC_PLLP_DIV7 0x00000007U /*!< PLLP division factor = 7 */ +#define RCC_PLLP_DIV17 0x00000011U /*!< PLLP division factor = 17 */ #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ /** * @} @@ -315,10 +314,10 @@ typedef struct /** @defgroup RCC_PLLQ_Clock_Divider PLLQ Clock Divider * @{ */ -#define RCC_PLLQ_DIV2 ((uint32_t)0x00000002U) /*!< PLLQ division factor = 2 */ -#define RCC_PLLQ_DIV4 ((uint32_t)0x00000004U) /*!< PLLQ division factor = 4 */ -#define RCC_PLLQ_DIV6 ((uint32_t)0x00000006U) /*!< PLLQ division factor = 6 */ -#define RCC_PLLQ_DIV8 ((uint32_t)0x00000008U) /*!< PLLQ division factor = 8 */ +#define RCC_PLLQ_DIV2 0x00000002U /*!< PLLQ division factor = 2 */ +#define RCC_PLLQ_DIV4 0x00000004U /*!< PLLQ division factor = 4 */ +#define RCC_PLLQ_DIV6 0x00000006U /*!< PLLQ division factor = 6 */ +#define RCC_PLLQ_DIV8 0x00000008U /*!< PLLQ division factor = 8 */ /** * @} */ @@ -326,10 +325,10 @@ typedef struct /** @defgroup RCC_PLLR_Clock_Divider PLLR Clock Divider * @{ */ -#define RCC_PLLR_DIV2 ((uint32_t)0x00000002U) /*!< PLLR division factor = 2 */ -#define RCC_PLLR_DIV4 ((uint32_t)0x00000004U) /*!< PLLR division factor = 4 */ -#define RCC_PLLR_DIV6 ((uint32_t)0x00000006U) /*!< PLLR division factor = 6 */ -#define RCC_PLLR_DIV8 ((uint32_t)0x00000008U) /*!< PLLR division factor = 8 */ +#define RCC_PLLR_DIV2 0x00000002U /*!< PLLR division factor = 2 */ +#define RCC_PLLR_DIV4 0x00000004U /*!< PLLR division factor = 4 */ +#define RCC_PLLR_DIV6 0x00000006U /*!< PLLR division factor = 6 */ +#define RCC_PLLR_DIV8 0x00000008U /*!< PLLR division factor = 8 */ /** * @} */ @@ -337,7 +336,7 @@ typedef struct /** @defgroup RCC_PLL_Clock_Source PLL Clock Source * @{ */ -#define RCC_PLLSOURCE_NONE ((uint32_t)0x00000000U) /*!< No clock selected as PLL entry clock source */ +#define RCC_PLLSOURCE_NONE 0x00000000U /*!< No clock selected as PLL entry clock source */ #define RCC_PLLSOURCE_MSI RCC_PLLCFGR_PLLSRC_MSI /*!< MSI clock selected as PLL entry clock source */ #define RCC_PLLSOURCE_HSI RCC_PLLCFGR_PLLSRC_HSI /*!< HSI clock selected as PLL entry clock source */ #define RCC_PLLSOURCE_HSE RCC_PLLCFGR_PLLSRC_HSE /*!< HSE clock selected as PLL entry clock source */ @@ -375,7 +374,14 @@ typedef struct * @{ */ #define RCC_PLLSAI2_SAI2CLK RCC_PLLSAI2CFGR_PLLSAI2PEN /*!< PLLSAI2CLK selection from PLLSAI2 */ +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) +#define RCC_PLLSAI2_DSICLK RCC_PLLSAI2CFGR_PLLSAI2QEN /*!< PLLDSICLK selection from PLLSAI2 */ +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ +#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) #define RCC_PLLSAI2_ADC2CLK RCC_PLLSAI2CFGR_PLLSAI2REN /*!< PLLADC2CLK selection from PLLSAI2 */ +#else +#define RCC_PLLSAI2_LTDCCLK RCC_PLLSAI2CFGR_PLLSAI2REN /*!< PLLLTDCCLK selection from PLLSAI2 */ +#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ /** * @} */ @@ -404,10 +410,10 @@ typedef struct /** @defgroup RCC_System_Clock_Type System Clock Type * @{ */ -#define RCC_CLOCKTYPE_SYSCLK ((uint32_t)0x00000001U) /*!< SYSCLK to configure */ -#define RCC_CLOCKTYPE_HCLK ((uint32_t)0x00000002U) /*!< HCLK to configure */ -#define RCC_CLOCKTYPE_PCLK1 ((uint32_t)0x00000004U) /*!< PCLK1 to configure */ -#define RCC_CLOCKTYPE_PCLK2 ((uint32_t)0x00000008U) /*!< PCLK2 to configure */ +#define RCC_CLOCKTYPE_SYSCLK 0x00000001U /*!< SYSCLK to configure */ +#define RCC_CLOCKTYPE_HCLK 0x00000002U /*!< HCLK to configure */ +#define RCC_CLOCKTYPE_PCLK1 0x00000004U /*!< PCLK1 to configure */ +#define RCC_CLOCKTYPE_PCLK2 0x00000008U /*!< PCLK2 to configure */ /** * @} */ @@ -465,10 +471,10 @@ typedef struct /** @defgroup RCC_RTC_Clock_Source RTC Clock Source * @{ */ -#define RCC_RTCCLKSOURCE_NO_CLK ((uint32_t)0x00000000U) /*!< No clock used as RTC clock */ -#define RCC_RTCCLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */ -#define RCC_RTCCLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */ -#define RCC_RTCCLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */ +#define RCC_RTCCLKSOURCE_NONE 0x00000000U /*!< No clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_LSE RCC_BDCR_RTCSEL_0 /*!< LSE oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_LSI RCC_BDCR_RTCSEL_1 /*!< LSI oscillator clock used as RTC clock */ +#define RCC_RTCCLKSOURCE_HSE_DIV32 RCC_BDCR_RTCSEL /*!< HSE oscillator clock divided by 32 used as RTC clock */ /** * @} */ @@ -476,8 +482,8 @@ typedef struct /** @defgroup RCC_MCO_Index MCO Index * @{ */ -#define RCC_MCO1 ((uint32_t)0x00000000U) -#define RCC_MCO RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/ +#define RCC_MCO1 0x00000000U +#define RCC_MCO RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/ /** * @} */ @@ -485,7 +491,7 @@ typedef struct /** @defgroup RCC_MCO1_Clock_Source MCO1 Clock Source * @{ */ -#define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)0x00000000U) /*!< MCO1 output disabled, no clock on MCO1 */ +#define RCC_MCO1SOURCE_NOCLOCK 0x00000000U /*!< MCO1 output disabled, no clock on MCO1 */ #define RCC_MCO1SOURCE_SYSCLK RCC_CFGR_MCOSEL_0 /*!< SYSCLK selection as MCO1 source */ #define RCC_MCO1SOURCE_MSI RCC_CFGR_MCOSEL_1 /*!< MSI selection as MCO1 source */ #define RCC_MCO1SOURCE_HSI (RCC_CFGR_MCOSEL_0| RCC_CFGR_MCOSEL_1) /*!< HSI selection as MCO1 source */ @@ -503,7 +509,7 @@ typedef struct /** @defgroup RCC_MCOx_Clock_Prescaler MCO1 Clock Prescaler * @{ */ -#define RCC_MCODIV_1 RCC_CFGR_MCOPRE_DIV1 /*!< MCO not divided */ +#define RCC_MCODIV_1 RCC_CFGR_MCOPRE_DIV1 /*!< MCO not divided */ #define RCC_MCODIV_2 RCC_CFGR_MCOPRE_DIV2 /*!< MCO divided by 2 */ #define RCC_MCODIV_4 RCC_CFGR_MCOPRE_DIV4 /*!< MCO divided by 4 */ #define RCC_MCODIV_8 RCC_CFGR_MCOPRE_DIV8 /*!< MCO divided by 8 */ @@ -545,34 +551,34 @@ typedef struct * @{ */ /* Flags in the CR register */ -#define RCC_FLAG_MSIRDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_MSIRDY))) /*!< MSI Ready flag */ -#define RCC_FLAG_HSIRDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_HSIRDY))) /*!< HSI Ready flag */ -#define RCC_FLAG_HSERDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_HSERDY))) /*!< HSE Ready flag */ -#define RCC_FLAG_PLLRDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_PLLRDY))) /*!< PLL Ready flag */ -#define RCC_FLAG_PLLSAI1RDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_PLLSAI1RDY))) /*!< PLLSAI1 Ready flag */ +#define RCC_FLAG_MSIRDY ((CR_REG_INDEX << 5U) | RCC_CR_MSIRDY_Pos) /*!< MSI Ready flag */ +#define RCC_FLAG_HSIRDY ((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_Pos) /*!< HSI Ready flag */ +#define RCC_FLAG_HSERDY ((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_Pos) /*!< HSE Ready flag */ +#define RCC_FLAG_PLLRDY ((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_Pos) /*!< PLL Ready flag */ +#define RCC_FLAG_PLLSAI1RDY ((CR_REG_INDEX << 5U) | RCC_CR_PLLSAI1RDY_Pos) /*!< PLLSAI1 Ready flag */ #if defined(RCC_PLLSAI2_SUPPORT) -#define RCC_FLAG_PLLSAI2RDY ((uint32_t)((CR_REG_INDEX << 5U) | POSITION_VAL(RCC_CR_PLLSAI2RDY))) /*!< PLLSAI2 Ready flag */ +#define RCC_FLAG_PLLSAI2RDY ((CR_REG_INDEX << 5U) | RCC_CR_PLLSAI2RDY_Pos) /*!< PLLSAI2 Ready flag */ #endif /* RCC_PLLSAI2_SUPPORT */ /* Flags in the BDCR register */ -#define RCC_FLAG_LSERDY ((uint32_t)((BDCR_REG_INDEX << 5U) | POSITION_VAL(RCC_BDCR_LSERDY))) /*!< LSE Ready flag */ -#define RCC_FLAG_LSECSSD ((uint32_t)((BDCR_REG_INDEX << 5U) | POSITION_VAL(RCC_BDCR_LSECSSD))) /*!< LSE Clock Security System Interrupt flag */ +#define RCC_FLAG_LSERDY ((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSERDY_Pos) /*!< LSE Ready flag */ +#define RCC_FLAG_LSECSSD ((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSECSSD_Pos) /*!< LSE Clock Security System Interrupt flag */ /* Flags in the CSR register */ -#define RCC_FLAG_LSIRDY ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_LSIRDY))) /*!< LSI Ready flag */ -#define RCC_FLAG_RMVF ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_RMVF))) /*!< Remove reset flag */ -#define RCC_FLAG_FWRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_FWRSTF))) /*!< Firewall reset flag */ -#define RCC_FLAG_OBLRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_OBLRSTF))) /*!< Option Byte Loader reset flag */ -#define RCC_FLAG_PINRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_PINRSTF))) /*!< PIN reset flag */ -#define RCC_FLAG_BORRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_BORRSTF))) /*!< BOR reset flag */ -#define RCC_FLAG_SFTRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_SFTRSTF))) /*!< Software Reset flag */ -#define RCC_FLAG_IWDGRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_IWDGRSTF))) /*!< Independent Watchdog reset flag */ -#define RCC_FLAG_WWDGRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_WWDGRSTF))) /*!< Window watchdog reset flag */ -#define RCC_FLAG_LPWRRST ((uint32_t)((CSR_REG_INDEX << 5U) | POSITION_VAL(RCC_CSR_LPWRRSTF))) /*!< Low-Power reset flag */ +#define RCC_FLAG_LSIRDY ((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_Pos) /*!< LSI Ready flag */ +#define RCC_FLAG_RMVF ((CSR_REG_INDEX << 5U) | RCC_CSR_RMVF_Pos) /*!< Remove reset flag */ +#define RCC_FLAG_FWRST ((CSR_REG_INDEX << 5U) | RCC_CSR_FWRSTF_Pos) /*!< Firewall reset flag */ +#define RCC_FLAG_OBLRST ((CSR_REG_INDEX << 5U) | RCC_CSR_OBLRSTF_Pos) /*!< Option Byte Loader reset flag */ +#define RCC_FLAG_PINRST ((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_Pos) /*!< PIN reset flag */ +#define RCC_FLAG_BORRST ((CSR_REG_INDEX << 5U) | RCC_CSR_BORRSTF_Pos) /*!< BOR reset flag */ +#define RCC_FLAG_SFTRST ((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_Pos) /*!< Software Reset flag */ +#define RCC_FLAG_IWDGRST ((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_Pos) /*!< Independent Watchdog reset flag */ +#define RCC_FLAG_WWDGRST ((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_Pos) /*!< Window watchdog reset flag */ +#define RCC_FLAG_LPWRRST ((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_Pos) /*!< Low-Power reset flag */ #if defined(RCC_HSI48_SUPPORT) /* Flags in the CRRCR register */ -#define RCC_FLAG_HSI48RDY ((uint32_t)((CRRCR_REG_INDEX << 5U) | POSITION_VAL(RCC_CRRCR_HSI48RDY))) /*!< HSI48 Ready flag */ +#define RCC_FLAG_HSI48RDY ((CRRCR_REG_INDEX << 5U) | RCC_CRRCR_HSI48RDY_Pos) /*!< HSI48 Ready flag */ #endif /* RCC_HSI48_SUPPORT */ /** * @} @@ -581,19 +587,19 @@ typedef struct /** @defgroup RCC_LSEDrive_Config LSE Drive Config * @{ */ -#define RCC_LSEDRIVE_LOW ((uint32_t)0x00000000U) /*!< LSE low drive capability */ -#define RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_0 /*!< LSE medium low drive capability */ -#define RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_1 /*!< LSE medium high drive capability */ -#define RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< LSE high drive capability */ +#define RCC_LSEDRIVE_LOW 0x00000000U /*!< LSE low drive capability */ +#define RCC_LSEDRIVE_MEDIUMLOW RCC_BDCR_LSEDRV_0 /*!< LSE medium low drive capability */ +#define RCC_LSEDRIVE_MEDIUMHIGH RCC_BDCR_LSEDRV_1 /*!< LSE medium high drive capability */ +#define RCC_LSEDRIVE_HIGH RCC_BDCR_LSEDRV /*!< LSE high drive capability */ /** * @} */ -/** @defgroup RCC_Stop_WakeUpClock Wake-Up from STOP Clock +/** @defgroup RCC_Stop_WakeUpClock Wake-Up from STOP Clock * @{ */ -#define RCC_STOP_WAKEUPCLOCK_MSI ((uint32_t)0x00000000U) /*!< MSI selection after wake-up from STOP */ -#define RCC_STOP_WAKEUPCLOCK_HSI RCC_CFGR_STOPWUCK /*!< HSI selection after wake-up from STOP */ +#define RCC_STOP_WAKEUPCLOCK_MSI 0x00000000U /*!< MSI selection after wake-up from STOP */ +#define RCC_STOP_WAKEUPCLOCK_HSI RCC_CFGR_STOPWUCK /*!< HSI selection after wake-up from STOP */ /** * @} */ @@ -632,6 +638,16 @@ typedef struct UNUSED(tmpreg); \ } while(0) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMAMUX1EN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMAMUX1EN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_FLASHEN); \ @@ -655,7 +671,7 @@ typedef struct tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_TSCEN); \ UNUSED(tmpreg); \ } while(0) - + #if defined(DMA2D) #define __HAL_RCC_DMA2D_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ @@ -664,13 +680,27 @@ typedef struct tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN); \ UNUSED(tmpreg); \ } while(0) -#endif /* DMA2D */ +#endif /* DMA2D */ + +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GFXMMUEN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GFXMMUEN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* GFXMMU */ #define __HAL_RCC_DMA1_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN) #define __HAL_RCC_DMA2_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMAMUX1EN) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_FLASHEN) #define __HAL_RCC_CRC_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN) @@ -679,7 +709,11 @@ typedef struct #if defined(DMA2D) #define __HAL_RCC_DMA2D_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN) -#endif /* DMA2D */ +#endif /* DMA2D */ + +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_CLK_DISABLE() CLEAR_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GFXMMUEN) +#endif /* GFXMMU */ /** * @} @@ -800,7 +834,7 @@ typedef struct /* Delay after an RCC peripheral clock enabling */ \ tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_DCMIEN); \ UNUSED(tmpreg); \ - } while(0) + } while(0) #endif /* DCMI */ #if defined(AES) @@ -820,7 +854,7 @@ typedef struct /* Delay after an RCC peripheral clock enabling */ \ tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_HASHEN); \ UNUSED(tmpreg); \ - } while(0) + } while(0) #endif /* HASH */ #define __HAL_RCC_RNG_CLK_ENABLE() do { \ @@ -831,6 +865,26 @@ typedef struct UNUSED(tmpreg); \ } while(0) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_OSPIMEN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_OSPIMEN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2ENR_SDMMC1EN) +#define __HAL_RCC_SDMMC1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_SDMMC1EN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_SDMMC1EN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* SDMMC1 && RCC_AHB2ENR_SDMMC1EN */ + #define __HAL_RCC_GPIOA_CLK_DISABLE() CLEAR_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOAEN) @@ -880,6 +934,14 @@ typedef struct #define __HAL_RCC_RNG_CLK_DISABLE() CLEAR_BIT(RCC->AHB2ENR, RCC_AHB2ENR_RNGEN) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_CLK_DISABLE() CLEAR_BIT(RCC->AHB2ENR, RCC_AHB2ENR_OSPIMEN) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2ENR_SDMMC1EN) +#define __HAL_RCC_SDMMC1_CLK_DISABLE() CLEAR_BIT(RCC->AHB2ENR, RCC_AHB2ENR_SDMMC1EN) +#endif /* SDMMC1 && RCC_AHB2ENR_SDMMC1EN */ + /** * @} */ @@ -912,6 +974,26 @@ typedef struct } while(0) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI1EN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI1EN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI2EN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI2EN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* OCTOSPI2 */ + #if defined(FMC_BANK1) #define __HAL_RCC_FMC_CLK_DISABLE() CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN) #endif /* FMC_BANK1 */ @@ -920,6 +1002,14 @@ typedef struct #define __HAL_RCC_QSPI_CLK_DISABLE() CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_QSPIEN) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_CLK_DISABLE() CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI1EN) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_CLK_DISABLE() CLEAR_BIT(RCC->AHB3ENR, RCC_AHB3ENR_OSPI2EN) +#endif /* OCTOSPI2 */ + /** * @} */ @@ -1123,7 +1213,7 @@ typedef struct tmpreg = READ_BIT(RCC->APB1ENR1, RCC_APB1ENR1_CAN1EN); \ UNUSED(tmpreg); \ } while(0) - + #if defined(CAN2) #define __HAL_RCC_CAN2_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ @@ -1319,7 +1409,7 @@ typedef struct UNUSED(tmpreg); \ } while(0) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2ENR_SDMMC1EN) #define __HAL_RCC_SDMMC1_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SDMMC1EN); \ @@ -1327,7 +1417,7 @@ typedef struct tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDMMC1EN); \ UNUSED(tmpreg); \ } while(0) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2ENR_SDMMC1EN */ #define __HAL_RCC_TIM1_CLK_ENABLE() do { \ __IO uint32_t tmpreg; \ @@ -1418,12 +1508,32 @@ typedef struct } while(0) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_CLK_ENABLE() do { \ + __IO uint32_t tmpreg; \ + SET_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN); \ + /* Delay after an RCC peripheral clock enabling */ \ + tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN); \ + UNUSED(tmpreg); \ + } while(0) +#endif /* DSI */ + #define __HAL_RCC_SYSCFG_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2ENR_SDMMC1EN) #define __HAL_RCC_SDMMC1_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_SDMMC1EN) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2ENR_SDMMC1EN */ #define __HAL_RCC_TIM1_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN) @@ -1453,6 +1563,14 @@ typedef struct #define __HAL_RCC_DFSDM1_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_CLK_DISABLE() CLEAR_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN) +#endif /* DSI */ + /** * @} */ @@ -1469,6 +1587,10 @@ typedef struct #define __HAL_RCC_DMA2_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN) != RESET) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMAMUX1EN) != RESET) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_FLASHEN) != RESET) #define __HAL_RCC_CRC_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN) != RESET) @@ -1479,11 +1601,19 @@ typedef struct #define __HAL_RCC_DMA2D_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN) != RESET) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_IS_CLK_ENABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GFXMMUEN) != RESET) +#endif /* GFXMMU */ + #define __HAL_RCC_DMA1_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA1EN) == RESET) #define __HAL_RCC_DMA2_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2EN) == RESET) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMAMUX1EN) == RESET) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_FLASHEN) == RESET) #define __HAL_RCC_CRC_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_CRCEN) == RESET) @@ -1494,6 +1624,10 @@ typedef struct #define __HAL_RCC_DMA2D_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_DMA2DEN) == RESET) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_IS_CLK_DISABLED() (READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GFXMMUEN) == RESET) +#endif /* GFXMMU */ + /** * @} */ @@ -1508,7 +1642,7 @@ typedef struct #define __HAL_RCC_GPIOA_IS_CLK_ENABLED() (READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOAEN) != RESET) -#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() (READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOCEN) != RESET) +#define __HAL_RCC_GPIOB_IS_CLK_ENABLED() (READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOBEN) != RESET) #define __HAL_RCC_GPIOC_IS_CLK_ENABLED() (READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOCEN) != RESET) @@ -1840,9 +1974,9 @@ typedef struct #define __HAL_RCC_FIREWALL_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_FWEN) != RESET) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2ENR_SDMMC1EN) #define __HAL_RCC_SDMMC1_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDMMC1EN) != RESET) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2ENR_SDMMC1EN */ #define __HAL_RCC_TIM1_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN) != RESET) @@ -1872,12 +2006,20 @@ typedef struct #define __HAL_RCC_DFSDM1_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN) != RESET) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN) != RESET) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_IS_CLK_ENABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN) != RESET) +#endif /* DSI */ + #define __HAL_RCC_SYSCFG_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SYSCFGEN) == RESET) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2ENR_SDMMC1EN) #define __HAL_RCC_SDMMC1_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SDMMC1EN) == RESET) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2ENR_SDMMC1EN */ #define __HAL_RCC_TIM1_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN) == RESET) @@ -1907,6 +2049,14 @@ typedef struct #define __HAL_RCC_DFSDM1_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DFSDM1EN) == RESET) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_LTDCEN) == RESET) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_IS_CLK_DISABLED() (READ_BIT(RCC->APB2ENR, RCC_APB2ENR_DSIEN) == RESET) +#endif /* DSI */ + /** * @} */ @@ -1921,6 +2071,10 @@ typedef struct #define __HAL_RCC_DMA2_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMA2RST) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMAMUX1RST) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_FLASHRST) #define __HAL_RCC_CRC_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_CRCRST) @@ -1931,6 +2085,10 @@ typedef struct #define __HAL_RCC_DMA2D_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMA2DRST) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_FORCE_RESET() SET_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_GFXMMURST) +#endif /* GFXMMU */ + #define __HAL_RCC_AHB1_RELEASE_RESET() WRITE_REG(RCC->AHB1RSTR, 0x00000000U) @@ -1938,6 +2096,10 @@ typedef struct #define __HAL_RCC_DMA2_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMA2RST) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMAMUX1RST) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_FLASHRST) #define __HAL_RCC_CRC_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_CRCRST) @@ -1948,6 +2110,10 @@ typedef struct #define __HAL_RCC_DMA2D_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_DMA2DRST) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_RELEASE_RESET() CLEAR_BIT(RCC->AHB1RSTR, RCC_AHB1RSTR_GFXMMURST) +#endif /* GFXMMU */ + /** * @} */ @@ -2006,6 +2172,14 @@ typedef struct #define __HAL_RCC_RNG_FORCE_RESET() SET_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_RNGRST) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_FORCE_RESET() SET_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_OSPIMRST) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2RSTR_SDMMC1RST) +#define __HAL_RCC_SDMMC1_FORCE_RESET() SET_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_SDMMC1RST) +#endif /* SDMMC1 && RCC_AHB2RSTR_SDMMC1RST */ + #define __HAL_RCC_AHB2_RELEASE_RESET() WRITE_REG(RCC->AHB2RSTR, 0x00000000U) @@ -2057,6 +2231,14 @@ typedef struct #define __HAL_RCC_RNG_RELEASE_RESET() CLEAR_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_RNGRST) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_RELEASE_RESET() CLEAR_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_OSPIMRST) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2RSTR_SDMMC1RST) +#define __HAL_RCC_SDMMC1_RELEASE_RESET() CLEAR_BIT(RCC->AHB2RSTR, RCC_AHB2RSTR_SDMMC1RST) +#endif /* SDMMC1 && RCC_AHB2RSTR_SDMMC1RST */ + /** * @} */ @@ -2075,6 +2257,14 @@ typedef struct #define __HAL_RCC_QSPI_FORCE_RESET() SET_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_QSPIRST) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_FORCE_RESET() SET_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_OSPI1RST) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_FORCE_RESET() SET_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_OSPI2RST) +#endif /* OCTOSPI2 */ + #define __HAL_RCC_AHB3_RELEASE_RESET() WRITE_REG(RCC->AHB3RSTR, 0x00000000U) #if defined(FMC_BANK1) @@ -2085,6 +2275,14 @@ typedef struct #define __HAL_RCC_QSPI_RELEASE_RESET() CLEAR_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_QSPIRST) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_RELEASE_RESET() CLEAR_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_OSPI1RST) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_RELEASE_RESET() CLEAR_BIT(RCC->AHB3RSTR, RCC_AHB3RSTR_OSPI2RST) +#endif /* OCTOSPI2 */ + /** * @} */ @@ -2278,9 +2476,9 @@ typedef struct #define __HAL_RCC_SYSCFG_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_SYSCFGRST) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2RSTR_SDMMC1RST) #define __HAL_RCC_SDMMC1_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_SDMMC1RST) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2RSTR_SDMMC1RST */ #define __HAL_RCC_TIM1_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_TIM1RST) @@ -2310,14 +2508,22 @@ typedef struct #define __HAL_RCC_DFSDM1_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_DFSDM1RST) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_LTDCRST) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_FORCE_RESET() SET_BIT(RCC->APB2RSTR, RCC_APB2RSTR_DSIRST) +#endif /* DSI */ + #define __HAL_RCC_APB2_RELEASE_RESET() WRITE_REG(RCC->APB2RSTR, 0x00000000U) #define __HAL_RCC_SYSCFG_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_SYSCFGRST) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2RSTR_SDMMC1RST) #define __HAL_RCC_SDMMC1_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_SDMMC1RST) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2RSTR_SDMMC1RST */ #define __HAL_RCC_TIM1_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_TIM1RST) @@ -2347,6 +2553,14 @@ typedef struct #define __HAL_RCC_DFSDM1_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_DFSDM1RST) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_LTDCRST) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_RELEASE_RESET() CLEAR_BIT(RCC->APB2RSTR, RCC_APB2RSTR_DSIRST) +#endif /* DSI */ + /** * @} */ @@ -2364,6 +2578,10 @@ typedef struct #define __HAL_RCC_DMA2_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2SMEN) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMAMUX1SMEN) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_FLASHSMEN) #define __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_SRAM1SMEN) @@ -2376,11 +2594,19 @@ typedef struct #define __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2DSMEN) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_GFXMMUSMEN) +#endif /* GFXMMU */ + #define __HAL_RCC_DMA1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA1SMEN) #define __HAL_RCC_DMA2_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2SMEN) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMAMUX1SMEN) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_FLASHSMEN) #define __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_SRAM1SMEN) @@ -2393,6 +2619,10 @@ typedef struct #define __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2DSMEN) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_GFXMMUSMEN) +#endif /* GFXMMU */ + /** * @} */ @@ -2436,6 +2666,10 @@ typedef struct #define __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM2SMEN) +#if defined(SRAM3) +#define __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM3SMEN) +#endif /* SRAM3 */ + #if defined(USB_OTG_FS) #define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OTGFSSMEN) #endif /* USB_OTG_FS */ @@ -2456,6 +2690,14 @@ typedef struct #define __HAL_RCC_RNG_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_RNGSMEN) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OSPIMSMEN) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2SMENR_SDMMC1SMEN) +#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SDMMC1SMEN) +#endif /* SDMMC1 && RCC_AHB2SMENR_SDMMC1SMEN */ + #define __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_GPIOASMEN) @@ -2487,6 +2729,10 @@ typedef struct #define __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM2SMEN) +#if defined(SRAM3) +#define __HAL_RCC_SRAM3_IS_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM3SMEN) +#endif /* SRAM3 */ + #if defined(USB_OTG_FS) #define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OTGFSSMEN) #endif /* USB_OTG_FS */ @@ -2507,6 +2753,14 @@ typedef struct #define __HAL_RCC_RNG_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_RNGSMEN) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OSPIMSMEN) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2SMENR_SDMMC1SMEN) +#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SDMMC1SMEN) +#endif /* SDMMC1 && RCC_AHB2SMENR_SDMMC1SMEN */ + /** * @} */ @@ -2524,6 +2778,14 @@ typedef struct #define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_QSPISMEN) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI1SMEN) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI2SMEN) +#endif /* OCTOSPI2 */ + #if defined(FMC_BANK1) #define __HAL_RCC_FMC_CLK_SLEEP_ENABLE() SET_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_FMCSMEN) #endif /* FMC_BANK1 */ @@ -2532,6 +2794,14 @@ typedef struct #define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_QSPISMEN) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI1SMEN) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI2SMEN) +#endif /* OCTOSPI2 */ + #if defined(FMC_BANK1) #define __HAL_RCC_FMC_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_FMCSMEN) #endif /* FMC_BANK1 */ @@ -2745,9 +3015,9 @@ typedef struct #define __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SYSCFGSMEN) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2SMENR_SDMMC1SMEN) #define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SDMMC1SMEN) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2SMENR_SDMMC1SMEN */ #define __HAL_RCC_TIM1_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_TIM1SMEN) @@ -2777,12 +3047,20 @@ typedef struct #define __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DFSDM1SMEN) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_LTDCSMEN) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_CLK_SLEEP_ENABLE() SET_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DSISMEN) +#endif /* DSI */ + #define __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SYSCFGSMEN) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2SMENR_SDMMC1SMEN) #define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SDMMC1SMEN) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2SMENR_SDMMC1SMEN */ #define __HAL_RCC_TIM1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_TIM1SMEN) @@ -2812,6 +3090,14 @@ typedef struct #define __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DFSDM1SMEN) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_LTDCSMEN) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_CLK_SLEEP_DISABLE() CLEAR_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DSISMEN) +#endif /* DSI */ + /** * @} */ @@ -2829,6 +3115,10 @@ typedef struct #define __HAL_RCC_DMA2_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2SMEN) != RESET) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMAMUX1SMEN) != RESET) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_FLASHSMEN) != RESET) #define __HAL_RCC_SRAM1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_SRAM1SMEN) != RESET) @@ -2841,11 +3131,19 @@ typedef struct #define __HAL_RCC_DMA2D_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2DSMEN) != RESET) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_GFXMMUSMEN) != RESET) +#endif /* GFXMMU */ + #define __HAL_RCC_DMA1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA1SMEN) == RESET) #define __HAL_RCC_DMA2_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2SMEN) == RESET) +#if defined(DMAMUX1) +#define __HAL_RCC_DMAMUX1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMAMUX1SMEN) == RESET) +#endif /* DMAMUX1 */ + #define __HAL_RCC_FLASH_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_FLASHSMEN) == RESET) #define __HAL_RCC_SRAM1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_SRAM1SMEN) == RESET) @@ -2858,6 +3156,10 @@ typedef struct #define __HAL_RCC_DMA2D_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_DMA2DSMEN) == RESET) #endif /* DMA2D */ +#if defined(GFXMMU) +#define __HAL_RCC_GFXMMU_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB1SMENR, RCC_AHB1SMENR_GFXMMUSMEN) == RESET) +#endif /* GFXMMU */ + /** * @} */ @@ -2901,6 +3203,10 @@ typedef struct #define __HAL_RCC_SRAM2_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM2SMEN) != RESET) +#if defined(SRAM3) +#define __HAL_RCC_SRAM3_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM3SMEN) != RESET) +#endif /* SRAM3 */ + #if defined(USB_OTG_FS) #define __HAL_RCC_USB_OTG_FS_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OTGFSSMEN) != RESET) #endif /* USB_OTG_FS */ @@ -2921,6 +3227,14 @@ typedef struct #define __HAL_RCC_RNG_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_RNGSMEN) != RESET) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OSPIMSMEN) != RESET) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2SMENR_SDMMC1SMEN) +#define __HAL_RCC_SDMMC1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SDMMC1SMEN) != RESET) +#endif /* SDMMC1 && RCC_AHB2SMENR_SDMMC1SMEN */ + #define __HAL_RCC_GPIOA_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_GPIOASMEN) == RESET) @@ -2952,6 +3266,10 @@ typedef struct #define __HAL_RCC_SRAM2_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM2SMEN) == RESET) +#if defined(SRAM3) +#define __HAL_RCC_SRAM3_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SRAM3SMEN) == RESET) +#endif /* SRAM3 */ + #if defined(USB_OTG_FS) #define __HAL_RCC_USB_OTG_FS_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OTGFSSMEN) == RESET) #endif /* USB_OTG_FS */ @@ -2972,6 +3290,14 @@ typedef struct #define __HAL_RCC_RNG_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_RNGSMEN) == RESET) +#if defined(OCTOSPIM) +#define __HAL_RCC_OSPIM_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_OSPIMSMEN) == RESET) +#endif /* OCTOSPIM */ + +#if defined(SDMMC1) && defined(RCC_AHB2SMENR_SDMMC1SMEN) +#define __HAL_RCC_SDMMC1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB2SMENR, RCC_AHB2SMENR_SDMMC1SMEN) == RESET) +#endif /* SDMMC1 && RCC_AHB2SMENR_SDMMC1SMEN */ + /** * @} */ @@ -2989,14 +3315,31 @@ typedef struct #define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_QSPISMEN) != RESET) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI1SMEN) != RESET) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI2SMEN) != RESET) +#endif /* OCTOSPI2 */ + #if defined(FMC_BANK1) #define __HAL_RCC_FMC_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_FMCSMEN) != RESET) #endif /* FMC_BANK1 */ + #if defined(QUADSPI) #define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_QSPISMEN) == RESET) #endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define __HAL_RCC_OSPI1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI1SMEN) == RESET) +#endif /* OCTOSPI1 */ + +#if defined(OCTOSPI2) +#define __HAL_RCC_OSPI2_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_OSPI2SMEN) == RESET) +#endif /* OCTOSPI2 */ + #if defined(FMC_BANK1) #define __HAL_RCC_FMC_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->AHB3SMENR, RCC_AHB3SMENR_FMCSMEN) == RESET) #endif /* FMC_BANK1 */ @@ -3210,9 +3553,9 @@ typedef struct #define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SYSCFGSMEN) != RESET) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2SMENR_SDMMC1SMEN) #define __HAL_RCC_SDMMC1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SDMMC1SMEN) != RESET) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2SMENR_SDMMC1SMEN */ #define __HAL_RCC_TIM1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_TIM1SMEN) != RESET) @@ -3242,12 +3585,20 @@ typedef struct #define __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DFSDM1SMEN) != RESET) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_LTDCSMEN) != RESET) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_IS_CLK_SLEEP_ENABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DSISMEN) != RESET) +#endif /* DSI */ + #define __HAL_RCC_SYSCFG_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SYSCFGSMEN) == RESET) -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2SMENR_SDMMC1SMEN) #define __HAL_RCC_SDMMC1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_SDMMC1SMEN) == RESET) -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2SMENR_SDMMC1SMEN */ #define __HAL_RCC_TIM1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_TIM1SMEN) == RESET) @@ -3277,13 +3628,21 @@ typedef struct #define __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DFSDM1SMEN) == RESET) #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +#define __HAL_RCC_LTDC_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_LTDCSMEN) == RESET) +#endif /* LTDC */ + +#if defined(DSI) +#define __HAL_RCC_DSI_IS_CLK_SLEEP_DISABLED() (READ_BIT(RCC->APB2SMENR, RCC_APB2SMENR_DSISMEN) == RESET) +#endif /* DSI */ + /** * @} */ /** @defgroup RCC_Backup_Domain_Reset RCC Backup Domain Reset - * @{ - */ + * @{ + */ /** @brief Macros to force or release the Backup domain reset. * @note This function resets the RTC peripheral (including the backup registers) @@ -3300,8 +3659,8 @@ typedef struct */ /** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration - * @{ - */ + * @{ + */ /** @brief Macros to enable or disable the RTC clock. * @note As the RTC is in the Backup domain and write access is denied to @@ -3342,13 +3701,13 @@ typedef struct /** @brief Macro to adjust the Internal High Speed 16MHz oscillator (HSI) calibration value. * @note The calibration is used to compensate for the variations in voltage * and temperature that influence the frequency of the internal HSI RC. - * @param __HSICALIBRATIONVALUE__: specifies the calibration trimming value + * @param __HSICALIBRATIONVALUE__ specifies the calibration trimming value * (default is RCC_HSICALIBRATION_DEFAULT). * This parameter must be a number between 0 and 0x1F (STM32L43x/STM32L44x/STM32L47x/STM32L48x) or 0x7F (for other devices). * @retval None */ #define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(__HSICALIBRATIONVALUE__) \ - MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, (uint32_t)(__HSICALIBRATIONVALUE__) << POSITION_VAL(RCC_ICSCR_HSITRIM)) + MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, (__HSICALIBRATIONVALUE__) << RCC_ICSCR_HSITRIM_Pos) /** * @brief Macros to enable or disable the wakeup the Internal High Speed oscillator (HSI) @@ -3400,13 +3759,13 @@ typedef struct * and temperature that influence the frequency of the internal MSI RC. * Refer to the Application Note AN3300 for more details on how to * calibrate the MSI. - * @param __MSICALIBRATIONVALUE__: specifies the calibration trimming value + * @param __MSICALIBRATIONVALUE__ specifies the calibration trimming value * (default is RCC_MSICALIBRATION_DEFAULT). * This parameter must be a number between 0 and 255. * @retval None */ #define __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(__MSICALIBRATIONVALUE__) \ - MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, (uint32_t)(__MSICALIBRATIONVALUE__) << 8) + MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, (__MSICALIBRATIONVALUE__) << RCC_ICSCR_MSITRIM_Pos) /** * @brief Macro configures the Internal Multi Speed oscillator (MSI) clock range in run mode @@ -3418,7 +3777,7 @@ typedef struct * @note MSIRANGE can be modified when MSI is OFF (MSION=0) or when MSI is ready * (MSIRDY=1). * @note The MSI clock range after reset can be modified on the fly. - * @param __MSIRANGEVALUE__: specifies the MSI clock range. + * @param __MSIRANGEVALUE__ specifies the MSI clock range. * This parameter must be one of the following values: * @arg @ref RCC_MSIRANGE_0 MSI clock is around 100 KHz * @arg @ref RCC_MSIRANGE_1 MSI clock is around 200 KHz @@ -3443,7 +3802,7 @@ typedef struct /** * @brief Macro configures the Internal Multi Speed oscillator (MSI) clock range after Standby mode * After Standby its frequency can be selected between 4 possible values (1, 2, 4 or 8 MHz). - * @param __MSIRANGEVALUE__: specifies the MSI clock range. + * @param __MSIRANGEVALUE__ specifies the MSI clock range. * This parameter must be one of the following values: * @arg @ref RCC_MSIRANGE_4 MSI clock is around 1 MHz * @arg @ref RCC_MSIRANGE_5 MSI clock is around 2 MHz @@ -3472,8 +3831,8 @@ typedef struct */ #define __HAL_RCC_GET_MSI_RANGE() \ ((READ_BIT(RCC->CR, RCC_CR_MSIRGSEL) != RESET) ? \ - (uint32_t)(READ_BIT(RCC->CR, RCC_CR_MSIRANGE)) : \ - (uint32_t)(READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE) >> 4)) + READ_BIT(RCC->CR, RCC_CR_MSIRANGE) : \ + READ_BIT(RCC->CSR, RCC_CSR_MSISRANGE) >> 4U) /** @brief Macros to enable or disable the Internal Low Speed oscillator (LSI). * @note After enabling the LSI, the application software should wait on @@ -3503,7 +3862,7 @@ typedef struct * @note This function reset the CSSON bit, so if the clock security system(CSS) * was previously enabled you have to enable it again after calling this * function. - * @param __STATE__: specifies the new state of the HSE. + * @param __STATE__ specifies the new state of the HSE. * This parameter can be one of the following values: * @arg @ref RCC_HSE_OFF Turn OFF the HSE oscillator, HSERDY flag goes low after * 6 HSE oscillator clock cycles. @@ -3532,8 +3891,8 @@ typedef struct /** * @brief Macro to configure the External Low Speed oscillator (LSE). * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not - * supported by this macro. User should request a transition to LSE Off - * first and then LSE On or LSE Bypass. + * supported by this macro. User should request a transition to LSE Off + * first and then LSE On or LSE Bypass. * @note As the LSE is in the Backup domain and write access is denied to * this domain after reset, you have to enable write access using * HAL_PWR_EnableBkUpAccess() function before to configure the LSE @@ -3541,7 +3900,7 @@ typedef struct * @note After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application * software should wait on LSERDY flag to be set indicating that LSE clock * is stable and can be used to clock the RTC. - * @param __STATE__: specifies the new state of the LSE. + * @param __STATE__ specifies the new state of the LSE. * This parameter can be one of the following values: * @arg @ref RCC_LSE_OFF Turn OFF the LSE oscillator, LSERDY flag goes low after * 6 LSE oscillator clock cycles. @@ -3591,9 +3950,9 @@ typedef struct * Backup domain is reset using __HAL_RCC_BACKUPRESET_FORCE() macro, or by * a Power On Reset (POR). * - * @param __RTC_CLKSOURCE__: specifies the RTC clock source. + * @param __RTC_CLKSOURCE__ specifies the RTC clock source. * This parameter can be one of the following values: - * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_NONE No clock selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV32 HSE clock divided by 32 selected @@ -3612,12 +3971,12 @@ typedef struct /** @brief Macro to get the RTC clock source. * @retval The returned value can be one of the following: - * @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock. + * @arg @ref RCC_RTCCLKSOURCE_NONE No clock selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock. * @arg @ref RCC_RTCCLKSOURCE_HSE_DIV32 HSE clock divided by 32 selected */ -#define __HAL_RCC_GET_RTC_SOURCE() ((uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL))) +#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL)) /** @brief Macros to enable or disable the main PLL. * @note After enabling the main PLL, the application software should wait on @@ -3633,7 +3992,7 @@ typedef struct /** @brief Macro to configure the PLL clock source. * @note This function must be used only when the main PLL is disabled. - * @param __PLLSOURCE__: specifies the PLL entry clock source. + * @param __PLLSOURCE__ specifies the PLL entry clock source. * This parameter can be one of the following values: * @arg @ref RCC_PLLSOURCE_NONE No clock selected as PLL clock entry * @arg @ref RCC_PLLSOURCE_MSI MSI oscillator clock selected as PLL clock entry @@ -3641,20 +4000,21 @@ typedef struct * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry * @note This clock source is common for the main PLL and audio PLL (PLLSAI1 and PLLSAI2). * @retval None - * + * */ #define __HAL_RCC_PLL_PLLSOURCE_CONFIG(__PLLSOURCE__) \ MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, (__PLLSOURCE__)) /** @brief Macro to configure the PLL source division factor M. * @note This function must be used only when the main PLL is disabled. - * @param __PLLM__: specifies the division factor for PLL VCO input clock - * This parameter must be a number between Min_Data = 1 and Max_Data = 8. + * @param __PLLM__ specifies the division factor for PLL VCO input clock + * This parameter must be a number between Min_Data = 1 and Max_Data = 16 on STM32L4Rx/STM32L4Sx devices. + * This parameter must be a number between Min_Data = 1 and Max_Data = 8 on other devices. * @note You have to set the PLLM parameter correctly to ensure that the VCO input * frequency ranges from 4 to 16 MHz. It is recommended to select a frequency * of 16 MHz to limit PLL jitter. * @retval None - * + * */ #define __HAL_RCC_PLL_PLLM_CONFIG(__PLLM__) \ MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLM, ((__PLLM__) - 1) << 4U) @@ -3663,7 +4023,7 @@ typedef struct * @brief Macro to configure the main PLL clock source, multiplication and division factors. * @note This function must be used only when the main PLL is disabled. * - * @param __PLLSOURCE__: specifies the PLL entry clock source. + * @param __PLLSOURCE__ specifies the PLL entry clock source. * This parameter can be one of the following values: * @arg @ref RCC_PLLSOURCE_NONE No clock selected as PLL clock entry * @arg @ref RCC_PLLSOURCE_MSI MSI oscillator clock selected as PLL clock entry @@ -3671,28 +4031,29 @@ typedef struct * @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry * @note This clock source is common for the main PLL and audio PLL (PLLSAI1 and PLLSAI2). * - * @param __PLLM__: specifies the division factor for PLL VCO input clock. - * This parameter must be a number between 1 and 8. + * @param __PLLM__ specifies the division factor for PLL VCO input clock. + * This parameter must be a number between Min_Data = 1 and Max_Data = 16 on STM32L4Rx/STM32L4Sx devices. + * This parameter must be a number between Min_Data = 1 and Max_Data = 8 on other devices. * @note You have to set the PLLM parameter correctly to ensure that the VCO input * frequency ranges from 4 to 16 MHz. It is recommended to select a frequency * of 16 MHz to limit PLL jitter. * - * @param __PLLN__: specifies the multiplication factor for PLL VCO output clock. + * @param __PLLN__ specifies the multiplication factor for PLL VCO output clock. * This parameter must be a number between 8 and 86. * @note You have to set the PLLN parameter correctly to ensure that the VCO * output frequency is between 64 and 344 MHz. * - * @param __PLLP__: specifies the division factor for SAI clock. + * @param __PLLP__ specifies the division factor for SAI clock. * This parameter must be a number in the range (7 or 17) for STM32L47x/STM32L48x * else (2 to 31). * - * @param __PLLQ__: specifies the division factor for OTG FS, SDMMC1 and RNG clocks. + * @param __PLLQ__ specifies the division factor for OTG FS, SDMMC1 and RNG clocks. * This parameter must be in the range (2, 4, 6 or 8). * @note If the USB OTG FS is used in your application, you have to set the * PLLQ parameter correctly to have 48 MHz clock for the USB. However, * the SDMMC1 and RNG need a frequency lower than or equal to 48 MHz to work * correctly. - * @param __PLLR__: specifies the division factor for the main system clock. + * @param __PLLR__ specifies the division factor for the main system clock. * @note You have to set the PLLR parameter correctly to not exceed 80MHZ. * This parameter must be in the range (2, 4, 6 or 8). * @retval None @@ -3701,14 +4062,14 @@ typedef struct #define __HAL_RCC_PLL_CONFIG(__PLLSOURCE__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__ ) \ (RCC->PLLCFGR = (uint32_t)(((__PLLM__) - 1U) << 4U) | (uint32_t)((__PLLN__) << 8U) | \ - (uint32_t)(__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U) | \ - (uint32_t)((__PLLP__) << 27U)) - + (__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U) | \ + ((uint32_t)(__PLLP__) << 27U)) #else - + #define __HAL_RCC_PLL_CONFIG(__PLLSOURCE__, __PLLM__, __PLLN__, __PLLP__, __PLLQ__,__PLLR__ ) \ - (RCC->PLLCFGR = (uint32_t)(((__PLLM__) - 1U) << 4U) | (uint32_t)((__PLLN__) << 8U) | (uint32_t)(((__PLLP__) >> 4U ) << 17U) | \ - (uint32_t)(__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U)) + (RCC->PLLCFGR = (uint32_t)(((__PLLM__) - 1U) << 4U) | (uint32_t)((__PLLN__) << 8U) | \ + (uint32_t)(((__PLLP__) >> 4U ) << 17U) | \ + (__PLLSOURCE__) | (uint32_t)((((__PLLQ__) >> 1U) - 1U) << 21U) | (uint32_t)((((__PLLR__) >> 1U) - 1U) << 25U)) #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ @@ -3720,14 +4081,14 @@ typedef struct * - RCC_PLLSOURCE_HSI: HSI oscillator is used as PLL clock source. * - RCC_PLLSOURCE_HSE: HSE oscillator is used as PLL clock source. */ -#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC)) +#define __HAL_RCC_GET_PLL_OSCSOURCE() (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)) /** * @brief Enable or disable each clock output (RCC_PLL_SYSCLK, RCC_PLL_48M1CLK, RCC_PLL_SAI3CLK) - * @note Enabling/disabling clock outputs RCC_PLL_SAI3CLK and RCC_PLL_48M1CLK can be done at anytime - * without the need to stop the PLL in order to save power. But RCC_PLL_SYSCLK cannot + * @note Enabling/disabling clock outputs RCC_PLL_SAI3CLK and RCC_PLL_48M1CLK can be done at anytime + * without the need to stop the PLL in order to save power. But RCC_PLL_SYSCLK cannot * be stopped if used as System Clock. - * @param __PLLCLOCKOUT__: specifies the PLL clock to be output. + * @param __PLLCLOCKOUT__ specifies the PLL clock to be output. * This parameter can be one or a combination of the following values: * @arg @ref RCC_PLL_SAI3CLK This clock is used to generate an accurate clock to achieve * high-quality audio performance on SAI interface in case. @@ -3742,7 +4103,7 @@ typedef struct /** * @brief Get clock output enable status (RCC_PLL_SYSCLK, RCC_PLL_48M1CLK, RCC_PLL_SAI3CLK) - * @param __PLLCLOCKOUT__: specifies the output PLL clock to be checked. + * @param __PLLCLOCKOUT__ specifies the output PLL clock to be checked. * This parameter can be one of the following values: * @arg @ref RCC_PLL_SAI3CLK This clock is used to generate an accurate clock to achieve * high-quality audio performance on SAI interface in case. @@ -3755,7 +4116,7 @@ typedef struct /** * @brief Macro to configure the system clock source. - * @param __SYSCLKSOURCE__: specifies the system clock source. + * @param __SYSCLKSOURCE__ specifies the system clock source. * This parameter can be one of the following values: * - RCC_SYSCLKSOURCE_MSI: MSI oscillator is used as system clock source. * - RCC_SYSCLKSOURCE_HSI: HSI oscillator is used as system clock source. @@ -3774,7 +4135,7 @@ typedef struct * - RCC_SYSCLKSOURCE_STATUS_HSE: HSE used as system clock. * - RCC_SYSCLKSOURCE_STATUS_PLLCLK: PLL used as system clock. */ -#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(RCC->CFGR & RCC_CFGR_SWS)) +#define __HAL_RCC_GET_SYSCLK_SOURCE() (READ_BIT(RCC->CFGR, RCC_CFGR_SWS)) /** * @brief Macro to configure the External Low Speed oscillator (LSE) drive capability. @@ -3782,7 +4143,7 @@ typedef struct * this domain after reset, you have to enable write access using * HAL_PWR_EnableBkUpAccess() function before to configure the LSE * (to be done once after reset). - * @param __LSEDRIVE__: specifies the new state of the LSE drive capability. + * @param __LSEDRIVE__ specifies the new state of the LSE drive capability. * This parameter can be one of the following values: * @arg @ref RCC_LSEDRIVE_LOW LSE oscillator low drive capability. * @arg @ref RCC_LSEDRIVE_MEDIUMLOW LSE oscillator medium low drive capability. @@ -3791,11 +4152,11 @@ typedef struct * @retval None */ #define __HAL_RCC_LSEDRIVE_CONFIG(__LSEDRIVE__) \ - MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, (uint32_t)(__LSEDRIVE__)) + MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, (__LSEDRIVE__)) /** * @brief Macro to configure the wake up from stop clock. - * @param __STOPWUCLK__: specifies the clock source used after wake up from stop. + * @param __STOPWUCLK__ specifies the clock source used after wake up from stop. * This parameter can be one of the following values: * @arg @ref RCC_STOP_WAKEUPCLOCK_MSI MSI selected as system clock source * @arg @ref RCC_STOP_WAKEUPCLOCK_HSI HSI selected as system clock source @@ -3819,9 +4180,6 @@ typedef struct @if STM32L443xx * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 clock selected as MCO source for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 clock selected as MCO source for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_MCO1SOURCE_HSI48 HSI48 clock selected as MCO source for devices with HSI48 @endif @@ -3841,9 +4199,8 @@ typedef struct * @{ */ -/** @brief Enable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to enable - * the selected interrupts). - * @param __INTERRUPT__: specifies the RCC interrupt sources to be enabled. +/** @brief Enable RCC interrupt(s). + * @param __INTERRUPT__ specifies the RCC interrupt source(s) to be enabled. * This parameter can be any combination of the following values: * @arg @ref RCC_IT_LSIRDY LSI ready interrupt * @arg @ref RCC_IT_LSERDY LSE ready interrupt @@ -3857,9 +4214,6 @@ typedef struct @if STM32L443xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif @@ -3867,9 +4221,8 @@ typedef struct */ #define __HAL_RCC_ENABLE_IT(__INTERRUPT__) SET_BIT(RCC->CIER, (__INTERRUPT__)) -/** @brief Disable RCC interrupt (Perform Byte access to RCC_CIR[14:8] bits to disable - * the selected interrupts). - * @param __INTERRUPT__: specifies the RCC interrupt sources to be disabled. +/** @brief Disable RCC interrupt(s). + * @param __INTERRUPT__ specifies the RCC interrupt source(s) to be disabled. * This parameter can be any combination of the following values: * @arg @ref RCC_IT_LSIRDY LSI ready interrupt * @arg @ref RCC_IT_LSERDY LSE ready interrupt @@ -3883,9 +4236,6 @@ typedef struct @if STM32L443xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif @@ -3893,9 +4243,8 @@ typedef struct */ #define __HAL_RCC_DISABLE_IT(__INTERRUPT__) CLEAR_BIT(RCC->CIER, (__INTERRUPT__)) -/** @brief Clear the RCC's interrupt pending bits (Perform Byte access to RCC_CIR[23:16] - * bits to clear the selected interrupt pending bits. - * @param __INTERRUPT__: specifies the interrupt pending bit to clear. +/** @brief Clear the RCC's interrupt pending bits. + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. * This parameter can be any combination of the following values: * @arg @ref RCC_IT_LSIRDY LSI ready interrupt * @arg @ref RCC_IT_LSERDY LSE ready interrupt @@ -3910,18 +4259,15 @@ typedef struct @if STM32L443xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif * @retval None */ -#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (RCC->CICR = (__INTERRUPT__)) +#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) WRITE_REG(RCC->CICR, (__INTERRUPT__)) /** @brief Check whether the RCC interrupt has occurred or not. - * @param __INTERRUPT__: specifies the RCC interrupt source to check. + * @param __INTERRUPT__ specifies the RCC interrupt source to check. * This parameter can be one of the following values: * @arg @ref RCC_IT_LSIRDY LSI ready interrupt * @arg @ref RCC_IT_LSERDY LSE ready interrupt @@ -3936,25 +4282,22 @@ typedef struct @if STM32L443xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_IT_HSI48RDY HSI48 ready interrupt for devices with HSI48 @endif * @retval The new state of __INTERRUPT__ (TRUE or FALSE). */ -#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIFR & (__INTERRUPT__)) == (__INTERRUPT__)) +#define __HAL_RCC_GET_IT(__INTERRUPT__) (READ_BIT(RCC->CIFR, (__INTERRUPT__)) == (__INTERRUPT__)) /** @brief Set RMVF bit to clear the reset flags. * The reset flags are: RCC_FLAG_FWRRST, RCC_FLAG_OBLRST, RCC_FLAG_PINRST, RCC_FLAG_BORRST, * RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST and RCC_FLAG_LPWRRST. * @retval None */ -#define __HAL_RCC_CLEAR_RESET_FLAGS() (RCC->CSR |= RCC_CSR_RMVF) +#define __HAL_RCC_CLEAR_RESET_FLAGS() SET_BIT(RCC->CSR, RCC_CSR_RMVF) /** @brief Check whether the selected RCC flag is set or not. - * @param __FLAG__: specifies the flag to check. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: * @arg @ref RCC_FLAG_MSIRDY MSI oscillator clock ready * @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready @@ -3965,9 +4308,6 @@ typedef struct @if STM32L443xx * @arg @ref RCC_FLAG_HSI48RDY HSI48 clock ready for devices with HSI48 @endif - @if STM32L462xx - * @arg @ref RCC_FLAG_HSI48RDY HSI48 clock ready for devices with HSI48 - @endif @if STM32L4A6xx * @arg @ref RCC_FLAG_HSI48RDY HSI48 clock ready for devices with HSI48 @endif @@ -3986,18 +4326,16 @@ typedef struct * @retval The new state of __FLAG__ (TRUE or FALSE). */ #if defined(RCC_HSI48_SUPPORT) -#define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5U) == 1U) ? RCC->CR : \ - ((((__FLAG__) >> 5U) == 4U) ? RCC->CRRCR : \ - ((((__FLAG__) >> 5U) == 2U) ? RCC->BDCR : \ - ((((__FLAG__) >> 5U) == 3U) ? RCC->CSR : RCC->CIFR)))) & \ - ((uint32_t)1U << ((__FLAG__) & RCC_FLAG_MASK))) != RESET) \ - ? 1U : 0U) +#define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5U) == 1U) ? RCC->CR : \ + ((((__FLAG__) >> 5U) == 4U) ? RCC->CRRCR : \ + ((((__FLAG__) >> 5U) == 2U) ? RCC->BDCR : \ + ((((__FLAG__) >> 5U) == 3U) ? RCC->CSR : RCC->CIFR)))) & \ + (1U << ((__FLAG__) & RCC_FLAG_MASK))) != RESET) ? 1U : 0U) #else #define __HAL_RCC_GET_FLAG(__FLAG__) (((((((__FLAG__) >> 5U) == 1U) ? RCC->CR : \ ((((__FLAG__) >> 5U) == 2U) ? RCC->BDCR : \ ((((__FLAG__) >> 5U) == 3U) ? RCC->CSR : RCC->CIFR))) & \ - ((uint32_t)1 << ((__FLAG__) & RCC_FLAG_MASK))) != RESET) \ - ? 1U : 0U) + (1U << ((__FLAG__) & RCC_FLAG_MASK))) != RESET) ? 1U : 0U) #endif /* RCC_HSI48_SUPPORT */ /** @@ -4007,20 +4345,20 @@ typedef struct /** * @} */ - + /* Private constants ---------------------------------------------------------*/ /** @defgroup RCC_Private_Constants RCC Private Constants * @{ */ /* Defines used for Flags */ -#define CR_REG_INDEX ((uint32_t)1U) -#define BDCR_REG_INDEX ((uint32_t)2U) -#define CSR_REG_INDEX ((uint32_t)3U) +#define CR_REG_INDEX 1U +#define BDCR_REG_INDEX 2U +#define CSR_REG_INDEX 3U #if defined(RCC_HSI48_SUPPORT) -#define CRRCR_REG_INDEX ((uint32_t)4U) +#define CRRCR_REG_INDEX 4U #endif /* RCC_HSI48_SUPPORT */ -#define RCC_FLAG_MASK ((uint32_t)0x1FU) +#define RCC_FLAG_MASK 0x1FU /** * @} */ @@ -4055,13 +4393,13 @@ typedef struct #define IS_RCC_HSI(__HSI__) (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON)) -#define IS_RCC_HSI_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= (uint32_t)( RCC_ICSCR_HSITRIM >> POSITION_VAL(RCC_ICSCR_HSITRIM))) +#define IS_RCC_HSI_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= (RCC_ICSCR_HSITRIM >> RCC_ICSCR_HSITRIM_Pos)) #define IS_RCC_LSI(__LSI__) (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON)) #define IS_RCC_MSI(__MSI__) (((__MSI__) == RCC_MSI_OFF) || ((__MSI__) == RCC_MSI_ON)) -#define IS_RCC_MSICALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= (uint32_t)255U) +#define IS_RCC_MSICALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 255U) #if defined(RCC_HSI48_SUPPORT) #define IS_RCC_HSI48(__HSI48__) (((__HSI48__) == RCC_HSI48_OFF) || ((__HSI48__) == RCC_HSI48_ON)) @@ -4075,7 +4413,11 @@ typedef struct ((__SOURCE__) == RCC_PLLSOURCE_HSI) || \ ((__SOURCE__) == RCC_PLLSOURCE_HSE)) +#if defined(RCC_PLLM_DIV_1_16_SUPPORT) +#define IS_RCC_PLLM_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 16U)) +#else #define IS_RCC_PLLM_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 8U)) +#endif /*RCC_PLLM_DIV_1_16_SUPPORT */ #define IS_RCC_PLLN_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U)) @@ -4097,9 +4439,16 @@ typedef struct (((__VALUE__) & ~(RCC_PLLSAI1_SAI1CLK|RCC_PLLSAI1_48M2CLK|RCC_PLLSAI1_ADC1CLK)) == 0U)) #if defined(RCC_PLLSAI2_SUPPORT) +#if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) #define IS_RCC_PLLSAI2CLOCKOUT_VALUE(__VALUE__) (((((__VALUE__) & RCC_PLLSAI2_SAI2CLK) == RCC_PLLSAI2_SAI2CLK) || \ (((__VALUE__) & RCC_PLLSAI2_ADC2CLK) == RCC_PLLSAI2_ADC2CLK)) && \ - (((__VALUE__) & ~(RCC_PLLSAI2_SAI2CLK|RCC_PLLSAI2_ADC2CLK)) == 0U)) + (((__VALUE__) & ~(RCC_PLLSAI2_SAI2CLK|RCC_PLLSAI2_ADC2CLK)) == 0U)) +#elif defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_RCC_PLLSAI2CLOCKOUT_VALUE(__VALUE__) (((((__VALUE__) & RCC_PLLSAI2_SAI2CLK) == RCC_PLLSAI2_SAI2CLK) || \ + (((__VALUE__) & RCC_PLLSAI2_DSICLK) == RCC_PLLSAI2_DSICLK) || \ + (((__VALUE__) & RCC_PLLSAI2_LTDCCLK) == RCC_PLLSAI2_LTDCCLK)) && \ + (((__VALUE__) & ~(RCC_PLLSAI2_SAI2CLK|RCC_PLLSAI2_DSICLK|RCC_PLLSAI2_LTDCCLK)) == 0U)) +#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ #endif /* RCC_PLLSAI2_SUPPORT */ #define IS_RCC_MSI_CLOCK_RANGE(__RANGE__) (((__RANGE__) == RCC_MSIRANGE_0) || \ @@ -4137,7 +4486,7 @@ typedef struct ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || \ ((__PCLK__) == RCC_HCLK_DIV16)) -#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || \ +#define IS_RCC_RTCCLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_RTCCLKSOURCE_NONE) || \ ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || \ ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || \ ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV32)) @@ -4194,7 +4543,7 @@ typedef struct */ /* Initialization and de-initialization functions ******************************/ -void HAL_RCC_DeInit(void); +HAL_StatusTypeDef HAL_RCC_DeInit(void); HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct); HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency); diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.c index e3f89b1de6..7c31e73fb5 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rcc_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended RCC HAL module driver. * This file provides firmware functions to manage the following * functionalities RCC extended peripheral: @@ -60,9 +58,9 @@ /** @defgroup RCCEx_Private_Constants RCCEx Private Constants * @{ */ -#define PLLSAI1_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define PLLSAI2_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ -#define PLL_TIMEOUT_VALUE ((uint32_t)2U) /* 2 ms (minimum Tick + 1) */ +#define PLLSAI1_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define PLLSAI2_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ +#define PLL_TIMEOUT_VALUE 2U /* 2 ms (minimum Tick + 1) */ #define DIVIDER_P_UPDATE 0U #define DIVIDER_Q_UPDATE 1U @@ -99,7 +97,7 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u * @{ */ -/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions +/** @defgroup RCCEx_Exported_Functions_Group1 Extended Peripheral Control functions * @brief Extended Peripheral Control functions * @verbatim @@ -143,6 +141,9 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_I2C4 I2C4 peripheral clock (only for devices with I2C4) @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_I2C4 I2C4 peripheral clock (only for devices with I2C4) + @endif * @arg @ref RCC_PERIPHCLK_LPTIM1 LPTIM1 peripheral clock * @arg @ref RCC_PERIPHCLK_LPTIM2 LPTIM2 peripheral clock * @arg @ref RCC_PERIPHCLK_LPUART1 LPUART1 peripheral clock @@ -154,6 +155,9 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_SAI2 SAI2 peripheral clock (only for devices with SAI2) @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_SAI2 SAI2 peripheral clock (only for devices with SAI2) + @endif * @arg @ref RCC_PERIPHCLK_SDMMC1 SDMMC1 peripheral clock @if STM32L443xx * @arg @ref RCC_PERIPHCLK_SWPMI1 SWPMI1 peripheral clock (only for devices with SWPMI1) @@ -173,12 +177,23 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u @if STM32L486xx * @arg @ref RCC_PERIPHCLK_UART4 USART1 peripheral clock (only for devices with UART4) * @arg @ref RCC_PERIPHCLK_UART5 USART1 peripheral clock (only for devices with UART5) + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) @endif @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_UART4 USART1 peripheral clock (only for devices with UART4) * @arg @ref RCC_PERIPHCLK_UART5 USART1 peripheral clock (only for devices with UART5) - @endif * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) + @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_UART4 USART1 peripheral clock (only for devices with UART4) + * @arg @ref RCC_PERIPHCLK_UART5 USART1 peripheral clock (only for devices with UART5) + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) + * @arg @ref RCC_PERIPHCLK_DFSDM1 DFSDM1 peripheral kernel clock (only for devices with DFSDM1) + * @arg @ref RCC_PERIPHCLK_DFSDM1AUDIO DFSDM1 peripheral audio clock (only for devices with DFSDM1) + * @arg @ref RCC_PERIPHCLK_LTDC LTDC peripheral clock (only for devices with LTDC) + * @arg @ref RCC_PERIPHCLK_DSI DSI peripheral clock (only for devices with DSI) + * @arg @ref RCC_PERIPHCLK_OSPI OctoSPI peripheral clock (only for devices with OctoSPI) + @endif * * @note Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select * the RTC clock source: in this case the access to Backup domain is enabled. @@ -230,6 +245,9 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk #endif /* RCC_PLLSAI2_SUPPORT */ case RCC_SAI1CLKSOURCE_PIN: /* External clock is used as source of SAI1 clock*/ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + case RCC_SAI1CLKSOURCE_HSI: /* HSI is used as source of SAI1 clock*/ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* SAI1 clock source config set later after clock selection check */ break; @@ -279,6 +297,9 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk break; case RCC_SAI2CLKSOURCE_PIN: /* External clock is used as source of SAI2 clock*/ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + case RCC_SAI2CLKSOURCE_HSI: /* HSI is used as source of SAI2 clock*/ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* SAI2 clock source config set later after clock selection check */ break; @@ -304,7 +325,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk if((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) { FlagStatus pwrclkchanged = RESET; - + /* Check for RTC Parameters used to output RTCCLK */ assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); @@ -314,14 +335,14 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk __HAL_RCC_PWR_CLK_ENABLE(); pwrclkchanged = SET; } - + /* Enable write access to Backup domain */ SET_BIT(PWR->CR1, PWR_CR1_DBP); /* Wait for Backup domain Write protection disable */ tickstart = HAL_GetTick(); - while((PWR->CR1 & PWR_CR1_DBP) == RESET) + while(READ_BIT(PWR->CR1, PWR_CR1_DBP) == RESET) { if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) { @@ -331,11 +352,11 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk } if(ret == HAL_OK) - { + { /* Reset the Backup domain only if the RTC Clock source selection is modified from default */ tmpregister = READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL); - - if((tmpregister != RCC_RTCCLKSOURCE_NO_CLK) && (tmpregister != PeriphClkInit->RTCClockSelection)) + + if((tmpregister != RCC_RTCCLKSOURCE_NONE) && (tmpregister != PeriphClkInit->RTCClockSelection)) { /* Store the content of BDCR register before the reset of Backup Domain */ tmpregister = READ_BIT(RCC->BDCR, ~(RCC_BDCR_RTCSEL)); @@ -362,7 +383,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk } } } - + if(ret == HAL_OK) { /* Apply new RTC clock source selection */ @@ -483,7 +504,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection); } -#if defined(I2C2) +#if defined(I2C2) /*-------------------------- I2C2 clock source configuration ---------------------*/ if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) @@ -507,7 +528,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk __HAL_RCC_I2C3_CONFIG(PeriphClkInit->I2c3ClockSelection); } -#if defined(I2C4) +#if defined(I2C4) /*-------------------------- I2C4 clock source configuration ---------------------*/ if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) @@ -540,7 +561,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk { /* PLLSAI1 input clock, parameters M, N & Q configuration and clock output (PLLSAI1ClockOut) */ ret = RCCEx_PLLSAI1_Config(&(PeriphClkInit->PLLSAI1), DIVIDER_Q_UPDATE); - + if(ret != HAL_OK) { /* set overall return value */ @@ -559,17 +580,24 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk { assert_param(IS_RCC_SDMMC1CLKSOURCE(PeriphClkInit->Sdmmc1ClockSelection)); __HAL_RCC_SDMMC1_CONFIG(PeriphClkInit->Sdmmc1ClockSelection); - - if(PeriphClkInit->Sdmmc1ClockSelection == RCC_SDMMC1CLKSOURCE_PLL) + + if(PeriphClkInit->Sdmmc1ClockSelection == RCC_SDMMC1CLKSOURCE_PLL) /* PLL "Q" ? */ { /* Enable PLL48M1CLK output */ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_48M1CLK); } +#if defined(RCC_CCIPR2_SDMMCSEL) + else if(PeriphClkInit->Sdmmc1ClockSelection == RCC_SDMMC1CLKSOURCE_PLLP) /* PLL "P" ? */ + { + /* Enable PLLSAI3CLK output */ + __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_SAI3CLK); + } +#endif else if(PeriphClkInit->Sdmmc1ClockSelection == RCC_SDMMC1CLKSOURCE_PLLSAI1) { /* PLLSAI1 input clock, parameters M, N & Q configuration and clock output (PLLSAI1ClockOut) */ ret = RCCEx_PLLSAI1_Config(&(PeriphClkInit->PLLSAI1), DIVIDER_Q_UPDATE); - + if(ret != HAL_OK) { /* set overall return value */ @@ -595,7 +623,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk { /* PLLSAI1 input clock, parameters M, N & Q configuration and clock output (PLLSAI1ClockOut) */ ret = RCCEx_PLLSAI1_Config(&(PeriphClkInit->PLLSAI1), DIVIDER_Q_UPDATE); - + if(ret != HAL_OK) { /* set overall return value */ @@ -612,7 +640,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk /* Configure the ADC interface clock source */ __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection); - + if(PeriphClkInit->AdcClockSelection == RCC_ADCCLKSOURCE_PLLSAI1) { /* PLLSAI1 input clock, parameters M, N & R configuration and clock output (PLLSAI1ClockOut) */ @@ -631,7 +659,7 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk { /* PLLSAI2 input clock, parameters M, N & R configuration and clock output (PLLSAI2ClockOut) */ ret = RCCEx_PLLSAI2_Config(&(PeriphClkInit->PLLSAI2), DIVIDER_R_UPDATE); - + if(ret != HAL_OK) { /* set overall return value */ @@ -669,8 +697,109 @@ HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClk __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection); } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /*-------------------------- DFSDM1 audio clock source configuration -------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1AUDIO) == RCC_PERIPHCLK_DFSDM1AUDIO) + { + /* Check the parameters */ + assert_param(IS_RCC_DFSDM1AUDIOCLKSOURCE(PeriphClkInit->Dfsdm1AudioClockSelection)); + + /* Configure the DFSDM1 interface audio clock source */ + __HAL_RCC_DFSDM1AUDIO_CONFIG(PeriphClkInit->Dfsdm1AudioClockSelection); + } + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) + + /*-------------------------- LTDC clock source configuration --------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC) + { + /* Check the parameters */ + assert_param(IS_RCC_LTDCCLKSOURCE(PeriphClkInit->LtdcClockSelection)); + + /* Disable the PLLSAI2 */ + __HAL_RCC_PLLSAI2_DISABLE(); + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + + /* Wait till PLLSAI2 is ready */ + while(READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) != RESET) + { + if((HAL_GetTick() - tickstart) > PLLSAI2_TIMEOUT_VALUE) + { + ret = HAL_TIMEOUT; + break; + } + } + + if(ret == HAL_OK) + { + /* Configure the LTDC clock source */ + __HAL_RCC_LTDC_CONFIG(PeriphClkInit->LtdcClockSelection); + + /* PLLSAI2 input clock, parameters M, N & R configuration and clock output (PLLSAI2ClockOut) */ + ret = RCCEx_PLLSAI2_Config(&(PeriphClkInit->PLLSAI2), DIVIDER_R_UPDATE); + } + + if(ret != HAL_OK) + { + /* set overall return value */ + status = ret; + } + } + +#endif /* LTDC */ + +#if defined(DSI) + + /*-------------------------- DSI clock source configuration ---------------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DSI) == RCC_PERIPHCLK_DSI) + { + /* Check the parameters */ + assert_param(IS_RCC_DSICLKSOURCE(PeriphClkInit->DsiClockSelection)); + + /* Configure the DSI clock source */ + __HAL_RCC_DSI_CONFIG(PeriphClkInit->DsiClockSelection); + + if(PeriphClkInit->DsiClockSelection == RCC_DSICLKSOURCE_PLLSAI2) + { + /* PLLSAI2 input clock, parameters M, N & Q configuration and clock output (PLLSAI2ClockOut) */ + ret = RCCEx_PLLSAI2_Config(&(PeriphClkInit->PLLSAI2), DIVIDER_Q_UPDATE); + + if(ret != HAL_OK) + { + /* set overall return value */ + status = ret; + } + } + } + +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) + + /*-------------------------- OctoSPIx clock source configuration ----------------*/ + if(((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI) + { + /* Check the parameters */ + assert_param(IS_RCC_OSPICLKSOURCE(PeriphClkInit->OspiClockSelection)); + + /* Configure the OctoSPI clock source */ + __HAL_RCC_OSPI_CONFIG(PeriphClkInit->OspiClockSelection); + + if(PeriphClkInit->OspiClockSelection == RCC_OSPICLKSOURCE_PLL) + { + /* Enable PLL48M1CLK output */ + __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_48M1CLK); + } + } + +#endif /* OCTOSPI1 || OCTOSPI2 */ + return status; } @@ -733,7 +862,7 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | \ RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_SWPMI1 | RCC_PERIPHCLK_DFSDM1 | \ RCC_PERIPHCLK_RTC ; - + #elif defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ @@ -750,26 +879,61 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_SWPMI1 | RCC_PERIPHCLK_DFSDM1 | \ RCC_PERIPHCLK_RTC ; +#elif defined(STM32L4R5xx) || defined(STM32L4S5xx) + + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_I2C4 | \ + RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | RCC_PERIPHCLK_USB | \ + RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_DFSDM1 | \ + RCC_PERIPHCLK_DFSDM1AUDIO | RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_OSPI; + +#elif defined(STM32L4R7xx) || defined(STM32L4S7xx) + + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_I2C4 | \ + RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | RCC_PERIPHCLK_USB | \ + RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_DFSDM1 | \ + RCC_PERIPHCLK_DFSDM1AUDIO | RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_LTDC; + +#elif defined(STM32L4R9xx) || defined(STM32L4S9xx) + + PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_USART3 | RCC_PERIPHCLK_UART4 | RCC_PERIPHCLK_UART5 | \ + RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_I2C2 | RCC_PERIPHCLK_I2C3 | RCC_PERIPHCLK_I2C4 | \ + RCC_PERIPHCLK_LPTIM1 | RCC_PERIPHCLK_LPTIM2 | RCC_PERIPHCLK_SAI1 | RCC_PERIPHCLK_SAI2 | RCC_PERIPHCLK_USB | \ + RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_RNG | RCC_PERIPHCLK_ADC | RCC_PERIPHCLK_DFSDM1 | \ + RCC_PERIPHCLK_DFSDM1AUDIO | RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_LTDC | RCC_PERIPHCLK_DSI; + #endif /* STM32L431xx */ /* Get the PLLSAI1 Clock configuration -----------------------------------------------*/ - - PeriphClkInit->PLLSAI1.PLLSAI1Source = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> POSITION_VAL(RCC_PLLCFGR_PLLSRC)); - PeriphClkInit->PLLSAI1.PLLSAI1M = (uint32_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U; - PeriphClkInit->PLLSAI1.PLLSAI1N = (uint32_t)((RCC->PLLSAI1CFGR & RCC_PLLSAI1CFGR_PLLSAI1N) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)); - PeriphClkInit->PLLSAI1.PLLSAI1P = (uint32_t)(((RCC->PLLSAI1CFGR & RCC_PLLSAI1CFGR_PLLSAI1P) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P)) << 4U) + 7U; - PeriphClkInit->PLLSAI1.PLLSAI1Q = (uint32_t)(((RCC->PLLSAI1CFGR & RCC_PLLSAI1CFGR_PLLSAI1Q) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q))+1U) * 2U; - PeriphClkInit->PLLSAI1.PLLSAI1R = (uint32_t)(((RCC->PLLSAI1CFGR & RCC_PLLSAI1CFGR_PLLSAI1R) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R))+1U) * 2U; + + PeriphClkInit->PLLSAI1.PLLSAI1Source = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC) >> RCC_PLLCFGR_PLLSRC_Pos; +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + PeriphClkInit->PLLSAI1.PLLSAI1M = (READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U; +#else + PeriphClkInit->PLLSAI1.PLLSAI1M = (READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U; +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + PeriphClkInit->PLLSAI1.PLLSAI1N = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; + PeriphClkInit->PLLSAI1.PLLSAI1P = ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P) >> RCC_PLLSAI1CFGR_PLLSAI1P_Pos) << 4U) + 7U; + PeriphClkInit->PLLSAI1.PLLSAI1Q = ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q) >> RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) + 1U) * 2U; + PeriphClkInit->PLLSAI1.PLLSAI1R = ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R) >> RCC_PLLSAI1CFGR_PLLSAI1R_Pos) + 1U) * 2U; #if defined(RCC_PLLSAI2_SUPPORT) /* Get the PLLSAI2 Clock configuration -----------------------------------------------*/ PeriphClkInit->PLLSAI2.PLLSAI2Source = PeriphClkInit->PLLSAI1.PLLSAI1Source; +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + PeriphClkInit->PLLSAI2.PLLSAI2M = (READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M) >> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U; +#else PeriphClkInit->PLLSAI2.PLLSAI2M = PeriphClkInit->PLLSAI1.PLLSAI1M; - PeriphClkInit->PLLSAI2.PLLSAI2N = (uint32_t)((RCC->PLLSAI2CFGR & RCC_PLLSAI2CFGR_PLLSAI2N) >> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)); - PeriphClkInit->PLLSAI2.PLLSAI2P = (uint32_t)(((RCC->PLLSAI2CFGR & RCC_PLLSAI2CFGR_PLLSAI2P) >> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P)) << 4U) + 7U; - PeriphClkInit->PLLSAI2.PLLSAI2R = (uint32_t)(((RCC->PLLSAI2CFGR & RCC_PLLSAI2CFGR_PLLSAI2R)>> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R))+1U) * 2U; +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ + PeriphClkInit->PLLSAI2.PLLSAI2N = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_PLLSAI2CFGR_PLLSAI2N_Pos; + PeriphClkInit->PLLSAI2.PLLSAI2P = ((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P) >> RCC_PLLSAI2CFGR_PLLSAI2P_Pos) << 4U) + 7U; +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + PeriphClkInit->PLLSAI2.PLLSAI2Q = ((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2Q) >> RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) + 1U) * 2U; +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ + PeriphClkInit->PLLSAI2.PLLSAI2R = ((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R)>> RCC_PLLSAI2CFGR_PLLSAI2R_Pos) + 1U) * 2U; #endif /* RCC_PLLSAI2_SUPPORT */ @@ -792,7 +956,7 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) /* Get the UART5 clock source ----------------------------------------------*/ PeriphClkInit->Uart5ClockSelection = __HAL_RCC_GET_UART5_SOURCE(); #endif /* UART5 */ - + /* Get the LPUART1 clock source --------------------------------------------*/ PeriphClkInit->Lpuart1ClockSelection = __HAL_RCC_GET_LPUART1_SOURCE(); @@ -853,11 +1017,31 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) #if defined(DFSDM1_Filter0) /* Get the DFSDM1 clock source ---------------------------------------------*/ PeriphClkInit->Dfsdm1ClockSelection = __HAL_RCC_GET_DFSDM1_SOURCE(); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Get the DFSDM1 audio clock source ---------------------------------------*/ + PeriphClkInit->Dfsdm1AudioClockSelection = __HAL_RCC_GET_DFSDM1AUDIO_SOURCE(); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* DFSDM1_Filter0 */ + +#if defined(LTDC) + /* Get the LTDC clock source -----------------------------------------------*/ + PeriphClkInit->LtdcClockSelection = __HAL_RCC_GET_LTDC_SOURCE(); +#endif /* LTDC */ + +#if defined(DSI) + /* Get the DSI clock source ------------------------------------------------*/ + PeriphClkInit->DsiClockSelection = __HAL_RCC_GET_DSI_SOURCE(); +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) + /* Get the OctoSPIclock source --------------------------------------------*/ + PeriphClkInit->OspiClockSelection = __HAL_RCC_GET_OSPI_SOURCE(); +#endif /* OCTOSPI1 || OCTOSPI2 */ } /** - * @brief Return the peripheral clock frequency for peripherals with clock source from PLLSAIs + * @brief Return the peripheral clock frequency for peripherals with clock source from PLLSAIs * @note Return 0 if peripheral clock identifier not managed by this API * @param PeriphClk Peripheral clock identifier * This parameter can be one of the following values: @@ -881,6 +1065,9 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_I2C4 I2C4 peripheral clock (only for devices with I2C4) @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_I2C4 I2C4 peripheral clock (only for devices with I2C4) + @endif * @arg @ref RCC_PERIPHCLK_LPTIM1 LPTIM1 peripheral clock * @arg @ref RCC_PERIPHCLK_LPTIM2 LPTIM2 peripheral clock * @arg @ref RCC_PERIPHCLK_LPUART1 LPUART1 peripheral clock @@ -892,6 +1079,9 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_SAI2 SAI2 peripheral clock (only for devices with SAI2) @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_SAI2 SAI2 peripheral clock (only for devices with SAI2) + @endif * @arg @ref RCC_PERIPHCLK_SDMMC1 SDMMC1 peripheral clock @if STM32L443xx * @arg @ref RCC_PERIPHCLK_SWPMI1 SWPMI1 peripheral clock (only for devices with SWPMI1) @@ -907,16 +1097,28 @@ void HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) * @arg @ref RCC_PERIPHCLK_USART3 USART1 peripheral clock @if STM32L462xx * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock (only for devices with UART4) - @endif + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) + @endif @if STM32L486xx * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock (only for devices with UART4) * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock (only for devices with UART5) + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) @endif @if STM32L4A6xx * @arg @ref RCC_PERIPHCLK_UART4 UART4 peripheral clock (only for devices with UART4) * @arg @ref RCC_PERIPHCLK_UART5 UART5 peripheral clock (only for devices with UART5) - @endif * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) + @endif + @if STM32L4S9xx + * @arg @ref RCC_PERIPHCLK_UART4 USART1 peripheral clock (only for devices with UART4) + * @arg @ref RCC_PERIPHCLK_UART5 USART1 peripheral clock (only for devices with UART5) + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock (only for devices with USB) + * @arg @ref RCC_PERIPHCLK_DFSDM1 DFSDM1 peripheral kernel clock (only for devices with DFSDM1) + * @arg @ref RCC_PERIPHCLK_DFSDM1AUDIO DFSDM1 peripheral audio clock (only for devices with DFSDM1) + * @arg @ref RCC_PERIPHCLK_LTDC LTDC peripheral clock (only for devices with LTDC) + * @arg @ref RCC_PERIPHCLK_DSI DSI peripheral clock (only for devices with DSI) + * @arg @ref RCC_PERIPHCLK_OSPI OctoSPI peripheral clock (only for devices with OctoSPI) + @endif * @retval Frequency in Hz */ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) @@ -946,7 +1148,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) /* Check if HSE is ready and if RTC clock selection is HSI_DIV32*/ else if ((srcclk == RCC_RTCCLKSOURCE_HSE_DIV32) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) { - frequency = HSE_VALUE / 32; + frequency = HSE_VALUE / 32U; } /* Clock not enabled for RTC*/ else @@ -957,7 +1159,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) else { /* Other external peripheral clock source than RTC */ - + /* Compute PLL clock input */ if(__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_MSI) /* MSI ? */ { @@ -998,8 +1200,10 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) pllvco = 0U; } +#if !defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) && !defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) /* f(PLL Source) / PLLM */ - pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U)); + pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U)); +#endif switch(PeriphClk) { @@ -1011,7 +1215,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) if(PeriphClk == RCC_PERIPHCLK_SAI1) { srcclk = __HAL_RCC_GET_SAI1_SOURCE(); - + if(srcclk == RCC_SAI1CLKSOURCE_PIN) { frequency = EXTERNAL_SAI1_CLOCK_VALUE; @@ -1021,14 +1225,14 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) else /* RCC_PERIPHCLK_SAI2 */ { srcclk = __HAL_RCC_GET_SAI2_SOURCE(); - + if(srcclk == RCC_SAI2CLKSOURCE_PIN) { frequency = EXTERNAL_SAI2_CLOCK_VALUE; } /* Else, PLL clock output to check below */ } - + #else case RCC_PERIPHCLK_SAI1: @@ -1036,14 +1240,14 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) if(PeriphClk == RCC_PERIPHCLK_SAI1) { srcclk = READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI1SEL); - + if(srcclk == RCC_SAI1CLKSOURCE_PIN) { frequency = EXTERNAL_SAI1_CLOCK_VALUE; } /* Else, PLL clock output to check below */ } - + #endif /* SAI2 */ if(frequency == 0U) @@ -1054,10 +1258,10 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) if(__HAL_RCC_GET_PLLCLKOUT_CONFIG(RCC_PLL_SAI3CLK) != RESET) { /* f(PLLSAI3CLK) = f(VCO input) * PLLN / PLLP */ - plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN); + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; #if defined(RCC_PLLP_DIV_2_31_SUPPORT) - pllp = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> POSITION_VAL(RCC_PLLCFGR_PLLPDIV); -#endif + pllp = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> RCC_PLLCFGR_PLLPDIV_Pos; +#endif if(pllp == 0U) { if(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP) != RESET) @@ -1076,11 +1280,15 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(__HAL_RCC_GET_PLLSAI1CLKOUT_CONFIG(RCC_PLLSAI1_SAI1CLK) != RESET) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* f(PLLSAI1 Source) / PLLSAI1M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)); +#endif /* f(PLLSAI1CLK) = f(VCOSAI1 input) * PLLSAI1N / PLLSAI1P */ - plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N); + plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) - pllp = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV); -#endif + pllp = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV) >> RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos; +#endif if(pllp == 0U) { if(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P) != RESET) @@ -1095,16 +1303,26 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) frequency = (pllvco * plln) / pllp; } } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + else if((srcclk == RCC_SAI1CLKSOURCE_HSI) || (srcclk == RCC_SAI2CLKSOURCE_HSI)) + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) + { + frequency = HSI_VALUE; + } + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #else if(srcclk == RCC_SAI1CLKSOURCE_PLL) { if(__HAL_RCC_GET_PLLCLKOUT_CONFIG(RCC_PLL_SAI2CLK) != RESET) { /* f(PLLSAI2CLK) = f(VCO input) * PLLN / PLLP */ - plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN); + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; #if defined(RCC_PLLP_DIV_2_31_SUPPORT) - pllp = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> POSITION_VAL(RCC_PLLCFGR_PLLPDIV); -#endif + pllp = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> RCC_PLLCFGR_PLLPDIV_Pos; +#endif if(pllp == 0U) { if(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP) != RESET) @@ -1116,7 +1334,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) pllp = 7U; } } - + frequency = (pllvco * plln) / pllp; } else if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) @@ -1128,17 +1346,21 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { /* No clock source */ frequency = 0U; - } + } } else if(srcclk == RCC_SAI1CLKSOURCE_PLLSAI1) { if(__HAL_RCC_GET_PLLSAI1CLKOUT_CONFIG(RCC_PLLSAI1_SAI1CLK) != RESET) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* f(PLLSAI1 Source) / PLLSAI1M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)); +#endif /* f(PLLSAI1CLK) = f(VCOSAI1 input) * PLLSAI1N / PLLSAI1P */ - plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N); + plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) - pllp = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV); -#endif + pllp = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV) >> RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos; +#endif if(pllp == 0U) { if(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P) != RESET) @@ -1150,7 +1372,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) pllp = 7U; } } - + frequency = (pllvco * plln) / pllp; } else if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) @@ -1162,7 +1384,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { /* No clock source */ frequency = 0U; - } + } } #endif /* SAI2 */ @@ -1172,8 +1394,15 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(__HAL_RCC_GET_PLLSAI2CLKOUT_CONFIG(RCC_PLLSAI2_SAI2CLK) != RESET) { +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* f(PLLSAI2 Source) / PLLSAI2M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M) >> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U)); +#endif /* f(PLLSAI2CLK) = f(VCOSAI2 input) * PLLSAI2N / PLLSAI2P */ - plln = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N); + plln = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_PLLSAI2CFGR_PLLSAI2N_Pos; +#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) + pllp = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PDIV) >> RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos; +#endif if(pllp == 0U) { if(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P) != RESET) @@ -1198,23 +1427,23 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) } } break; - + #if defined(USB_OTG_FS) || defined(USB) - + case RCC_PERIPHCLK_USB: #endif /* USB_OTG_FS || USB */ case RCC_PERIPHCLK_RNG: -#if defined(SDMMC1) +#if defined(SDMMC1) && !defined(RCC_CCIPR2_SDMMCSEL) case RCC_PERIPHCLK_SDMMC1: -#endif /* SDMMC1 */ +#endif /* SDMMC1 && !RCC_CCIPR2_SDMMCSEL */ srcclk = READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL); - + if(srcclk == RCC_CCIPR_CLK48SEL) /* MSI ? */ { if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_MSIRDY)) @@ -1231,9 +1460,13 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY) && HAL_IS_BIT_SET(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN)) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) || defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* f(PLL Source) / PLLM */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U)); +#endif /* f(PLL48M1CLK) = f(VCO input) * PLLN / PLLQ */ - plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> POSITION_VAL(RCC_PLLCFGR_PLLN); - frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ) >> POSITION_VAL(RCC_PLLCFGR_PLLQ)) + 1U) << 1U); + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U); } else { @@ -1244,9 +1477,13 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLSAI1RDY) && HAL_IS_BIT_SET(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN)) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* f(PLLSAI1 Source) / PLLSAI1M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)); +#endif /* f(PLL48M2CLK) = f(VCOSAI1 input) * PLLSAI1N / PLLSAI1Q */ - plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N); - frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) + 1U) << 1U); + plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q) >> RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) + 1U) << 1U); } else { @@ -1269,11 +1506,109 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) } #endif /* RCC_HSI48_SUPPORT */ break; - + +#if defined(SDMMC1) && defined(RCC_CCIPR2_SDMMCSEL) + + case RCC_PERIPHCLK_SDMMC1: + + if(HAL_IS_BIT_SET(RCC->CCIPR2, RCC_CCIPR2_SDMMCSEL)) /* PLL "P" ? */ + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY) && HAL_IS_BIT_SET(RCC->PLLCFGR, RCC_PLLCFGR_PLLPEN)) + { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) || defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* f(PLL Source) / PLLM */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U)); +#endif + /* f(PLLSAI3CLK) = f(VCO input) * PLLN / PLLP */ + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; +#if defined(RCC_PLLP_DIV_2_31_SUPPORT) + pllp = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLPDIV) >> RCC_PLLCFGR_PLLPDIV_Pos; +#endif + if(pllp == 0U) + { + if(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLP) != RESET) + { + pllp = 17U; + } + else + { + pllp = 7U; + } + } + frequency = (pllvco * plln) / pllp; + } + else + { + frequency = 0U; + } + } + else /* 48MHz from PLL "Q" or MSI or PLLSAI1Q or HSI48 */ + { + srcclk = READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL); + + if(srcclk == RCC_CCIPR_CLK48SEL) /* MSI ? */ + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_MSIRDY)) + { + /*MSI frequency range in HZ*/ + frequency = MSIRangeTable[(__HAL_RCC_GET_MSI_RANGE() >> 4U)]; + } + else + { + frequency = 0U; + } + } + else if(srcclk == RCC_CCIPR_CLK48SEL_1) /* PLL "Q" ? */ + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY) && HAL_IS_BIT_SET(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN)) + { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) || defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* f(PLL Source) / PLLM */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U)); +#endif + /* f(PLL48M1CLK) = f(VCO input) * PLLN / PLLQ */ + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U); + } + else + { + frequency = 0U; + } + } + else if(srcclk == RCC_CCIPR_CLK48SEL_0) /* PLLSAI1 ? */ + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLSAI1RDY) && HAL_IS_BIT_SET(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1QEN)) + { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* f(PLLSAI1 Source) / PLLSAI1M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)); +#endif + /* f(PLL48M2CLK) = f(VCOSAI1 input) * PLLSAI1N / PLLSAI1Q */ + plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q) >> RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) + 1U) << 1U); + } + else + { + frequency = 0U; + } + } + else if((srcclk == 0U) && (HAL_IS_BIT_SET(RCC->CRRCR, RCC_CRRCR_HSI48RDY))) /* HSI48 ? */ + { + frequency = HSI48_VALUE; + } + else /* No clock source */ + { + frequency = 0U; + } + } + break; + +#endif /* SDMMC1 && RCC_CCIPR2_SDMMCSEL */ + case RCC_PERIPHCLK_USART1: /* Get the current USART1 source */ srcclk = __HAL_RCC_GET_USART1_SOURCE(); - + if(srcclk == RCC_USART1CLKSOURCE_PCLK2) { frequency = HAL_RCC_GetPCLK2Freq(); @@ -1300,7 +1635,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_USART2: /* Get the current USART2 source */ srcclk = __HAL_RCC_GET_USART2_SOURCE(); - + if(srcclk == RCC_USART2CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1329,7 +1664,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_USART3: /* Get the current USART3 source */ srcclk = __HAL_RCC_GET_USART3_SOURCE(); - + if(srcclk == RCC_USART3CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1360,7 +1695,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_UART4: /* Get the current UART4 source */ srcclk = __HAL_RCC_GET_UART4_SOURCE(); - + if(srcclk == RCC_UART4CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1391,7 +1726,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_UART5: /* Get the current UART5 source */ srcclk = __HAL_RCC_GET_UART5_SOURCE(); - + if(srcclk == RCC_UART5CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1416,11 +1751,11 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) break; #endif /* UART5 */ - + case RCC_PERIPHCLK_LPUART1: /* Get the current LPUART1 source */ srcclk = __HAL_RCC_GET_LPUART1_SOURCE(); - + if(srcclk == RCC_LPUART1CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1445,9 +1780,9 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) break; case RCC_PERIPHCLK_ADC: - + srcclk = __HAL_RCC_GET_ADC_SOURCE(); - + if(srcclk == RCC_ADCCLKSOURCE_SYSCLK) { frequency = HAL_RCC_GetSysClockFreq(); @@ -1456,9 +1791,13 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(__HAL_RCC_GET_PLLSAI1CLKOUT_CONFIG(RCC_PLLSAI1_ADC1CLK) != RESET) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* f(PLLSAI1 Source) / PLLSAI1M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)); +#endif /* f(PLLADC1CLK) = f(VCOSAI1 input) * PLLSAI1N / PLLSAI1R */ - plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N); - frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R) >> POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R)) + 1U) << 1U); + plln = READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N) >> RCC_PLLSAI1CFGR_PLLSAI1N_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R) >> RCC_PLLSAI1CFGR_PLLSAI1R_Pos) + 1U) << 1U); } } #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) @@ -1466,9 +1805,13 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) { if(__HAL_RCC_GET_PLLSAI2CLKOUT_CONFIG(RCC_PLLSAI2_ADC2CLK) != RESET) { +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* f(PLLSAI2 Source) / PLLSAI2M */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M) >> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U)); +#endif /* f(PLLADC2CLK) = f(VCOSAI2 input) * PLLSAI2N / PLLSAI2R */ - plln = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N); - frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R) >> POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R)) + 1U) << 1U); + plln = READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_PLLSAI2CFGR_PLLSAI2N_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R) >> RCC_PLLSAI2CFGR_PLLSAI2R_Pos) + 1U) << 1U); } } #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ @@ -1484,7 +1827,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_DFSDM1: /* Get the current DFSDM1 source */ srcclk = __HAL_RCC_GET_DFSDM1_SOURCE(); - + if(srcclk == RCC_DFSDM1CLKSOURCE_PCLK2) { frequency = HAL_RCC_GetPCLK2Freq(); @@ -1495,12 +1838,40 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) } break; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + + case RCC_PERIPHCLK_DFSDM1AUDIO: + /* Get the current DFSDM1 audio source */ + srcclk = __HAL_RCC_GET_DFSDM1AUDIO_SOURCE(); + + if(srcclk == RCC_DFSDM1AUDIOCLKSOURCE_SAI1) + { + frequency = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SAI1); + } + else if((srcclk == RCC_DFSDM1AUDIOCLKSOURCE_MSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_MSIRDY))) + { + /*MSI frequency range in HZ*/ + frequency = MSIRangeTable[(__HAL_RCC_GET_MSI_RANGE() >> 4U)]; + } + else if((srcclk == RCC_DFSDM1AUDIOCLKSOURCE_HSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))) + { + frequency = HSI_VALUE; + } + /* Clock not enabled for DFSDM1 audio source */ + else + { + frequency = 0U; + } + break; + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #endif /* DFSDM1_Filter0 */ case RCC_PERIPHCLK_I2C1: /* Get the current I2C1 source */ srcclk = __HAL_RCC_GET_I2C1_SOURCE(); - + if(srcclk == RCC_I2C1CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1525,7 +1896,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_I2C2: /* Get the current I2C2 source */ srcclk = __HAL_RCC_GET_I2C2_SOURCE(); - + if(srcclk == RCC_I2C2CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1550,7 +1921,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_I2C3: /* Get the current I2C3 source */ srcclk = __HAL_RCC_GET_I2C3_SOURCE(); - + if(srcclk == RCC_I2C3CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1575,7 +1946,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_I2C4: /* Get the current I2C4 source */ srcclk = __HAL_RCC_GET_I2C4_SOURCE(); - + if(srcclk == RCC_I2C4CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1600,7 +1971,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_LPTIM1: /* Get the current LPTIM1 source */ srcclk = __HAL_RCC_GET_LPTIM1_SOURCE(); - + if(srcclk == RCC_LPTIM1CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1627,7 +1998,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_LPTIM2: /* Get the current LPTIM2 source */ srcclk = __HAL_RCC_GET_LPTIM2_SOURCE(); - + if(srcclk == RCC_LPTIM2CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1656,7 +2027,7 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) case RCC_PERIPHCLK_SWPMI1: /* Get the current SWPMI1 source */ srcclk = __HAL_RCC_GET_SWPMI1_SOURCE(); - + if(srcclk == RCC_SWPMI1CLKSOURCE_PCLK1) { frequency = HAL_RCC_GetPCLK1Freq(); @@ -1674,6 +2045,45 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) #endif /* SWPMI1 */ +#if defined(OCTOSPI1) || defined(OCTOSPI2) + + case RCC_PERIPHCLK_OSPI: + /* Get the current OctoSPI clock source */ + srcclk = __HAL_RCC_GET_OSPI_SOURCE(); + + if(srcclk == RCC_OSPICLKSOURCE_SYSCLK) + { + frequency = HAL_RCC_GetSysClockFreq(); + } + else if((srcclk == RCC_OSPICLKSOURCE_MSI) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_MSIRDY))) + { + /*MSI frequency range in HZ*/ + frequency = MSIRangeTable[(__HAL_RCC_GET_MSI_RANGE() >> 4U)]; + } + else if(srcclk == RCC_OSPICLKSOURCE_PLL) + { + if(HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLRDY) && HAL_IS_BIT_SET(RCC->PLLCFGR, RCC_PLLCFGR_PLLQEN)) + { + /* f(PLL Source) / PLLM */ + pllvco = (pllvco / ((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U)); + /* f(PLL48M1CLK) = f(VCO input) * PLLN / PLLQ */ + plln = READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos; + frequency = (pllvco * plln) / (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLQ) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U); + } + else + { + frequency = 0U; + } + } + /* Clock not enabled for OctoSPI */ + else + { + frequency = 0U; + } + break; + +#endif /* OCTOSPI1 || OCTOSPI2 */ + default: break; } @@ -1689,12 +2099,12 @@ uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) /** @defgroup RCCEx_Exported_Functions_Group2 Extended Clock management functions * @brief Extended Clock management functions * -@verbatim +@verbatim =============================================================================== ##### Extended clock management functions ##### =============================================================================== [..] - This subsection provides a set of functions allowing to control the + This subsection provides a set of functions allowing to control the activation or deactivation of MSI PLL-mode, PLLSAI1, PLLSAI2, LSE CSS, Low speed clock output and clock after wake-up from STOP mode. @endverbatim @@ -1737,12 +2147,18 @@ HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI1(RCC_PLLSAI1InitTypeDef *PLLSAI1Init) } } - if(status == HAL_OK) + if(status == HAL_OK) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI1 Multiplication factor N */ + /* Configure the PLLSAI1 Division factors M, P, Q and R */ + __HAL_RCC_PLLSAI1_CONFIG(PLLSAI1Init->PLLSAI1M, PLLSAI1Init->PLLSAI1N, PLLSAI1Init->PLLSAI1P, PLLSAI1Init->PLLSAI1Q, PLLSAI1Init->PLLSAI1R); +#else /* Configure the PLLSAI1 Multiplication factor N */ /* Configure the PLLSAI1 Division factors P, Q and R */ __HAL_RCC_PLLSAI1_CONFIG(PLLSAI1Init->PLLSAI1N, PLLSAI1Init->PLLSAI1P, PLLSAI1Init->PLLSAI1Q, PLLSAI1Init->PLLSAI1R); - /* Configure the PLLSAI1 Clock output(s) */ +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + /* Configure the PLLSAI1 Clock output(s) */ __HAL_RCC_PLLSAI1CLKOUT_ENABLE(PLLSAI1Init->PLLSAI1ClockOut); /* Enable the PLLSAI1 again by setting PLLSAI1ON to 1*/ @@ -1761,7 +2177,7 @@ HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI1(RCC_PLLSAI1InitTypeDef *PLLSAI1Init) } } } - + return status; } @@ -1789,21 +2205,21 @@ HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI1(void) break; } } - - /* Disable the PLLSAI1 Clock outputs */ + + /* Disable the PLLSAI1 Clock outputs */ __HAL_RCC_PLLSAI1CLKOUT_DISABLE(RCC_PLLSAI1CFGR_PLLSAI1PEN|RCC_PLLSAI1CFGR_PLLSAI1QEN|RCC_PLLSAI1CFGR_PLLSAI1REN); /* Reset PLL source to save power if no PLLs on */ if((READ_BIT(RCC->CR, RCC_CR_PLLRDY) == RESET) #if defined(RCC_PLLSAI2_SUPPORT) - && + && (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == RESET) #endif /* RCC_PLLSAI2_SUPPORT */ ) - { + { MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, RCC_PLLSOURCE_NONE); } - + return status; } @@ -1825,6 +2241,9 @@ HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI2(RCC_PLLSAI2InitTypeDef *PLLSAI2Init) assert_param(IS_RCC_PLLSAI2M_VALUE(PLLSAI2Init->PLLSAI2M)); assert_param(IS_RCC_PLLSAI2N_VALUE(PLLSAI2Init->PLLSAI2N)); assert_param(IS_RCC_PLLSAI2P_VALUE(PLLSAI2Init->PLLSAI2P)); +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + assert_param(IS_RCC_PLLSAI2Q_VALUE(PLLSAI2Init->PLLSAI2Q)); +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ assert_param(IS_RCC_PLLSAI2R_VALUE(PLLSAI2Init->PLLSAI2R)); assert_param(IS_RCC_PLLSAI2CLOCKOUT_VALUE(PLLSAI2Init->PLLSAI2ClockOut)); @@ -1844,12 +2263,26 @@ HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI2(RCC_PLLSAI2InitTypeDef *PLLSAI2Init) } } - if(status == HAL_OK) + if(status == HAL_OK) { +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) && defined(RCC_PLLSAI2Q_DIV_SUPPORT) + /* Configure the PLLSAI2 Multiplication factor N */ + /* Configure the PLLSAI2 Division factors M, P, Q and R */ + __HAL_RCC_PLLSAI2_CONFIG(PLLSAI2Init->PLLSAI2M, PLLSAI2Init->PLLSAI2N, PLLSAI2Init->PLLSAI2P, PLLSAI2Init->PLLSAI2Q, PLLSAI2Init->PLLSAI2R); +#elif defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI2 Multiplication factor N */ + /* Configure the PLLSAI2 Division factors M, P and R */ + __HAL_RCC_PLLSAI2_CONFIG(PLLSAI2Init->PLLSAI2M, PLLSAI2Init->PLLSAI2N, PLLSAI2Init->PLLSAI2P, PLLSAI2Init->PLLSAI2R); +#elif defined(RCC_PLLSAI2Q_DIV_SUPPORT) + /* Configure the PLLSAI2 Multiplication factor N */ + /* Configure the PLLSAI2 Division factors P, Q and R */ + __HAL_RCC_PLLSAI2_CONFIG(PLLSAI2Init->PLLSAI2N, PLLSAI2Init->PLLSAI2P, PLLSAI2Init->PLLSAI2Q, PLLSAI2Init->PLLSAI2R); +#else /* Configure the PLLSAI2 Multiplication factor N */ /* Configure the PLLSAI2 Division factors P and R */ __HAL_RCC_PLLSAI2_CONFIG(PLLSAI2Init->PLLSAI2N, PLLSAI2Init->PLLSAI2P, PLLSAI2Init->PLLSAI2R); - /* Configure the PLLSAI2 Clock output(s) */ +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT && RCC_PLLSAI2Q_DIV_SUPPORT */ + /* Configure the PLLSAI2 Clock output(s) */ __HAL_RCC_PLLSAI2CLKOUT_ENABLE(PLLSAI2Init->PLLSAI2ClockOut); /* Enable the PLLSAI2 again by setting PLLSAI2ON to 1*/ @@ -1868,7 +2301,7 @@ HAL_StatusTypeDef HAL_RCCEx_EnablePLLSAI2(RCC_PLLSAI2InitTypeDef *PLLSAI2Init) } } } - + return status; } @@ -1896,19 +2329,23 @@ HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI2(void) break; } } - - /* Disable the PLLSAI2 Clock outputs */ + + /* Disable the PLLSAI2 Clock outputs */ +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + __HAL_RCC_PLLSAI2CLKOUT_DISABLE(RCC_PLLSAI2CFGR_PLLSAI2PEN|RCC_PLLSAI2CFGR_PLLSAI2QEN|RCC_PLLSAI2CFGR_PLLSAI2REN); +#else __HAL_RCC_PLLSAI2CLKOUT_DISABLE(RCC_PLLSAI2CFGR_PLLSAI2PEN|RCC_PLLSAI2CFGR_PLLSAI2REN); +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT && RCC_PLLSAI2Q_DIV_SUPPORT */ /* Reset PLL source to save power if no PLLs on */ if((READ_BIT(RCC->CR, RCC_CR_PLLRDY) == RESET) - && + && (READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == RESET) ) - { + { MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, RCC_PLLSOURCE_NONE); } - + return status; } @@ -1916,7 +2353,7 @@ HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI2(void) /** * @brief Configure the oscillator clock source for wakeup from Stop and CSS backup clock. - * @param WakeUpClk Wakeup clock + * @param WakeUpClk Wakeup clock * This parameter can be one of the following values: * @arg @ref RCC_STOP_WAKEUPCLOCK_MSI MSI oscillator selection * @arg @ref RCC_STOP_WAKEUPCLOCK_HSI HSI oscillator selection @@ -1927,14 +2364,14 @@ HAL_StatusTypeDef HAL_RCCEx_DisablePLLSAI2(void) void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk) { assert_param(IS_RCC_STOP_WAKEUPCLOCK(WakeUpClk)); - + __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(WakeUpClk); } /** * @brief Configure the MSI range after standby mode. * @note After Standby its frequency can be selected between 4 possible values (1, 2, 4 or 8 MHz). - * @param MSIRange MSI range + * @param MSIRange MSI range * This parameter can be one of the following values: * @arg @ref RCC_MSIRANGE_4 Range 4 around 1 MHz * @arg @ref RCC_MSIRANGE_5 Range 5 around 2 MHz @@ -1945,7 +2382,7 @@ void HAL_RCCEx_WakeUpStopCLKConfig(uint32_t WakeUpClk) void HAL_RCCEx_StandbyMSIRangeConfig(uint32_t MSIRange) { assert_param(IS_RCC_MSI_STANDBY_CLOCK_RANGE(MSIRange)); - + __HAL_RCC_MSI_STANDBY_RANGE_CONFIG(MSIRange); } @@ -1969,7 +2406,7 @@ void HAL_RCCEx_EnableLSECSS(void) void HAL_RCCEx_DisableLSECSS(void) { CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSECSSON) ; - + /* Disable LSE CSS IT if any */ __HAL_RCC_DISABLE_IT(RCC_IT_LSECSS); } @@ -1986,7 +2423,7 @@ void HAL_RCCEx_EnableLSECSS_IT(void) /* Enable LSE CSS IT */ __HAL_RCC_ENABLE_IT(RCC_IT_LSECSS); - + /* Enable IT on EXTI Line 19 */ __HAL_RCC_LSECSS_EXTI_ENABLE_IT(); __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE(); @@ -2007,7 +2444,7 @@ void HAL_RCCEx_LSECSS_IRQHandler(void) /* Clear RCC LSE CSS pending bit */ __HAL_RCC_CLEAR_IT(RCC_IT_LSECSS); } -} +} /** * @brief RCCEx LSE Clock Security System interrupt callback. @@ -2033,7 +2470,7 @@ void HAL_RCCEx_EnableLSCO(uint32_t LSCOSource) GPIO_InitTypeDef GPIO_InitStruct; FlagStatus pwrclkchanged = RESET; FlagStatus backupchanged = RESET; - + /* Check the parameters */ assert_param(IS_RCC_LSCOSOURCE(LSCOSource)); @@ -2058,9 +2495,9 @@ void HAL_RCCEx_EnableLSCO(uint32_t LSCOSource) HAL_PWR_EnableBkUpAccess(); backupchanged = SET; } - + MODIFY_REG(RCC->BDCR, RCC_BDCR_LSCOSEL | RCC_BDCR_LSCOEN, LSCOSource | RCC_BDCR_LSCOEN); - + if(backupchanged == SET) { HAL_PWR_DisableBkUpAccess(); @@ -2079,7 +2516,7 @@ void HAL_RCCEx_DisableLSCO(void) { FlagStatus pwrclkchanged = RESET; FlagStatus backupchanged = RESET; - + /* Update LSCOEN bit in Backup Domain control register */ if(__HAL_RCC_PWR_IS_CLK_DISABLED()) { @@ -2092,9 +2529,9 @@ void HAL_RCCEx_DisableLSCO(void) HAL_PWR_EnableBkUpAccess(); backupchanged = SET; } - + CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSCOEN); - + /* Restore previous configuration */ if(backupchanged == SET) { @@ -2134,7 +2571,7 @@ void HAL_RCCEx_DisableMSIPLLMode(void) #if defined(CRS) -/** @defgroup RCCEx_Exported_Functions_Group3 Extended Clock Recovery System Control functions +/** @defgroup RCCEx_Exported_Functions_Group3 Extended Clock Recovery System Control functions * @brief Extended Clock Recovery System Control functions * @verbatim @@ -2152,11 +2589,11 @@ void HAL_RCCEx_DisableMSIPLLMode(void) (##) Prepare synchronization configuration necessary for HSI48 calibration (+++) Default values can be set for frequency Error Measurement (reload and error limit) and also HSI48 oscillator smooth trimming. - (+++) Macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE can be also used to calculate + (+++) Macro __HAL_RCC_CRS_RELOADVALUE_CALCULATE can be also used to calculate directly reload value with target and sychronization frequencies values (##) Call function HAL_RCCEx_CRSConfig which (+++) Resets CRS registers to their default values. - (+++) Configures CRS registers with synchronization configuration + (+++) Configures CRS registers with synchronization configuration (+++) Enables automatic calibration and frequency error counter feature Note: When using USB LPM (Link Power Management) and the device is in Sleep mode, the periodic USB SOF will not be generated by the host. No SYNC signal will therefore be @@ -2168,23 +2605,23 @@ void HAL_RCCEx_DisableMSIPLLMode(void) (+++) Call function HAL_RCCEx_CRSWaitSynchronization() (+++) According to CRS status, user can decide to adjust again the calibration or continue application if synchronization is OK - + (#) User can retrieve information related to synchronization in calling function HAL_RCCEx_CRSGetSynchronizationInfo() (#) Regarding synchronization status and synchronization information, user can try a new calibration in changing synchronization configuration and call again HAL_RCCEx_CRSConfig. - Note: When the SYNC event is detected during the downcounting phase (before reaching the zero value), - it means that the actual frequency is lower than the target (and so, that the TRIM value should be - incremented), while when it is detected during the upcounting phase it means that the actual frequency + Note: When the SYNC event is detected during the downcounting phase (before reaching the zero value), + it means that the actual frequency is lower than the target (and so, that the TRIM value should be + incremented), while when it is detected during the upcounting phase it means that the actual frequency is higher (and that the TRIM value should be decremented). - (#) In interrupt mode, user can resort to the available macros (__HAL_RCC_CRS_XXX_IT). Interrupts will go + (#) In interrupt mode, user can resort to the available macros (__HAL_RCC_CRS_XXX_IT). Interrupts will go through CRS Handler (CRS_IRQn/CRS_IRQHandler) (++) Call function HAL_RCCEx_CRSConfig() (++) Enable CRS_IRQn (thanks to NVIC functions) (++) Enable CRS interrupt (__HAL_RCC_CRS_ENABLE_IT) - (++) Implement CRS status management in the following user callbacks called from + (++) Implement CRS status management in the following user callbacks called from HAL_RCCEx_CRS_IRQHandler(): (+++) HAL_RCCEx_CRS_SyncOkCallback() (+++) HAL_RCCEx_CRS_SyncWarnCallback() @@ -2193,7 +2630,7 @@ void HAL_RCCEx_DisableMSIPLLMode(void) (#) To force a SYNC EVENT, user can use the function HAL_RCCEx_CRSSoftwareSynchronizationGenerate(). This function can be called before calling HAL_RCCEx_CRSConfig (for instance in Systick handler) - + @endverbatim * @{ */ @@ -2206,7 +2643,7 @@ void HAL_RCCEx_DisableMSIPLLMode(void) void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit) { uint32_t value = 0; - + /* Check the parameters */ assert_param(IS_RCC_CRS_SYNC_DIV(pInit->Prescaler)); assert_param(IS_RCC_CRS_SYNC_SOURCE(pInit->Source)); @@ -2228,15 +2665,15 @@ void HAL_RCCEx_CRSConfig(RCC_CRSInitTypeDef *pInit) /* Set the RELOAD[15:0] bits according to ReloadValue value */ value |= pInit->ReloadValue; /* Set the FELIM[7:0] bits according to ErrorLimitValue value */ - value |= (pInit->ErrorLimitValue << POSITION_VAL(CRS_CFGR_FELIM)); + value |= (pInit->ErrorLimitValue << CRS_CFGR_FELIM_Pos); WRITE_REG(CRS->CFGR, value); /* Adjust HSI48 oscillator smooth trimming */ /* Set the TRIM[5:0] bits according to RCC_CRS_HSI48CalibrationValue value */ - MODIFY_REG(CRS->CR, CRS_CR_TRIM, (pInit->HSI48CalibrationValue << POSITION_VAL(CRS_CR_TRIM))); - + MODIFY_REG(CRS->CR, CRS_CR_TRIM, (pInit->HSI48CalibrationValue << CRS_CR_TRIM_Pos)); + /* START AUTOMATIC SYNCHRONIZATION*/ - + /* Enable Automatic trimming & Frequency error counter */ SET_BIT(CRS->CR, CRS_CR_AUTOTRIMEN | CRS_CR_CEN); } @@ -2251,7 +2688,7 @@ void HAL_RCCEx_CRSSoftwareSynchronizationGenerate(void) } /** - * @brief Return synchronization info + * @brief Return synchronization info * @param pSynchroInfo Pointer on RCC_CRSSynchroInfoTypeDef structure * @retval None */ @@ -2259,18 +2696,18 @@ void HAL_RCCEx_CRSGetSynchronizationInfo(RCC_CRSSynchroInfoTypeDef *pSynchroInfo { /* Check the parameter */ assert_param(pSynchroInfo != NULL); - + /* Get the reload value */ - pSynchroInfo->ReloadValue = (uint32_t)(READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD)); - + pSynchroInfo->ReloadValue = (READ_BIT(CRS->CFGR, CRS_CFGR_RELOAD)); + /* Get HSI48 oscillator smooth trimming */ - pSynchroInfo->HSI48CalibrationValue = (uint32_t)(READ_BIT(CRS->CR, CRS_CR_TRIM) >> POSITION_VAL(CRS_CR_TRIM)); + pSynchroInfo->HSI48CalibrationValue = (READ_BIT(CRS->CR, CRS_CR_TRIM) >> CRS_CR_TRIM_Pos); /* Get Frequency error capture */ - pSynchroInfo->FreqErrorCapture = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> POSITION_VAL(CRS_ISR_FECAP)); + pSynchroInfo->FreqErrorCapture = (READ_BIT(CRS->ISR, CRS_ISR_FECAP) >> CRS_ISR_FECAP_Pos); /* Get Frequency error direction */ - pSynchroInfo->FreqErrorDirection = (uint32_t)(READ_BIT(CRS->ISR, CRS_ISR_FEDIR)); + pSynchroInfo->FreqErrorDirection = (READ_BIT(CRS->ISR, CRS_ISR_FEDIR)); } /** @@ -2292,10 +2729,10 @@ uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout) { uint32_t crsstatus = RCC_CRS_NONE; uint32_t tickstart = 0U; - + /* Get timeout */ tickstart = HAL_GetTick(); - + /* Wait for CRS flag or timeout detection */ do { @@ -2311,51 +2748,51 @@ uint32_t HAL_RCCEx_CRSWaitSynchronization(uint32_t Timeout) { /* CRS SYNC event OK */ crsstatus |= RCC_CRS_SYNCOK; - + /* Clear CRS SYNC event OK bit */ __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCOK); } - + /* Check CRS SYNCWARN flag */ if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCWARN)) { /* CRS SYNC warning */ crsstatus |= RCC_CRS_SYNCWARN; - + /* Clear CRS SYNCWARN bit */ __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCWARN); } - + /* Check CRS TRIM overflow flag */ if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_TRIMOVF)) { /* CRS SYNC Error */ crsstatus |= RCC_CRS_TRIMOVF; - + /* Clear CRS Error bit */ __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_TRIMOVF); } - + /* Check CRS Error flag */ if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCERR)) { /* CRS SYNC Error */ crsstatus |= RCC_CRS_SYNCERR; - + /* Clear CRS Error bit */ __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCERR); } - + /* Check CRS SYNC Missed flag */ if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_SYNCMISS)) { /* CRS SYNC Missed */ crsstatus |= RCC_CRS_SYNCMISS; - + /* Clear CRS SYNC Missed bit */ __HAL_RCC_CRS_CLEAR_FLAG(RCC_CRS_FLAG_SYNCMISS); } - + /* Check CRS Expected SYNC flag */ if(__HAL_RCC_CRS_GET_FLAG(RCC_CRS_FLAG_ESYNC)) { @@ -2425,7 +2862,7 @@ void HAL_RCCEx_CRS_IRQHandler(void) /* Clear CRS Error flags */ WRITE_REG(CRS->ICR, CRS_ICR_ERRC); - + /* user error callback */ HAL_RCCEx_CRS_ErrorCallback(crserror); } @@ -2467,7 +2904,7 @@ __weak void HAL_RCCEx_CRS_ExpectedSyncCallback(void) /** * @brief RCCEx Clock Recovery System Error interrupt callback. - * @param Error Combination of Error status. + * @param Error Combination of Error status. * This parameter can be a combination of the following values: * @arg @ref RCC_CRS_SYNCERR * @arg @ref RCC_CRS_SYNCMISS @@ -2487,7 +2924,7 @@ __weak void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error) /** * @} */ - + #endif /* CRS */ /** @@ -2519,16 +2956,18 @@ static HAL_StatusTypeDef RCCEx_PLLSAI1_Config(RCC_PLLSAI1InitTypeDef *PllSai1, u assert_param(IS_RCC_PLLSAI1M_VALUE(PllSai1->PLLSAI1M)); assert_param(IS_RCC_PLLSAI1N_VALUE(PllSai1->PLLSAI1N)); assert_param(IS_RCC_PLLSAI1CLOCKOUT_VALUE(PllSai1->PLLSAI1ClockOut)); - + /* Check that PLLSAI1 clock source and divider M can be applied */ if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_NONE) { - /* PLL clock source and divider M already set, check that no request for change */ + /* PLL clock source and divider M already set, check that no request for change */ if((__HAL_RCC_GET_PLL_OSCSOURCE() != PllSai1->PLLSAI1Source) - || + || (PllSai1->PLLSAI1Source == RCC_PLLSOURCE_NONE) - || - (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U) != PllSai1->PLLSAI1M) +#if !defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + || + (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U) != PllSai1->PLLSAI1M) +#endif ) { status = HAL_ERROR; @@ -2561,14 +3000,19 @@ static HAL_StatusTypeDef RCCEx_PLLSAI1_Config(RCC_PLLSAI1InitTypeDef *PllSai1, u status = HAL_ERROR; break; } - + if(status == HAL_OK) { +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* Set PLLSAI1 clock source */ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PllSai1->PLLSAI1Source); +#else /* Set PLLSAI1 clock source and divider M */ - MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, PllSai1->PLLSAI1Source | (PllSai1->PLLSAI1M - 1U) << POSITION_VAL(RCC_PLLCFGR_PLLM)); + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, PllSai1->PLLSAI1Source | (PllSai1->PLLSAI1M - 1U) << RCC_PLLCFGR_PLLM_Pos); +#endif } } - + if(status == HAL_OK) { /* Disable the PLLSAI1 */ @@ -2587,41 +3031,79 @@ static HAL_StatusTypeDef RCCEx_PLLSAI1_Config(RCC_PLLSAI1InitTypeDef *PllSai1, u } } - if(status == HAL_OK) + if(status == HAL_OK) { if(Divider == DIVIDER_P_UPDATE) { assert_param(IS_RCC_PLLSAI1P_VALUE(PllSai1->PLLSAI1P)); +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + + /* Configure the PLLSAI1 Division factor M, P and Multiplication factor N*/ +#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV | RCC_PLLSAI1CFGR_PLLSAI1M, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (PllSai1->PLLSAI1P << RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos) | + ((PllSai1->PLLSAI1M - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)); +#else + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P | RCC_PLLSAI1CFGR_PLLSAI1M, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + ((PllSai1->PLLSAI1P >> 4U) << RCC_PLLSAI1CFGR_PLLSAI1P_Pos) | + ((PllSai1->PLLSAI1M - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)); +#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ + +#else /* Configure the PLLSAI1 Division factor P and Multiplication factor N*/ #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) - MODIFY_REG(RCC->PLLSAI1CFGR, - RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, - (PllSai1->PLLSAI1N << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | - (PllSai1->PLLSAI1P << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV))); + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (PllSai1->PLLSAI1P << RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos)); #else - MODIFY_REG(RCC->PLLSAI1CFGR, - RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P, - (PllSai1->PLLSAI1N << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | - ((PllSai1->PLLSAI1P >> 4U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P))); + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + ((PllSai1->PLLSAI1P >> 4U) << RCC_PLLSAI1CFGR_PLLSAI1P_Pos)); #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ + +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ } else if(Divider == DIVIDER_Q_UPDATE) { assert_param(IS_RCC_PLLSAI1Q_VALUE(PllSai1->PLLSAI1Q)); +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI1 Division factor M, Q and Multiplication factor N*/ + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q | RCC_PLLSAI1CFGR_PLLSAI1M, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (((PllSai1->PLLSAI1Q >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) | + ((PllSai1->PLLSAI1M - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)); +#else /* Configure the PLLSAI1 Division factor Q and Multiplication factor N*/ - MODIFY_REG(RCC->PLLSAI1CFGR, - RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, - (PllSai1->PLLSAI1N << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | - (((PllSai1->PLLSAI1Q >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q))); + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (((PllSai1->PLLSAI1Q >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos)); +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ } else { assert_param(IS_RCC_PLLSAI1R_VALUE(PllSai1->PLLSAI1R)); +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI1 Division factor M, R and Multiplication factor N*/ + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R | RCC_PLLSAI1CFGR_PLLSAI1M, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (((PllSai1->PLLSAI1R >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos) | + ((PllSai1->PLLSAI1M - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)); +#else /* Configure the PLLSAI1 Division factor R and Multiplication factor N*/ - MODIFY_REG(RCC->PLLSAI1CFGR, - RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, - (PllSai1->PLLSAI1N << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | - (((PllSai1->PLLSAI1R >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R))); + MODIFY_REG(RCC->PLLSAI1CFGR, + RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, + (PllSai1->PLLSAI1N << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | + (((PllSai1->PLLSAI1R >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos)); +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ } /* Enable the PLLSAI1 again by setting PLLSAI1ON to 1*/ @@ -2640,14 +3122,14 @@ static HAL_StatusTypeDef RCCEx_PLLSAI1_Config(RCC_PLLSAI1InitTypeDef *PllSai1, u } } - if(status == HAL_OK) + if(status == HAL_OK) { /* Configure the PLLSAI1 Clock output(s) */ __HAL_RCC_PLLSAI1CLKOUT_ENABLE(PllSai1->PLLSAI1ClockOut); } } } - + return status; } @@ -2674,16 +3156,18 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u assert_param(IS_RCC_PLLSAI2M_VALUE(PllSai2->PLLSAI2M)); assert_param(IS_RCC_PLLSAI2N_VALUE(PllSai2->PLLSAI2N)); assert_param(IS_RCC_PLLSAI2CLOCKOUT_VALUE(PllSai2->PLLSAI2ClockOut)); - + /* Check that PLLSAI2 clock source and divider M can be applied */ if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_NONE) { - /* PLL clock source and divider M already set, check that no request for change */ + /* PLL clock source and divider M already set, check that no request for change */ if((__HAL_RCC_GET_PLL_OSCSOURCE() != PllSai2->PLLSAI2Source) - || + || (PllSai2->PLLSAI2Source == RCC_PLLSOURCE_NONE) - || - (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> POSITION_VAL(RCC_PLLCFGR_PLLM)) + 1U) != PllSai2->PLLSAI2M) +#if !defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + || + (((READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1U) != PllSai2->PLLSAI2M) +#endif ) { status = HAL_ERROR; @@ -2716,14 +3200,19 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u status = HAL_ERROR; break; } - + if(status == HAL_OK) { +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* Set PLLSAI2 clock source */ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PllSai2->PLLSAI2Source); +#else /* Set PLLSAI2 clock source and divider M */ - MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, PllSai2->PLLSAI2Source | (PllSai2->PLLSAI2M - 1U) << POSITION_VAL(RCC_PLLCFGR_PLLM)); + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, PllSai2->PLLSAI2Source | (PllSai2->PLLSAI2M - 1U) << RCC_PLLCFGR_PLLM_Pos); +#endif } } - + if(status == HAL_OK) { /* Disable the PLLSAI2 */ @@ -2742,25 +3231,81 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u } } - if(status == HAL_OK) + if(status == HAL_OK) { if(Divider == DIVIDER_P_UPDATE) { assert_param(IS_RCC_PLLSAI2P_VALUE(PllSai2->PLLSAI2P)); +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + + /* Configure the PLLSAI2 Division factor M, P and Multiplication factor N*/ +#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2PDIV | RCC_PLLSAI2CFGR_PLLSAI2M, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (PllSai2->PLLSAI2P << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos) | + ((PllSai2->PLLSAI2M - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)); +#else + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P | RCC_PLLSAI2CFGR_PLLSAI2M, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + ((PllSai2->PLLSAI2P >> 4U) << RCC_PLLSAI2CFGR_PLLSAI2P_Pos) | + ((PllSai2->PLLSAI2M - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)); +#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ + +#else /* Configure the PLLSAI2 Division factor P and Multiplication factor N*/ - MODIFY_REG(RCC->PLLSAI2CFGR, - RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P, - (PllSai2->PLLSAI2N << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | - ((PllSai2->PLLSAI2P >> 4U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P))); +#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2PDIV, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (PllSai2->PLLSAI2P << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos)); +#else + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + ((PllSai2->PLLSAI2P >> 4U) << RCC_PLLSAI2CFGR_PLLSAI2P_Pos)); +#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ + +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ } +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + else if(Divider == DIVIDER_Q_UPDATE) + { + assert_param(IS_RCC_PLLSAI2Q_VALUE(PllSai2->PLLSAI2Q)); +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI2 Division factor M, Q and Multiplication factor N*/ + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2Q | RCC_PLLSAI2CFGR_PLLSAI2M, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (((PllSai2->PLLSAI2Q >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) | + ((PllSai2->PLLSAI2M - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)); +#else + /* Configure the PLLSAI2 Division factor Q and Multiplication factor N*/ + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2Q, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (((PllSai2->PLLSAI2Q >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2Q_Pos)); +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ + } +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ else { assert_param(IS_RCC_PLLSAI2R_VALUE(PllSai2->PLLSAI2R)); +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* Configure the PLLSAI2 Division factor M, R and Multiplication factor N*/ + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R | RCC_PLLSAI2CFGR_PLLSAI2M, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (((PllSai2->PLLSAI2R >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | + ((PllSai2->PLLSAI2M - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)); +#else /* Configure the PLLSAI2 Division factor R and Multiplication factor N*/ - MODIFY_REG(RCC->PLLSAI2CFGR, - RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, - (PllSai2->PLLSAI2N << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | - (((PllSai2->PLLSAI2R >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R))); + MODIFY_REG(RCC->PLLSAI2CFGR, + RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, + (PllSai2->PLLSAI2N << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | + (((PllSai2->PLLSAI2R >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos)); +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ } /* Enable the PLLSAI2 again by setting PLLSAI2ON to 1*/ @@ -2779,14 +3324,14 @@ static HAL_StatusTypeDef RCCEx_PLLSAI2_Config(RCC_PLLSAI2InitTypeDef *PllSai2, u } } - if(status == HAL_OK) + if(status == HAL_OK) { /* Configure the PLLSAI2 Clock output(s) */ __HAL_RCC_PLLSAI2CLKOUT_ENABLE(PllSai2->PLLSAI2ClockOut); } } } - + return status; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.h index deb2b1c929..b0000a7abe 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rcc_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rcc_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RCC HAL Extended module. ****************************************************************************** * @attention @@ -54,7 +52,7 @@ * @{ */ -/* Exported types ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ /** @defgroup RCCEx_Exported_Types RCCEx Exported Types * @{ @@ -69,8 +67,13 @@ typedef struct uint32_t PLLSAI1Source; /*!< PLLSAI1Source: PLLSAI1 entry clock source. This parameter must be a value of @ref RCC_PLL_Clock_Source */ +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + uint32_t PLLSAI1M; /*!< PLLSAI1M: specifies the division factor for PLLSAI1 input clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 16 */ +#else uint32_t PLLSAI1M; /*!< PLLSAI1M: specifies the division factor for PLLSAI1 input clock. This parameter must be a number between Min_Data = 1 and Max_Data = 8 */ +#endif uint32_t PLLSAI1N; /*!< PLLSAI1N: specifies the multiplication factor for PLLSAI1 VCO output clock. This parameter must be a number between 8 and 86 or 127 depending on devices. */ @@ -99,8 +102,13 @@ typedef struct uint32_t PLLSAI2Source; /*!< PLLSAI2Source: PLLSAI2 entry clock source. This parameter must be a value of @ref RCC_PLL_Clock_Source */ +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + uint32_t PLLSAI2M; /*!< PLLSAI2M: specifies the division factor for PLLSAI2 input clock. + This parameter must be a number between Min_Data = 1 and Max_Data = 16 */ +#else uint32_t PLLSAI2M; /*!< PLLSAI2M: specifies the division factor for PLLSAI2 input clock. This parameter must be a number between Min_Data = 1 and Max_Data = 8 */ +#endif uint32_t PLLSAI2N; /*!< PLLSAI2N: specifies the multiplication factor for PLLSAI2 VCO output clock. This parameter must be a number between 8 and 86 or 127 depending on devices. */ @@ -108,6 +116,11 @@ typedef struct uint32_t PLLSAI2P; /*!< PLLSAI2P: specifies the division factor for SAI clock. This parameter must be a value of @ref RCC_PLLP_Clock_Divider */ +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + uint32_t PLLSAI2Q; /*!< PLLSAI2Q: specifies the division factor for DSI clock. + This parameter must be a value of @ref RCC_PLLQ_Clock_Divider */ +#endif + uint32_t PLLSAI2R; /*!< PLLSAI2R: specifies the division factor for ADC clock. This parameter must be a value of @ref RCC_PLLR_Clock_Divider */ @@ -177,7 +190,7 @@ typedef struct uint32_t I2c3ClockSelection; /*!< Specifies I2C3 clock source. This parameter can be a value of @ref RCCEx_I2C3_Clock_Source */ - + #if defined(I2C4) uint32_t I2c4ClockSelection; /*!< Specifies I2C4 clock source. @@ -233,16 +246,43 @@ typedef struct uint32_t Dfsdm1ClockSelection; /*!< Specifies DFSDM1 clock source. This parameter can be a value of @ref RCCEx_DFSDM1_Clock_Source */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t Dfsdm1AudioClockSelection; /*!< Specifies DFSDM1 audio clock source. + This parameter can be a value of @ref RCCEx_DFSDM1_Audio_Clock_Source */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) + + uint32_t LtdcClockSelection; /*!< Specifies LTDC clock source. + This parameter can be a value of @ref RCCEx_LTDC_Clock_Source */ + +#endif /* LTDC */ + +#if defined(DSI) + + uint32_t DsiClockSelection; /*!< Specifies DSI clock source. + This parameter can be a value of @ref RCCEx_DSI_Clock_Source */ + +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) + + uint32_t OspiClockSelection; /*!< Specifies OctoSPI clock source. + This parameter can be a value of @ref RCCEx_OSPI_Clock_Source */ + +#endif + uint32_t RTCClockSelection; /*!< Specifies RTC clock source. This parameter can be a value of @ref RCC_RTC_Clock_Source */ }RCC_PeriphCLKInitTypeDef; #if defined(CRS) -/** - * @brief RCC_CRS Init structure definition +/** + * @brief RCC_CRS Init structure definition */ typedef struct { @@ -267,8 +307,8 @@ typedef struct }RCC_CRSInitTypeDef; -/** - * @brief RCC_CRS Synchronization structure definition +/** + * @brief RCC_CRS Synchronization structure definition */ typedef struct { @@ -278,12 +318,12 @@ typedef struct uint32_t HSI48CalibrationValue; /*!< Specifies value loaded in HSI48 oscillator smooth trimming. This parameter must be a number between 0 and 0x3F */ - uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter + uint32_t FreqErrorCapture; /*!< Specifies the value loaded in the .FECAP, the frequency error counter value latched in the time of the last SYNC event. This parameter must be a number between 0 and 0xFFFF */ - uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the - frequency error counter latched in the time of the last SYNC event. + uint32_t FreqErrorDirection; /*!< Specifies the value loaded in the .FEDIR, the counting direction of the + frequency error counter latched in the time of the last SYNC event. It shows whether the actual frequency is below or above the target. This parameter must be a value of @ref RCCEx_CRS_FreqErrorDirection*/ @@ -302,8 +342,8 @@ typedef struct /** @defgroup RCCEx_LSCO_Clock_Source Low Speed Clock Source * @{ */ -#define RCC_LSCOSOURCE_LSI (uint32_t)0x00000000U /*!< LSI selection for low speed clock output */ -#define RCC_LSCOSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock output */ +#define RCC_LSCOSOURCE_LSI 0x00000000U /*!< LSI selection for low speed clock output */ +#define RCC_LSCOSOURCE_LSE RCC_BDCR_LSCOSEL /*!< LSE selection for low speed clock output */ /** * @} */ @@ -311,46 +351,58 @@ typedef struct /** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection * @{ */ -#define RCC_PERIPHCLK_USART1 ((uint32_t)0x00000001U) -#define RCC_PERIPHCLK_USART2 ((uint32_t)0x00000002U) +#define RCC_PERIPHCLK_USART1 0x00000001U +#define RCC_PERIPHCLK_USART2 0x00000002U #if defined(USART3) -#define RCC_PERIPHCLK_USART3 ((uint32_t)0x00000004U) +#define RCC_PERIPHCLK_USART3 0x00000004U #endif #if defined(UART4) -#define RCC_PERIPHCLK_UART4 ((uint32_t)0x00000008U) +#define RCC_PERIPHCLK_UART4 0x00000008U #endif #if defined(UART5) -#define RCC_PERIPHCLK_UART5 ((uint32_t)0x00000010U) +#define RCC_PERIPHCLK_UART5 0x00000010U #endif -#define RCC_PERIPHCLK_LPUART1 ((uint32_t)0x00000020U) -#define RCC_PERIPHCLK_I2C1 ((uint32_t)0x00000040U) +#define RCC_PERIPHCLK_LPUART1 0x00000020U +#define RCC_PERIPHCLK_I2C1 0x00000040U #if defined(I2C2) -#define RCC_PERIPHCLK_I2C2 ((uint32_t)0x00000080U) +#define RCC_PERIPHCLK_I2C2 0x00000080U #endif -#define RCC_PERIPHCLK_I2C3 ((uint32_t)0x00000100U) -#define RCC_PERIPHCLK_LPTIM1 ((uint32_t)0x00000200U) -#define RCC_PERIPHCLK_LPTIM2 ((uint32_t)0x00000400U) -#define RCC_PERIPHCLK_SAI1 ((uint32_t)0x00000800U) +#define RCC_PERIPHCLK_I2C3 0x00000100U +#define RCC_PERIPHCLK_LPTIM1 0x00000200U +#define RCC_PERIPHCLK_LPTIM2 0x00000400U +#define RCC_PERIPHCLK_SAI1 0x00000800U #if defined(SAI2) -#define RCC_PERIPHCLK_SAI2 ((uint32_t)0x00001000U) +#define RCC_PERIPHCLK_SAI2 0x00001000U #endif #if defined(USB_OTG_FS) || defined(USB) -#define RCC_PERIPHCLK_USB ((uint32_t)0x00002000U) +#define RCC_PERIPHCLK_USB 0x00002000U #endif -#define RCC_PERIPHCLK_ADC ((uint32_t)0x00004000U) +#define RCC_PERIPHCLK_ADC 0x00004000U #if defined(SWPMI1) -#define RCC_PERIPHCLK_SWPMI1 ((uint32_t)0x00008000U) +#define RCC_PERIPHCLK_SWPMI1 0x00008000U #endif #if defined(DFSDM1_Filter0) -#define RCC_PERIPHCLK_DFSDM1 ((uint32_t)0x00010000U) +#define RCC_PERIPHCLK_DFSDM1 0x00010000U +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define RCC_PERIPHCLK_DFSDM1AUDIO 0x00200000U +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif -#define RCC_PERIPHCLK_RTC ((uint32_t)0x00020000U) -#define RCC_PERIPHCLK_RNG ((uint32_t)0x00040000U) +#define RCC_PERIPHCLK_RTC 0x00020000U +#define RCC_PERIPHCLK_RNG 0x00040000U #if defined(SDMMC1) -#define RCC_PERIPHCLK_SDMMC1 ((uint32_t)0x00080000U) +#define RCC_PERIPHCLK_SDMMC1 0x00080000U #endif #if defined(I2C4) -#define RCC_PERIPHCLK_I2C4 ((uint32_t)0x00100000U) +#define RCC_PERIPHCLK_I2C4 0x00100000U +#endif +#if defined(LTDC) +#define RCC_PERIPHCLK_LTDC 0x00400000U +#endif +#if defined(DSI) +#define RCC_PERIPHCLK_DSI 0x00800000U +#endif +#if defined(OCTOSPI1) || defined(OCTOSPI2) +#define RCC_PERIPHCLK_OSPI 0x01000000U #endif /** * @} @@ -360,7 +412,7 @@ typedef struct /** @defgroup RCCEx_USART1_Clock_Source USART1 Clock Source * @{ */ -#define RCC_USART1CLKSOURCE_PCLK2 ((uint32_t)0x00000000U) +#define RCC_USART1CLKSOURCE_PCLK2 0x00000000U #define RCC_USART1CLKSOURCE_SYSCLK RCC_CCIPR_USART1SEL_0 #define RCC_USART1CLKSOURCE_HSI RCC_CCIPR_USART1SEL_1 #define RCC_USART1CLKSOURCE_LSE (RCC_CCIPR_USART1SEL_0 | RCC_CCIPR_USART1SEL_1) @@ -371,7 +423,7 @@ typedef struct /** @defgroup RCCEx_USART2_Clock_Source USART2 Clock Source * @{ */ -#define RCC_USART2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_USART2CLKSOURCE_PCLK1 0x00000000U #define RCC_USART2CLKSOURCE_SYSCLK RCC_CCIPR_USART2SEL_0 #define RCC_USART2CLKSOURCE_HSI RCC_CCIPR_USART2SEL_1 #define RCC_USART2CLKSOURCE_LSE (RCC_CCIPR_USART2SEL_0 | RCC_CCIPR_USART2SEL_1) @@ -383,7 +435,7 @@ typedef struct /** @defgroup RCCEx_USART3_Clock_Source USART3 Clock Source * @{ */ -#define RCC_USART3CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_USART3CLKSOURCE_PCLK1 0x00000000U #define RCC_USART3CLKSOURCE_SYSCLK RCC_CCIPR_USART3SEL_0 #define RCC_USART3CLKSOURCE_HSI RCC_CCIPR_USART3SEL_1 #define RCC_USART3CLKSOURCE_LSE (RCC_CCIPR_USART3SEL_0 | RCC_CCIPR_USART3SEL_1) @@ -396,7 +448,7 @@ typedef struct /** @defgroup RCCEx_UART4_Clock_Source UART4 Clock Source * @{ */ -#define RCC_UART4CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_UART4CLKSOURCE_PCLK1 0x00000000U #define RCC_UART4CLKSOURCE_SYSCLK RCC_CCIPR_UART4SEL_0 #define RCC_UART4CLKSOURCE_HSI RCC_CCIPR_UART4SEL_1 #define RCC_UART4CLKSOURCE_LSE (RCC_CCIPR_UART4SEL_0 | RCC_CCIPR_UART4SEL_1) @@ -409,7 +461,7 @@ typedef struct /** @defgroup RCCEx_UART5_Clock_Source UART5 Clock Source * @{ */ -#define RCC_UART5CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_UART5CLKSOURCE_PCLK1 0x00000000U #define RCC_UART5CLKSOURCE_SYSCLK RCC_CCIPR_UART5SEL_0 #define RCC_UART5CLKSOURCE_HSI RCC_CCIPR_UART5SEL_1 #define RCC_UART5CLKSOURCE_LSE (RCC_CCIPR_UART5SEL_0 | RCC_CCIPR_UART5SEL_1) @@ -421,7 +473,7 @@ typedef struct /** @defgroup RCCEx_LPUART1_Clock_Source LPUART1 Clock Source * @{ */ -#define RCC_LPUART1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_LPUART1CLKSOURCE_PCLK1 0x00000000U #define RCC_LPUART1CLKSOURCE_SYSCLK RCC_CCIPR_LPUART1SEL_0 #define RCC_LPUART1CLKSOURCE_HSI RCC_CCIPR_LPUART1SEL_1 #define RCC_LPUART1CLKSOURCE_LSE (RCC_CCIPR_LPUART1SEL_0 | RCC_CCIPR_LPUART1SEL_1) @@ -432,7 +484,7 @@ typedef struct /** @defgroup RCCEx_I2C1_Clock_Source I2C1 Clock Source * @{ */ -#define RCC_I2C1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_I2C1CLKSOURCE_PCLK1 0x00000000U #define RCC_I2C1CLKSOURCE_SYSCLK RCC_CCIPR_I2C1SEL_0 #define RCC_I2C1CLKSOURCE_HSI RCC_CCIPR_I2C1SEL_1 /** @@ -443,7 +495,7 @@ typedef struct /** @defgroup RCCEx_I2C2_Clock_Source I2C2 Clock Source * @{ */ -#define RCC_I2C2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_I2C2CLKSOURCE_PCLK1 0x00000000U #define RCC_I2C2CLKSOURCE_SYSCLK RCC_CCIPR_I2C2SEL_0 #define RCC_I2C2CLKSOURCE_HSI RCC_CCIPR_I2C2SEL_1 /** @@ -454,34 +506,44 @@ typedef struct /** @defgroup RCCEx_I2C3_Clock_Source I2C3 Clock Source * @{ */ -#define RCC_I2C3CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_I2C3CLKSOURCE_PCLK1 0x00000000U #define RCC_I2C3CLKSOURCE_SYSCLK RCC_CCIPR_I2C3SEL_0 #define RCC_I2C3CLKSOURCE_HSI RCC_CCIPR_I2C3SEL_1 /** * @} */ - + #if defined(I2C4) /** @defgroup RCCEx_I2C4_Clock_Source I2C4 Clock Source * @{ */ -#define RCC_I2C4CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_I2C4CLKSOURCE_PCLK1 0x00000000U #define RCC_I2C4CLKSOURCE_SYSCLK RCC_CCIPR2_I2C4SEL_0 #define RCC_I2C4CLKSOURCE_HSI RCC_CCIPR2_I2C4SEL_1 /** * @} */ -#endif /* I2C4 */ +#endif /* I2C4 */ /** @defgroup RCCEx_SAI1_Clock_Source SAI1 Clock Source * @{ */ -#define RCC_SAI1CLKSOURCE_PLLSAI1 ((uint32_t)0x00000000U) +#define RCC_SAI1CLKSOURCE_PLLSAI1 0x00000000U #if defined(RCC_PLLSAI2_SUPPORT) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define RCC_SAI1CLKSOURCE_PLLSAI2 RCC_CCIPR2_SAI1SEL_0 +#else #define RCC_SAI1CLKSOURCE_PLLSAI2 RCC_CCIPR_SAI1SEL_0 +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* RCC_PLLSAI2_SUPPORT */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define RCC_SAI1CLKSOURCE_PLL RCC_CCIPR2_SAI1SEL_1 +#define RCC_SAI1CLKSOURCE_PIN (RCC_CCIPR2_SAI1SEL_1 | RCC_CCIPR2_SAI1SEL_0) +#define RCC_SAI1CLKSOURCE_HSI RCC_CCIPR2_SAI1SEL_2 +#else #define RCC_SAI1CLKSOURCE_PLL RCC_CCIPR_SAI1SEL_1 #define RCC_SAI1CLKSOURCE_PIN RCC_CCIPR_SAI1SEL +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -490,10 +552,17 @@ typedef struct /** @defgroup RCCEx_SAI2_Clock_Source SAI2 Clock Source * @{ */ -#define RCC_SAI2CLKSOURCE_PLLSAI1 ((uint32_t)0x00000000U) +#define RCC_SAI2CLKSOURCE_PLLSAI1 0x00000000U +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define RCC_SAI2CLKSOURCE_PLLSAI2 RCC_CCIPR2_SAI2SEL_0 +#define RCC_SAI2CLKSOURCE_PLL RCC_CCIPR2_SAI2SEL_1 +#define RCC_SAI2CLKSOURCE_PIN (RCC_CCIPR2_SAI2SEL_1 | RCC_CCIPR2_SAI2SEL_0) +#define RCC_SAI2CLKSOURCE_HSI RCC_CCIPR2_SAI2SEL_2 +#else #define RCC_SAI2CLKSOURCE_PLLSAI2 RCC_CCIPR_SAI2SEL_0 #define RCC_SAI2CLKSOURCE_PLL RCC_CCIPR_SAI2SEL_1 #define RCC_SAI2CLKSOURCE_PIN RCC_CCIPR_SAI2SEL +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -502,7 +571,7 @@ typedef struct /** @defgroup RCCEx_LPTIM1_Clock_Source LPTIM1 Clock Source * @{ */ -#define RCC_LPTIM1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_LPTIM1CLKSOURCE_PCLK1 0x00000000U #define RCC_LPTIM1CLKSOURCE_LSI RCC_CCIPR_LPTIM1SEL_0 #define RCC_LPTIM1CLKSOURCE_HSI RCC_CCIPR_LPTIM1SEL_1 #define RCC_LPTIM1CLKSOURCE_LSE RCC_CCIPR_LPTIM1SEL @@ -513,7 +582,7 @@ typedef struct /** @defgroup RCCEx_LPTIM2_Clock_Source LPTIM2 Clock Source * @{ */ -#define RCC_LPTIM2CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_LPTIM2CLKSOURCE_PCLK1 0x00000000U #define RCC_LPTIM2CLKSOURCE_LSI RCC_CCIPR_LPTIM2SEL_0 #define RCC_LPTIM2CLKSOURCE_HSI RCC_CCIPR_LPTIM2SEL_1 #define RCC_LPTIM2CLKSOURCE_LSE RCC_CCIPR_LPTIM2SEL @@ -526,13 +595,16 @@ typedef struct * @{ */ #if defined(RCC_HSI48_SUPPORT) -#define RCC_SDMMC1CLKSOURCE_HSI48 ((uint32_t)0x00000000U) +#define RCC_SDMMC1CLKSOURCE_HSI48 0x00000000U /*!< HSI48 clock selected as SDMMC1 clock */ #else -#define RCC_SDMMC1CLKSOURCE_NONE ((uint32_t)0x00000000U) +#define RCC_SDMMC1CLKSOURCE_NONE 0x00000000U /*!< No clock selected as SDMMC1 clock */ #endif /* RCC_HSI48_SUPPORT */ -#define RCC_SDMMC1CLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0 -#define RCC_SDMMC1CLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 -#define RCC_SDMMC1CLKSOURCE_MSI RCC_CCIPR_CLK48SEL +#define RCC_SDMMC1CLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0 /*!< PLLSAI1 "Q" clock selected as SDMMC1 clock */ +#define RCC_SDMMC1CLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 /*!< PLL "Q" clock selected as SDMMC1 clock */ +#define RCC_SDMMC1CLKSOURCE_MSI RCC_CCIPR_CLK48SEL /*!< MSI clock selected as SDMMC1 clock */ +#if defined(RCC_CCIPR2_SDMMCSEL) +#define RCC_SDMMC1CLKSOURCE_PLLP RCC_CCIPR2_SDMMCSEL /*!< PLL "P" clock selected as SDMMC1 kernel clock */ +#endif /* RCC_CCIPR2_SDMMCSEL */ /** * @} */ @@ -542,9 +614,9 @@ typedef struct * @{ */ #if defined(RCC_HSI48_SUPPORT) -#define RCC_RNGCLKSOURCE_HSI48 ((uint32_t)0x00000000U) +#define RCC_RNGCLKSOURCE_HSI48 0x00000000U #else -#define RCC_RNGCLKSOURCE_NONE ((uint32_t)0x00000000U) +#define RCC_RNGCLKSOURCE_NONE 0x00000000U #endif /* RCC_HSI48_SUPPORT */ #define RCC_RNGCLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0 #define RCC_RNGCLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 @@ -558,9 +630,9 @@ typedef struct * @{ */ #if defined(RCC_HSI48_SUPPORT) -#define RCC_USBCLKSOURCE_HSI48 ((uint32_t)0x00000000U) +#define RCC_USBCLKSOURCE_HSI48 0x00000000U #else -#define RCC_USBCLKSOURCE_NONE ((uint32_t)0x00000000U) +#define RCC_USBCLKSOURCE_NONE 0x00000000U #endif /* RCC_HSI48_SUPPORT */ #define RCC_USBCLKSOURCE_PLLSAI1 RCC_CCIPR_CLK48SEL_0 #define RCC_USBCLKSOURCE_PLL RCC_CCIPR_CLK48SEL_1 @@ -573,7 +645,7 @@ typedef struct /** @defgroup RCCEx_ADC_Clock_Source ADC Clock Source * @{ */ -#define RCC_ADCCLKSOURCE_NONE ((uint32_t)0x00000000U) +#define RCC_ADCCLKSOURCE_NONE 0x00000000U #define RCC_ADCCLKSOURCE_PLLSAI1 RCC_CCIPR_ADCSEL_0 #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || defined(STM32L496xx) || defined(STM32L4A6xx) #define RCC_ADCCLKSOURCE_PLLSAI2 RCC_CCIPR_ADCSEL_1 @@ -587,7 +659,7 @@ typedef struct /** @defgroup RCCEx_SWPMI1_Clock_Source SWPMI1 Clock Source * @{ */ -#define RCC_SWPMI1CLKSOURCE_PCLK1 ((uint32_t)0x00000000U) +#define RCC_SWPMI1CLKSOURCE_PCLK1 0x00000000U #define RCC_SWPMI1CLKSOURCE_HSI RCC_CCIPR_SWPMI1SEL /** * @} @@ -598,13 +670,65 @@ typedef struct /** @defgroup RCCEx_DFSDM1_Clock_Source DFSDM1 Clock Source * @{ */ -#define RCC_DFSDM1CLKSOURCE_PCLK2 ((uint32_t)0x00000000U) +#define RCC_DFSDM1CLKSOURCE_PCLK2 0x00000000U +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define RCC_DFSDM1CLKSOURCE_SYSCLK RCC_CCIPR2_DFSDM1SEL +#else #define RCC_DFSDM1CLKSOURCE_SYSCLK RCC_CCIPR_DFSDM1SEL +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup RCCEx_DFSDM1_Audio_Clock_Source DFSDM1 Audio Clock Source + * @{ + */ +#define RCC_DFSDM1AUDIOCLKSOURCE_SAI1 0x00000000U +#define RCC_DFSDM1AUDIOCLKSOURCE_HSI RCC_CCIPR2_ADFSDM1SEL_0 +#define RCC_DFSDM1AUDIOCLKSOURCE_MSI RCC_CCIPR2_ADFSDM1SEL_1 +/** + * @} + */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) +/** @defgroup RCCEx_LTDC_Clock_Source LTDC Clock Source + * @{ + */ +#define RCC_LTDCCLKSOURCE_PLLSAI2_DIV2 0x00000000U +#define RCC_LTDCCLKSOURCE_PLLSAI2_DIV4 RCC_CCIPR2_PLLSAI2DIVR_0 +#define RCC_LTDCCLKSOURCE_PLLSAI2_DIV8 RCC_CCIPR2_PLLSAI2DIVR_1 +#define RCC_LTDCCLKSOURCE_PLLSAI2_DIV16 RCC_CCIPR2_PLLSAI2DIVR +/** + * @} + */ +#endif /* LTDC */ + +#if defined(DSI) +/** @defgroup RCCEx_DSI_Clock_Source DSI Clock Source + * @{ + */ +#define RCC_DSICLKSOURCE_DSIPHY 0x00000000U +#define RCC_DSICLKSOURCE_PLLSAI2 RCC_CCIPR2_DSISEL +/** + * @} + */ +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) +/** @defgroup RCCEx_OSPI_Clock_Source OctoSPI Clock Source + * @{ + */ +#define RCC_OSPICLKSOURCE_SYSCLK 0x00000000U +#define RCC_OSPICLKSOURCE_MSI RCC_CCIPR2_OSPISEL_0 +#define RCC_OSPICLKSOURCE_PLL RCC_CCIPR2_OSPISEL_1 +/** + * @} + */ +#endif /* OCTOSPI1 || OCTOSPI2 */ + /** @defgroup RCCEx_EXTI_LINE_LSECSS RCC LSE CSS external interrupt line * @{ */ @@ -618,13 +742,13 @@ typedef struct /** @defgroup RCCEx_CRS_Status RCCEx CRS Status * @{ */ -#define RCC_CRS_NONE ((uint32_t)0x00000000U) -#define RCC_CRS_TIMEOUT ((uint32_t)0x00000001U) -#define RCC_CRS_SYNCOK ((uint32_t)0x00000002U) -#define RCC_CRS_SYNCWARN ((uint32_t)0x00000004U) -#define RCC_CRS_SYNCERR ((uint32_t)0x00000008U) -#define RCC_CRS_SYNCMISS ((uint32_t)0x00000010U) -#define RCC_CRS_TRIMOVF ((uint32_t)0x00000020U) +#define RCC_CRS_NONE 0x00000000U +#define RCC_CRS_TIMEOUT 0x00000001U +#define RCC_CRS_SYNCOK 0x00000002U +#define RCC_CRS_SYNCWARN 0x00000004U +#define RCC_CRS_SYNCERR 0x00000008U +#define RCC_CRS_SYNCMISS 0x00000010U +#define RCC_CRS_TRIMOVF 0x00000020U /** * @} */ @@ -632,7 +756,7 @@ typedef struct /** @defgroup RCCEx_CRS_SynchroSource RCCEx CRS SynchroSource * @{ */ -#define RCC_CRS_SYNC_SOURCE_GPIO ((uint32_t)0x00000000U) /*!< Synchro Signal source GPIO */ +#define RCC_CRS_SYNC_SOURCE_GPIO 0x00000000U /*!< Synchro Signal source GPIO */ #define RCC_CRS_SYNC_SOURCE_LSE CRS_CFGR_SYNCSRC_0 /*!< Synchro Signal source LSE */ #define RCC_CRS_SYNC_SOURCE_USB CRS_CFGR_SYNCSRC_1 /*!< Synchro Signal source USB SOF (default)*/ /** @@ -642,7 +766,7 @@ typedef struct /** @defgroup RCCEx_CRS_SynchroDivider RCCEx CRS SynchroDivider * @{ */ -#define RCC_CRS_SYNC_DIV1 ((uint32_t)0x00000000U) /*!< Synchro Signal not divided (default) */ +#define RCC_CRS_SYNC_DIV1 0x00000000U /*!< Synchro Signal not divided (default) */ #define RCC_CRS_SYNC_DIV2 CRS_CFGR_SYNCDIV_0 /*!< Synchro Signal divided by 2 */ #define RCC_CRS_SYNC_DIV4 CRS_CFGR_SYNCDIV_1 /*!< Synchro Signal divided by 4 */ #define RCC_CRS_SYNC_DIV8 (CRS_CFGR_SYNCDIV_1 | CRS_CFGR_SYNCDIV_0) /*!< Synchro Signal divided by 8 */ @@ -657,8 +781,8 @@ typedef struct /** @defgroup RCCEx_CRS_SynchroPolarity RCCEx CRS SynchroPolarity * @{ */ -#define RCC_CRS_SYNC_POLARITY_RISING ((uint32_t)0x00000000U) /*!< Synchro Active on rising edge (default) */ -#define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */ +#define RCC_CRS_SYNC_POLARITY_RISING 0x00000000U /*!< Synchro Active on rising edge (default) */ +#define RCC_CRS_SYNC_POLARITY_FALLING CRS_CFGR_SYNCPOL /*!< Synchro Active on falling edge */ /** * @} */ @@ -666,16 +790,16 @@ typedef struct /** @defgroup RCCEx_CRS_ReloadValueDefault RCCEx CRS ReloadValueDefault * @{ */ -#define RCC_CRS_RELOADVALUE_DEFAULT ((uint32_t)0x0000BB7FU) /*!< The reset value of the RELOAD field corresponds - to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */ +#define RCC_CRS_RELOADVALUE_DEFAULT 0x0000BB7FU /*!< The reset value of the RELOAD field corresponds + to a target frequency of 48 MHz and a synchronization signal frequency of 1 kHz (SOF signal from USB). */ /** * @} */ - + /** @defgroup RCCEx_CRS_ErrorLimitDefault RCCEx CRS ErrorLimitDefault * @{ */ -#define RCC_CRS_ERRORLIMIT_DEFAULT ((uint32_t)0x00000022U) /*!< Default Frequency error limit */ +#define RCC_CRS_ERRORLIMIT_DEFAULT 0x00000022U /*!< Default Frequency error limit */ /** * @} */ @@ -683,9 +807,9 @@ typedef struct /** @defgroup RCCEx_CRS_HSI48CalibrationDefault RCCEx CRS HSI48CalibrationDefault * @{ */ -#define RCC_CRS_HSI48CALIBRATION_DEFAULT ((uint32_t)0x00000020U) /*!< The default value is 32, which corresponds to the middle of the trimming interval. +#define RCC_CRS_HSI48CALIBRATION_DEFAULT 0x00000020U /*!< The default value is 32, which corresponds to the middle of the trimming interval. The trimming step is around 67 kHz between two consecutive TRIM steps. A higher TRIM value - corresponds to a higher output frequency */ + corresponds to a higher output frequency */ /** * @} */ @@ -693,8 +817,8 @@ typedef struct /** @defgroup RCCEx_CRS_FreqErrorDirection RCCEx CRS FreqErrorDirection * @{ */ -#define RCC_CRS_FREQERRORDIR_UP ((uint32_t)0x00000000U) /*!< Upcounting direction, the actual frequency is above the target */ -#define RCC_CRS_FREQERRORDIR_DOWN ((uint32_t)CRS_ISR_FEDIR) /*!< Downcounting direction, the actual frequency is below the target */ +#define RCC_CRS_FREQERRORDIR_UP 0x00000000U /*!< Upcounting direction, the actual frequency is above the target */ +#define RCC_CRS_FREQERRORDIR_DOWN CRS_ISR_FEDIR /*!< Downcounting direction, the actual frequency is below the target */ /** * @} */ @@ -713,7 +837,7 @@ typedef struct /** * @} */ - + /** @defgroup RCCEx_CRS_Flags RCCEx CRS Flags * @{ */ @@ -748,6 +872,11 @@ typedef struct * @note PLLSAI1 clock source is common with the main PLL (configured through * __HAL_RCC_PLL_CONFIG() macro) * + @if STM32L4S9xx + * @param __PLLSAI1M__ specifies the division factor of PLLSAI1 input clock. + * This parameter must be a number between Min_Data = 1 and Max_Data = 16. + * + @endif * @param __PLLSAI1N__ specifies the multiplication factor for PLLSAI1 VCO output clock. * This parameter must be a number between 8 and 86. * @note You have to set the PLLSAI1N parameter correctly to ensure that the VCO @@ -769,24 +898,50 @@ typedef struct * * @retval None */ +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + +#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) + +#define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1M__, __PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \ + WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | \ + ((((__PLLSAI1Q__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) | \ + ((((__PLLSAI1R__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos) | \ + ((__PLLSAI1P__) << RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos) | \ + (((__PLLSAI1M__) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)) + +#else + +#define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1M__, __PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \ + WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | \ + (((__PLLSAI1P__) >> 4U) << RCC_PLLSAI1CFGR_PLLSAI1P_Pos) | \ + ((((__PLLSAI1Q__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) | \ + ((((__PLLSAI1R__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos) | \ + (((__PLLSAI1M__) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos)) + +#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ + +#else + #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) #define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \ - WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | \ - ((((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) | \ - ((((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R)) | \ - ((__PLLSAI1P__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV))) + WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | \ + ((((__PLLSAI1Q__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) | \ + ((((__PLLSAI1R__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos) | \ + ((__PLLSAI1P__) << RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos)) #else #define __HAL_RCC_PLLSAI1_CONFIG(__PLLSAI1N__, __PLLSAI1P__, __PLLSAI1Q__, __PLLSAI1R__) \ - WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) | \ - (((__PLLSAI1P__) >> 4U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P)) | \ - ((((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) | \ - ((((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R))) - + WRITE_REG(RCC->PLLSAI1CFGR, ((__PLLSAI1N__) << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) | \ + (((__PLLSAI1P__) >> 4U) << RCC_PLLSAI1CFGR_PLLSAI1P_Pos) | \ + ((((__PLLSAI1Q__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) | \ + ((((__PLLSAI1R__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos)) + #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + /** * @brief Macro to configure the PLLSAI1 clock multiplication factor N. * @@ -803,7 +958,26 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI1_MULN_CONFIG(__PLLSAI1N__) \ - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N, (__PLLSAI1N__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1N)) + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N, (__PLLSAI1N__) << RCC_PLLSAI1CFGR_PLLSAI1N_Pos) + +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) + +/** @brief Macro to configure the PLLSAI1 input clock division factor M. + * + * @note This function must be used only when the PLLSAI1 is disabled. + * @note PLLSAI1 clock source is common with the main PLL (configured through + * __HAL_RCC_PLL_CONFIG() macro) + * + * @param __PLLSAI1M__ specifies the division factor for PLLSAI1 clock. + * This parameter must be a number between Min_Data = 1 and Max_Data = 16. + * + * @retval None + */ + +#define __HAL_RCC_PLLSAI1_DIVM_CONFIG(__PLLSAI1M__) \ + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M, ((__PLLSAI1M__) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ /** @brief Macro to configure the PLLSAI1 clock division factor P. * @@ -821,12 +995,12 @@ typedef struct #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) #define __HAL_RCC_PLLSAI1_DIVP_CONFIG(__PLLSAI1P__) \ - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV, (__PLLSAI1P__) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1PDIV)) - + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV, (__PLLSAI1P__) << RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos) + #else #define __HAL_RCC_PLLSAI1_DIVP_CONFIG(__PLLSAI1P__) \ - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P, ((__PLLSAI1P__) >> 4U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1P)) + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P, ((__PLLSAI1P__) >> 4U) << RCC_PLLSAI1CFGR_PLLSAI1P_Pos) #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ @@ -843,7 +1017,7 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI1_DIVQ_CONFIG(__PLLSAI1Q__) \ - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q, (((__PLLSAI1Q__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1Q)) + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1Q, (((__PLLSAI1Q__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) /** @brief Macro to configure the PLLSAI1 clock division factor R. * @@ -858,7 +1032,7 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI1_DIVR_CONFIG(__PLLSAI1R__) \ - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R, (((__PLLSAI1R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI1CFGR_PLLSAI1R)) + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R, (((__PLLSAI1R__) >> 1U) - 1U) << RCC_PLLSAI1CFGR_PLLSAI1R_Pos) /** * @brief Macros to enable or disable the PLLSAI1. @@ -910,6 +1084,11 @@ typedef struct * @note PLLSAI2 clock source is common with the main PLL (configured through * __HAL_RCC_PLL_CONFIG() macro) * + @if STM32L4S9xx + * @param __PLLSAI2M__ specifies the division factor of PLLSAI2 input clock. + * This parameter must be a number between Min_Data = 1 and Max_Data = 16. + * + @endif * @param __PLLSAI2N__ specifies the multiplication factor for PLLSAI2 VCO output clock. * This parameter must be a number between 8 and 86. * @note You have to set the PLLSAI2N parameter correctly to ensure that the VCO @@ -920,27 +1099,74 @@ typedef struct * else (2 to 31). * SAI2 clock frequency = f(PLLSAI2) / PLLSAI2P * + @if STM32L4S9xx + * @param __PLLSAI2Q__ specifies the division factor for DSI clock. + * This parameter must be in the range (2, 4, 6 or 8). + * DSI clock frequency = f(PLLSAI2) / PLLSAI2Q + * + @endif * @param __PLLSAI2R__ specifies the division factor for SAR ADC clock. * This parameter must be in the range (2, 4, 6 or 8). * * @retval None */ -#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) -#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \ - WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | \ - ((((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R)) | \ - ((__PLLSAI2P__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2PDIV))) +# if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) && defined(RCC_PLLSAI2Q_DIV_SUPPORT) + +#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2M__, __PLLSAI2N__, __PLLSAI2P__, __PLLSAI2Q__, __PLLSAI2R__) \ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + ((((__PLLSAI2Q__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | \ + ((__PLLSAI2P__) << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos) | \ + (((__PLLSAI2M__) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)) + +# elif defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) + +#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2M__, __PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | \ + ((__PLLSAI2P__) << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos) | \ + (((__PLLSAI2M__) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)) + +# else + +#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2M__, __PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + (((__PLLSAI2P__) >> 4U) << RCC_PLLSAI2CFGR_PLLSAI2P_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | \ + (((__PLLSAI2M__) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos)) + +# endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT && RCC_PLLSAI2Q_DIV_SUPPORT */ #else +# if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) && defined(RCC_PLLSAI2Q_DIV_SUPPORT) + +#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2Q__, __PLLSAI2R__) \ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + ((((__PLLSAI2Q__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | \ + ((__PLLSAI2P__) << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos)) + +# elif defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) + #define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \ - WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) | \ - (((__PLLSAI2P__) >> 4U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P)) | \ - ((((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R))) - -#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) | \ + ((__PLLSAI2P__) << RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos)) + +# else + +#define __HAL_RCC_PLLSAI2_CONFIG(__PLLSAI2N__, __PLLSAI2P__, __PLLSAI2R__) \ + WRITE_REG(RCC->PLLSAI2CFGR, ((__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) | \ + (((__PLLSAI2P__) >> 4U) << RCC_PLLSAI2CFGR_PLLSAI2P_Pos) | \ + ((((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos)) + +# endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT && RCC_PLLSAI2Q_DIV_SUPPORT */ + +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ /** @@ -959,7 +1185,26 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI2_MULN_CONFIG(__PLLSAI2N__) \ - MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N, (__PLLSAI2N__) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2N)) + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N, (__PLLSAI2N__) << RCC_PLLSAI2CFGR_PLLSAI2N_Pos) + +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + +/** @brief Macro to configure the PLLSAI2 input clock division factor M. + * + * @note This function must be used only when the PLLSAI2 is disabled. + * @note PLLSAI2 clock source is common with the main PLL (configured through + * __HAL_RCC_PLL_CONFIG() macro) + * + * @param __PLLSAI2M__ specifies the division factor for PLLSAI2 clock. + * This parameter must be a number between Min_Data = 1 and Max_Data = 16. + * + * @retval None + */ + +#define __HAL_RCC_PLLSAI2_DIVM_CONFIG(__PLLSAI2M__) \ + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M, ((__PLLSAI2M__) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ /** @brief Macro to configure the PLLSAI2 clock division factor P. * @@ -974,7 +1219,26 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI2_DIVP_CONFIG(__PLLSAI2P__) \ - MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P, ((__PLLSAI2P__) >> 4U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2P)) + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P, ((__PLLSAI2P__) >> 4U) << RCC_PLLSAI2CFGR_PLLSAI2P_Pos) + +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) + +/** @brief Macro to configure the PLLSAI2 clock division factor Q. + * + * @note This function must be used only when the PLLSAI2 is disabled. + * @note PLLSAI2 clock source is common with the main PLL (configured through + * __HAL_RCC_PLL_CONFIG() macro) + * + * @param __PLLSAI2Q__ specifies the division factor for USB/RNG/SDMMC1 clock. + * This parameter must be in the range (2, 4, 6 or 8). + * Use to set USB/RNG/SDMMC1 clock frequency = f(PLLSAI2) / PLLSAI2Q + * + * @retval None + */ +#define __HAL_RCC_PLLSAI2_DIVQ_CONFIG(__PLLSAI2Q__) \ + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2Q, (((__PLLSAI2Q__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) + +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ /** @brief Macro to configure the PLLSAI2 clock division factor R. * @@ -989,7 +1253,7 @@ typedef struct * @retval None */ #define __HAL_RCC_PLLSAI2_DIVR_CONFIG(__PLLSAI2R__) \ - MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R, (((__PLLSAI2R__) >> 1U) - 1U) << POSITION_VAL(RCC_PLLSAI2CFGR_PLLSAI2R)) + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R, (((__PLLSAI2R__) >> 1U) - 1U) << RCC_PLLSAI2CFGR_PLLSAI2R_Pos) /** * @brief Macros to enable or disable the PLLSAI2. @@ -1002,14 +1266,26 @@ typedef struct #define __HAL_RCC_PLLSAI2_DISABLE() CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI2ON) /** - * @brief Macros to enable or disable each clock output (PLLSAI2_SAI2 and PLLSAI2_ADC2). + * @brief Macros to enable or disable each clock output (PLLSAI2_SAI2, PLLSAI2_ADC2 and RCC_PLLSAI2_DSICLK). * @note Enabling and disabling those clocks can be done without the need to stop the PLL. * This is mainly used to save Power. * @param __PLLSAI2_CLOCKOUT__ specifies the PLLSAI2 clock to be output. * This parameter can be one or a combination of the following values: + @if STM32L486xx * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve - * high-quality audio performance on SAI interface in case. + * high-quality audio performance on SAI interface in case. * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral. + @endif + @if STM32L4A6xx + * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve + * high-quality audio performance on SAI interface in case. + * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral. + @endif + @if STM32L4S9xx + * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve + * high-quality audio performance on SAI interface in case. + * @arg @ref RCC_PLLSAI2_DSICLK Clock used to clock DSI peripheral. + @endif * @retval None */ @@ -1018,12 +1294,24 @@ typedef struct #define __HAL_RCC_PLLSAI2CLKOUT_DISABLE(__PLLSAI2_CLOCKOUT__) CLEAR_BIT(RCC->PLLSAI2CFGR, (__PLLSAI2_CLOCKOUT__)) /** - * @brief Macro to get clock output enable status (PLLSAI2_SAI2 and PLLSAI2_ADC2). + * @brief Macro to get clock output enable status (PLLSAI2_SAI2, PLLSAI2_ADC2 and RCC_PLLSAI2_DSICLK). * @param __PLLSAI2_CLOCKOUT__ specifies the PLLSAI2 clock to be output. * This parameter can be one of the following values: + @if STM32L486xx * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve - * high-quality audio performance on SAI interface in case. + * high-quality audio performance on SAI interface in case. * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral. + @endif + @if STM32L4A6xx + * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve + * high-quality audio performance on SAI interface in case. + * @arg @ref RCC_PLLSAI2_ADC2CLK Clock used to clock ADC peripheral. + @endif + @if STM32L4S9xx + * @arg @ref RCC_PLLSAI2_SAI2CLK This clock is used to generate an accurate clock to achieve + * high-quality audio performance on SAI interface in case. + * @arg @ref RCC_PLLSAI2_DSICLK Clock used to clock DSI peripheral. + @endif * @retval SET / RESET */ #define __HAL_RCC_GET_PLLSAI2CLKOUT_CONFIG(__PLLSAI2_CLOCKOUT__) READ_BIT(RCC->PLLSAI2CFGR, (__PLLSAI2_CLOCKOUT__)) @@ -1039,23 +1327,25 @@ typedef struct @if STM32L486xx * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2 @endif - @if STM32L4A6xx - * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2 - @endif * @arg @ref RCC_SAI1CLKSOURCE_PLL SAI1 clock = PLL "P" clock (PLLSAI3CLK if PLLSAI2 exists, else PLLSAI2CLK) * @arg @ref RCC_SAI1CLKSOURCE_PIN SAI1 clock = External Clock (SAI1_EXTCLK) + @if STM32L4S9xx + * @arg @ref RCC_SAI1CLKSOURCE_HSI SAI1 clock = HSI16 + @endif * @if STM32L443xx * @note HSI16 is automatically set as SAI1 clock source when PLL are disabled for devices without PLLSAI2. @endif - @if STM32L462xx - * @note HSI16 is automatically set as SAI1 clock source when PLL are disabled for devices without PLLSAI2. - @endif * * @retval None */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) #define __HAL_RCC_SAI1_CONFIG(__SAI1_CLKSOURCE__)\ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI1SEL, (uint32_t)(__SAI1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_SAI1SEL, (__SAI1_CLKSOURCE__)) +#else +#define __HAL_RCC_SAI1_CONFIG(__SAI1_CLKSOURCE__)\ + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI1SEL, (__SAI1_CLKSOURCE__)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** @brief Macro to get the SAI1 clock source. * @retval The clock source can be one of the following values: @@ -1063,17 +1353,18 @@ typedef struct @if STM32L486xx * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2 @endif - @if STM32L4A6xx - * @arg @ref RCC_SAI1CLKSOURCE_PLLSAI2 SAI1 clock = PLLSAI2 "P" clock (PLLSAI2CLK) for devices with PLLSAI2 - @endif * @arg @ref RCC_SAI1CLKSOURCE_PLL SAI1 clock = PLL "P" clock (PLLSAI3CLK if PLLSAI2 exists, else PLLSAI2CLK) * @arg @ref RCC_SAI1CLKSOURCE_PIN SAI1 clock = External Clock (SAI1_EXTCLK) * - * @note Despite returned values RCC_SAI1CLKSOURCE_PLLSAI1 or RCC_SAI1CLKSOURCE_PLL, HSI16 is automatically set as SAI1 + * @note Despite returned values RCC_SAI1CLKSOURCE_PLLSAI1 or RCC_SAI1CLKSOURCE_PLL, HSI16 is automatically set as SAI1 * clock source when PLLs are disabled for devices without PLLSAI2. * */ -#define __HAL_RCC_GET_SAI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI1SEL))) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define __HAL_RCC_GET_SAI1_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_SAI1SEL)) +#else +#define __HAL_RCC_GET_SAI1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI1SEL)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #if defined(SAI2) @@ -1086,11 +1377,19 @@ typedef struct * @arg @ref RCC_SAI2CLKSOURCE_PLLSAI2 SAI2 clock = PLLSAI2 "P" clock (PLLSAI2CLK) * @arg @ref RCC_SAI2CLKSOURCE_PLL SAI2 clock = PLL "P" clock (PLLSAI3CLK) * @arg @ref RCC_SAI2CLKSOURCE_PIN SAI2 clock = External Clock (SAI2_EXTCLK) + @if STM32L4S9xx + * @arg @ref RCC_SAI2CLKSOURCE_HSI SAI2 clock = HSI16 + @endif * * @retval None */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) #define __HAL_RCC_SAI2_CONFIG(__SAI2_CLKSOURCE__ )\ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI2SEL, (uint32_t)(__SAI2_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_SAI2SEL, (__SAI2_CLKSOURCE__)) +#else +#define __HAL_RCC_SAI2_CONFIG(__SAI2_CLKSOURCE__ )\ + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI2SEL, (__SAI2_CLKSOURCE__)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** @brief Macro to get the SAI2 clock source. * @retval The clock source can be one of the following values: @@ -1099,7 +1398,11 @@ typedef struct * @arg @ref RCC_SAI2CLKSOURCE_PLL SAI2 clock = PLL "P" clock (PLLSAI3CLK) * @arg @ref RCC_SAI2CLKSOURCE_PIN SAI2 clock = External Clock (SAI2_EXTCLK) */ -#define __HAL_RCC_GET_SAI2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI2SEL))) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define __HAL_RCC_GET_SAI2_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_SAI2SEL)) +#else +#define __HAL_RCC_GET_SAI2_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_SAI2SEL)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* SAI2 */ @@ -1113,7 +1416,7 @@ typedef struct * @retval None */ #define __HAL_RCC_I2C1_CONFIG(__I2C1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C1SEL, (uint32_t)(__I2C1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C1SEL, (__I2C1_CLKSOURCE__)) /** @brief Macro to get the I2C1 clock source. * @retval The clock source can be one of the following values: @@ -1121,7 +1424,7 @@ typedef struct * @arg @ref RCC_I2C1CLKSOURCE_HSI HSI selected as I2C1 clock * @arg @ref RCC_I2C1CLKSOURCE_SYSCLK System Clock selected as I2C1 clock */ -#define __HAL_RCC_GET_I2C1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C1SEL))) +#define __HAL_RCC_GET_I2C1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C1SEL)) #if defined(I2C2) @@ -1135,7 +1438,7 @@ typedef struct * @retval None */ #define __HAL_RCC_I2C2_CONFIG(__I2C2_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C2SEL, (uint32_t)(__I2C2_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C2SEL, (__I2C2_CLKSOURCE__)) /** @brief Macro to get the I2C2 clock source. * @retval The clock source can be one of the following values: @@ -1143,7 +1446,7 @@ typedef struct * @arg @ref RCC_I2C2CLKSOURCE_HSI HSI selected as I2C2 clock * @arg @ref RCC_I2C2CLKSOURCE_SYSCLK System Clock selected as I2C2 clock */ -#define __HAL_RCC_GET_I2C2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C2SEL))) +#define __HAL_RCC_GET_I2C2_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C2SEL)) #endif /* I2C2 */ @@ -1157,7 +1460,7 @@ typedef struct * @retval None */ #define __HAL_RCC_I2C3_CONFIG(__I2C3_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C3SEL, (uint32_t)(__I2C3_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_I2C3SEL, (__I2C3_CLKSOURCE__)) /** @brief Macro to get the I2C3 clock source. * @retval The clock source can be one of the following values: @@ -1165,7 +1468,7 @@ typedef struct * @arg @ref RCC_I2C3CLKSOURCE_HSI HSI selected as I2C3 clock * @arg @ref RCC_I2C3CLKSOURCE_SYSCLK System Clock selected as I2C3 clock */ -#define __HAL_RCC_GET_I2C3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C3SEL))) +#define __HAL_RCC_GET_I2C3_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_I2C3SEL)) #if defined(I2C4) @@ -1179,7 +1482,7 @@ typedef struct * @retval None */ #define __HAL_RCC_I2C4_CONFIG(__I2C4_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL, (uint32_t)(__I2C4_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL, (__I2C4_CLKSOURCE__)) /** @brief Macro to get the I2C4 clock source. * @retval The clock source can be one of the following values: @@ -1187,7 +1490,7 @@ typedef struct * @arg @ref RCC_I2C4CLKSOURCE_HSI HSI selected as I2C4 clock * @arg @ref RCC_I2C4CLKSOURCE_SYSCLK System Clock selected as I2C4 clock */ -#define __HAL_RCC_GET_I2C4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL))) +#define __HAL_RCC_GET_I2C4_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_I2C4SEL)) #endif /* I2C4 */ @@ -1203,7 +1506,7 @@ typedef struct * @retval None */ #define __HAL_RCC_USART1_CONFIG(__USART1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART1SEL, (uint32_t)(__USART1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART1SEL, (__USART1_CLKSOURCE__)) /** @brief Macro to get the USART1 clock source. * @retval The clock source can be one of the following values: @@ -1212,7 +1515,7 @@ typedef struct * @arg @ref RCC_USART1CLKSOURCE_SYSCLK System Clock selected as USART1 clock * @arg @ref RCC_USART1CLKSOURCE_LSE LSE selected as USART1 clock */ -#define __HAL_RCC_GET_USART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART1SEL))) +#define __HAL_RCC_GET_USART1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_USART1SEL)) /** @brief Macro to configure the USART2 clock (USART2CLK). * @@ -1225,7 +1528,7 @@ typedef struct * @retval None */ #define __HAL_RCC_USART2_CONFIG(__USART2_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART2SEL, (uint32_t)(__USART2_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART2SEL, (__USART2_CLKSOURCE__)) /** @brief Macro to get the USART2 clock source. * @retval The clock source can be one of the following values: @@ -1234,7 +1537,7 @@ typedef struct * @arg @ref RCC_USART2CLKSOURCE_SYSCLK System Clock selected as USART2 clock * @arg @ref RCC_USART2CLKSOURCE_LSE LSE selected as USART2 clock */ -#define __HAL_RCC_GET_USART2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART2SEL))) +#define __HAL_RCC_GET_USART2_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_USART2SEL)) #if defined(USART3) @@ -1249,7 +1552,7 @@ typedef struct * @retval None */ #define __HAL_RCC_USART3_CONFIG(__USART3_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART3SEL, (uint32_t)(__USART3_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART3SEL, (__USART3_CLKSOURCE__)) /** @brief Macro to get the USART3 clock source. * @retval The clock source can be one of the following values: @@ -1258,7 +1561,7 @@ typedef struct * @arg @ref RCC_USART3CLKSOURCE_SYSCLK System Clock selected as USART3 clock * @arg @ref RCC_USART3CLKSOURCE_LSE LSE selected as USART3 clock */ -#define __HAL_RCC_GET_USART3_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_USART3SEL))) +#define __HAL_RCC_GET_USART3_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_USART3SEL)) #endif /* USART3 */ @@ -1275,7 +1578,7 @@ typedef struct * @retval None */ #define __HAL_RCC_UART4_CONFIG(__UART4_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART4SEL, (uint32_t)(__UART4_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART4SEL, (__UART4_CLKSOURCE__)) /** @brief Macro to get the UART4 clock source. * @retval The clock source can be one of the following values: @@ -1284,7 +1587,7 @@ typedef struct * @arg @ref RCC_UART4CLKSOURCE_SYSCLK System Clock selected as UART4 clock * @arg @ref RCC_UART4CLKSOURCE_LSE LSE selected as UART4 clock */ -#define __HAL_RCC_GET_UART4_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_UART4SEL))) +#define __HAL_RCC_GET_UART4_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_UART4SEL)) #endif /* UART4 */ @@ -1301,7 +1604,7 @@ typedef struct * @retval None */ #define __HAL_RCC_UART5_CONFIG(__UART5_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART5SEL, (uint32_t)(__UART5_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_UART5SEL, (__UART5_CLKSOURCE__)) /** @brief Macro to get the UART5 clock source. * @retval The clock source can be one of the following values: @@ -1310,7 +1613,7 @@ typedef struct * @arg @ref RCC_UART5CLKSOURCE_SYSCLK System Clock selected as UART5 clock * @arg @ref RCC_UART5CLKSOURCE_LSE LSE selected as UART5 clock */ -#define __HAL_RCC_GET_UART5_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_UART5SEL))) +#define __HAL_RCC_GET_UART5_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_UART5SEL)) #endif /* UART5 */ @@ -1325,7 +1628,7 @@ typedef struct * @retval None */ #define __HAL_RCC_LPUART1_CONFIG(__LPUART1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, (uint32_t)(__LPUART1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, (__LPUART1_CLKSOURCE__)) /** @brief Macro to get the LPUART1 clock source. * @retval The clock source can be one of the following values: @@ -1334,7 +1637,7 @@ typedef struct * @arg @ref RCC_LPUART1CLKSOURCE_SYSCLK System Clock selected as LPUART1 clock * @arg @ref RCC_LPUART1CLKSOURCE_LSE LSE selected as LPUART1 clock */ -#define __HAL_RCC_GET_LPUART1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPUART1SEL))) +#define __HAL_RCC_GET_LPUART1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_LPUART1SEL)) /** @brief Macro to configure the LPTIM1 clock (LPTIM1CLK). * @@ -1347,7 +1650,7 @@ typedef struct * @retval None */ #define __HAL_RCC_LPTIM1_CONFIG(__LPTIM1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL, (uint32_t)(__LPTIM1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL, (__LPTIM1_CLKSOURCE__)) /** @brief Macro to get the LPTIM1 clock source. * @retval The clock source can be one of the following values: @@ -1356,7 +1659,7 @@ typedef struct * @arg @ref RCC_LPTIM1CLKSOURCE_HSI System Clock selected as LPUART1 clock * @arg @ref RCC_LPTIM1CLKSOURCE_LSE LSE selected as LPUART1 clock */ -#define __HAL_RCC_GET_LPTIM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL))) +#define __HAL_RCC_GET_LPTIM1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM1SEL)) /** @brief Macro to configure the LPTIM2 clock (LPTIM2CLK). * @@ -1369,7 +1672,7 @@ typedef struct * @retval None */ #define __HAL_RCC_LPTIM2_CONFIG(__LPTIM2_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL, (uint32_t)(__LPTIM2_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL, (__LPTIM2_CLKSOURCE__)) /** @brief Macro to get the LPTIM2 clock source. * @retval The clock source can be one of the following values: @@ -1378,84 +1681,87 @@ typedef struct * @arg @ref RCC_LPTIM2CLKSOURCE_HSI System Clock selected as LPUART1 clock * @arg @ref RCC_LPTIM2CLKSOURCE_LSE LSE selected as LPUART1 clock */ -#define __HAL_RCC_GET_LPTIM2_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL))) +#define __HAL_RCC_GET_LPTIM2_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_LPTIM2SEL)) #if defined(SDMMC1) /** @brief Macro to configure the SDMMC1 clock. * - @if STM32L443xx - * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source. - @endif - @if STM32L462xx - * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source. - @endif @if STM32L486xx * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source. @endif - @if STM32L4A6xx + * + @if STM32L443xx * @note USB, RNG and SDMMC1 peripherals share the same 48MHz clock source. @endif * * @param __SDMMC1_CLKSOURCE__ specifies the SDMMC1 clock source. * This parameter can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 - * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock - @endif - @if STM32L462xx - * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 - * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock - @endif @if STM32L486xx * @arg @ref RCC_SDMMC1CLKSOURCE_NONE No clock selected as SDMMC1 clock for devices without HSI48 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" Clock selected as SDMMC1 clock @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 Clock selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL Clock selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" Clock selected as SDMMC1 clock @endif + @if STM32L4S9xx + * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 + * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" Clock selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLP PLL "P" Clock selected as SDMMC1 clock + @endif + * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" Clock selected as SDMMC1 clock * @retval None */ +#if defined(RCC_CCIPR2_SDMMCSEL) #define __HAL_RCC_SDMMC1_CONFIG(__SDMMC1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__SDMMC1_CLKSOURCE__)) + do \ + { \ + if((__SDMMC1_CLKSOURCE__) == RCC_SDMMC1CLKSOURCE_PLLP) \ + { \ + SET_BIT(RCC->CCIPR2, RCC_CCIPR2_SDMMCSEL); \ + } \ + else \ + { \ + CLEAR_BIT(RCC->CCIPR2, RCC_CCIPR2_SDMMCSEL); \ + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (__SDMMC1_CLKSOURCE__)); \ + } \ + } while(0) +#else +#define __HAL_RCC_SDMMC1_CONFIG(__SDMMC1_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (__SDMMC1_CLKSOURCE__)) +#endif /* RCC_CCIPR2_SDMMCSEL */ /** @brief Macro to get the SDMMC1 clock. * @retval The clock source can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 - * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock - @endif - @if STM32L462xx - * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 - * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock - @endif @if STM32L486xx * @arg @ref RCC_SDMMC1CLKSOURCE_NONE No clock selected as SDMMC1 clock for devices without HSI48 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock - * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock @endif + @if STM32L4S9xx + * @arg @ref RCC_SDMMC1CLKSOURCE_HSI48 HSI48 selected as SDMMC1 clock for devices with HSI48 + * @arg @ref RCC_SDMMC1CLKSOURCE_MSI MSI selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as SDMMC1 clock + * @arg @ref RCC_SDMMC1CLKSOURCE_PLLP PLL "P" clock (PLLSAI3CLK) selected as SDMMC1 kernel clock + @endif + * @arg @ref RCC_SDMMC1CLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as SDMMC1 clock */ -#define __HAL_RCC_GET_SDMMC1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL))) +#if defined(RCC_CCIPR2_SDMMCSEL) +#define __HAL_RCC_GET_SDMMC1_SOURCE() \ + ((READ_BIT(RCC->CCIPR2, RCC_CCIPR2_SDMMCSEL) != RESET) ? RCC_SDMMC1CLKSOURCE_PLLP : (READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL))) +#else +#define __HAL_RCC_GET_SDMMC1_SOURCE() \ + (READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)) +#endif /* RCC_CCIPR2_SDMMCSEL */ #endif /* SDMMC1 */ @@ -1465,16 +1771,10 @@ typedef struct * * @param __RNG_CLKSOURCE__ specifies the RNG clock source. * This parameter can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 - @endif - @if STM32L462xx - * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 - @endif @if STM32L486xx * @arg @ref RCC_RNGCLKSOURCE_NONE No clock selected as RNG clock for devices without HSI48 @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 @endif * @arg @ref RCC_RNGCLKSOURCE_MSI MSI selected as RNG clock @@ -1483,27 +1783,21 @@ typedef struct * @retval None */ #define __HAL_RCC_RNG_CONFIG(__RNG_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__RNG_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (__RNG_CLKSOURCE__)) /** @brief Macro to get the RNG clock. * @retval The clock source can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 - @endif - @if STM32L462xx - * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 - @endif @if STM32L486xx * @arg @ref RCC_RNGCLKSOURCE_NONE No clock selected as RNG clock for devices without HSI48 @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_RNGCLKSOURCE_HSI48 HSI48 selected as RNG clock clock for devices with HSI48 @endif * @arg @ref RCC_RNGCLKSOURCE_MSI MSI selected as RNG clock * @arg @ref RCC_RNGCLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as RNG clock * @arg @ref RCC_RNGCLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as RNG clock */ -#define __HAL_RCC_GET_RNG_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL))) +#define __HAL_RCC_GET_RNG_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)) #if defined(USB_OTG_FS) || defined(USB) @@ -1513,16 +1807,10 @@ typedef struct * * @param __USB_CLKSOURCE__ specifies the USB clock source. * This parameter can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 - @endif - @if STM32L462xx - * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 - @endif @if STM32L486xx * @arg @ref RCC_USBCLKSOURCE_NONE No clock selected as 48MHz clock for devices without HSI48 @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 @endif * @arg @ref RCC_USBCLKSOURCE_MSI MSI selected as USB clock @@ -1531,27 +1819,21 @@ typedef struct * @retval None */ #define __HAL_RCC_USB_CONFIG(__USB_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (uint32_t)(__USB_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, (__USB_CLKSOURCE__)) /** @brief Macro to get the USB clock source. * @retval The clock source can be one of the following values: - @if STM32L443xx - * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 - @endif - @if STM32L462xx - * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 - @endif @if STM32L486xx * @arg @ref RCC_USBCLKSOURCE_NONE No clock selected as 48MHz clock for devices without HSI48 @endif - @if STM32L4A6xx + @if STM32L443xx * @arg @ref RCC_USBCLKSOURCE_HSI48 HSI48 selected as 48MHz clock for devices with HSI48 @endif * @arg @ref RCC_USBCLKSOURCE_MSI MSI selected as USB clock * @arg @ref RCC_USBCLKSOURCE_PLLSAI1 PLLSAI1 "Q" clock (PLL48M2CLK) selected as USB clock * @arg @ref RCC_USBCLKSOURCE_PLL PLL "Q" clock (PLL48M1CLK) selected as USB clock */ -#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL))) +#define __HAL_RCC_GET_USB_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_CLK48SEL)) #endif /* USB_OTG_FS || USB */ @@ -1563,14 +1845,11 @@ typedef struct @if STM32L486xx * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x/STM32L49x/STM32L4Ax devices @endif - @if STM32L4A6xx - * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x/STM32L49x/STM32L4Ax devices - @endif * @arg @ref RCC_ADCCLKSOURCE_SYSCLK System Clock selected as ADC clock * @retval None */ #define __HAL_RCC_ADC_CONFIG(__ADC_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, (uint32_t)(__ADC_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, (__ADC_CLKSOURCE__)) /** @brief Macro to get the ADC clock source. * @retval The clock source can be one of the following values: @@ -1579,12 +1858,9 @@ typedef struct @if STM32L486xx * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x/STM32L49x/STM32L4Ax devices @endif - @if STM32L4A6xx - * @arg @ref RCC_ADCCLKSOURCE_PLLSAI2 PLLSAI2 Clock selected as ADC clock for STM32L47x/STM32L48x/STM32L49x/STM32L4Ax devices - @endif * @arg @ref RCC_ADCCLKSOURCE_SYSCLK System Clock selected as ADC clock */ -#define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_ADCSEL))) +#define __HAL_RCC_GET_ADC_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_ADCSEL)) #if defined(SWPMI1) @@ -1596,14 +1872,14 @@ typedef struct * @retval None */ #define __HAL_RCC_SWPMI1_CONFIG(__SWPMI1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL, (uint32_t)(__SWPMI1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL, (__SWPMI1_CLKSOURCE__)) /** @brief Macro to get the SWPMI1 clock source. * @retval The clock source can be one of the following values: * @arg @ref RCC_SWPMI1CLKSOURCE_PCLK1 PCLK1 Clock selected as SWPMI1 clock * @arg @ref RCC_SWPMI1CLKSOURCE_HSI HSI Clock selected as SWPMI1 clock */ -#define __HAL_RCC_GET_SWPMI1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL))) +#define __HAL_RCC_GET_SWPMI1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_SWPMI1SEL)) #endif /* SWPMI1 */ @@ -1615,18 +1891,119 @@ typedef struct * @arg @ref RCC_DFSDM1CLKSOURCE_SYSCLK System Clock selected as DFSDM1 clock * @retval None */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) #define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1_CLKSOURCE__) \ - MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL, (uint32_t)(__DFSDM1_CLKSOURCE__)) + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_DFSDM1SEL, (__DFSDM1_CLKSOURCE__)) +#else +#define __HAL_RCC_DFSDM1_CONFIG(__DFSDM1_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL, (__DFSDM1_CLKSOURCE__)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** @brief Macro to get the DFSDM1 clock source. * @retval The clock source can be one of the following values: * @arg @ref RCC_DFSDM1CLKSOURCE_PCLK2 PCLK2 Clock selected as DFSDM1 clock * @arg @ref RCC_DFSDM1CLKSOURCE_SYSCLK System Clock selected as DFSDM1 clock */ -#define __HAL_RCC_GET_DFSDM1_SOURCE() ((uint32_t)(READ_BIT(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL))) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define __HAL_RCC_GET_DFSDM1_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_DFSDM1SEL)) +#else +#define __HAL_RCC_GET_DFSDM1_SOURCE() (READ_BIT(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/** @brief Macro to configure the DFSDM1 audio clock. + * @param __DFSDM1AUDIO_CLKSOURCE__ specifies the DFSDM1 audio clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_SAI1 SAI1 clock selected as DFSDM1 audio clock + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_HSI HSI clock selected as DFSDM1 audio clock + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_MSI MSI clock selected as DFSDM1 audio clock + * @retval None + */ +#define __HAL_RCC_DFSDM1AUDIO_CONFIG(__DFSDM1AUDIO_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_ADFSDM1SEL, (__DFSDM1AUDIO_CLKSOURCE__)) + +/** @brief Macro to get the DFSDM1 audio clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_SAI1 SAI1 clock selected as DFSDM1 audio clock + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_HSI HSI clock selected as DFSDM1 audio clock + * @arg @ref RCC_DFSDM1AUDIOCLKSOURCE_MSI MSI clock selected as DFSDM1 audio clock + */ +#define __HAL_RCC_GET_DFSDM1AUDIO_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_ADFSDM1SEL)) + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) + +/** @brief Macro to configure the LTDC clock. + * @param __LTDC_CLKSOURCE__ specifies the DSI clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV2 PLLSAI2 divider R divided by 2 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV4 PLLSAI2 divider R divided by 4 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV8 PLLSAI2 divider R divided by 8 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV16 PLLSAI2 divider R divided by 16 clock selected as LTDC clock + * @retval None + */ +#define __HAL_RCC_LTDC_CONFIG(__LTDC_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_PLLSAI2DIVR, (__LTDC_CLKSOURCE__)) + +/** @brief Macro to get the LTDC clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV2 PLLSAI2 divider R divided by 2 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV4 PLLSAI2 divider R divided by 4 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV8 PLLSAI2 divider R divided by 8 clock selected as LTDC clock + * @arg @ref RCC_LTDCCLKSOURCE_PLLSAI2_DIV16 PLLSAI2 divider R divided by 16 clock selected as LTDC clock + */ +#define __HAL_RCC_GET_LTDC_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_PLLSAI2DIVR)) + +#endif /* LTDC */ + +#if defined(DSI) + +/** @brief Macro to configure the DSI clock. + * @param __DSI_CLKSOURCE__ specifies the DSI clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_DSICLKSOURCE_DSIPHY DSI-PHY clock selected as DSI clock + * @arg @ref RCC_DSICLKSOURCE_PLLSAI2 PLLSAI2 R divider clock selected as DSI clock + * @retval None + */ +#define __HAL_RCC_DSI_CONFIG(__DSI_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_DSISEL, (__DSI_CLKSOURCE__)) + +/** @brief Macro to get the DSI clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_DSICLKSOURCE_DSIPHY DSI-PHY clock selected as DSI clock + * @arg @ref RCC_DSICLKSOURCE_PLLSAI2 PLLSAI2 R divider clock selected as DSI clock + */ +#define __HAL_RCC_GET_DSI_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_DSISEL)) + +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) + +/** @brief Macro to configure the OctoSPI clock. + * @param __OSPI_CLKSOURCE__ specifies the OctoSPI clock source. + * This parameter can be one of the following values: + * @arg @ref RCC_OSPICLKSOURCE_SYSCLK System Clock selected as OctoSPI clock + * @arg @ref RCC_OSPICLKSOURCE_MSI MSI clock selected as OctoSPI clock + * @arg @ref RCC_OSPICLKSOURCE_PLL PLL Q divider clock selected as OctoSPI clock + * @retval None + */ +#define __HAL_RCC_OSPI_CONFIG(__OSPI_CLKSOURCE__) \ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_OSPISEL, (__OSPI_CLKSOURCE__)) + +/** @brief Macro to get the OctoSPI clock source. + * @retval The clock source can be one of the following values: + * @arg @ref RCC_OSPICLKSOURCE_SYSCLK System Clock selected as OctoSPI clock + * @arg @ref RCC_OSPICLKSOURCE_MSI MSI clock selected as OctoSPI clock + * @arg @ref RCC_OSPICLKSOURCE_PLL PLL Q divider clock selected as OctoSPI clock + */ +#define __HAL_RCC_GET_OSPI_SOURCE() (READ_BIT(RCC->CCIPR2, RCC_CCIPR2_OSPISEL)) + +#endif /* OCTOSPI1 || OCTOSPI2 */ + /** @defgroup RCCEx_Flags_Interrupts_Management Flags Interrupts Management * @brief macros to manage the specified RCC Flags and interrupts. * @{ @@ -1746,8 +2123,8 @@ typedef struct do { \ __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE(); \ __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE(); \ - } while(0) - + } while(0) + /** * @brief Disable the RCC LSE CSS Extended Interrupt Rising & Falling Trigger. * @retval None. @@ -1756,7 +2133,7 @@ typedef struct do { \ __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE(); \ __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE(); \ - } while(0) + } while(0) /** * @brief Check whether the specified RCC LSE CSS EXTI interrupt flag is set or not. @@ -1826,7 +2203,7 @@ typedef struct * @arg @ref RCC_CRS_IT_SYNCMISS SYNC missed interrupt */ /* CRS IT Error Mask */ -#define RCC_CRS_IT_ERROR_MASK ((uint32_t)(RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS)) +#define RCC_CRS_IT_ERROR_MASK (RCC_CRS_IT_TRIMOVF | RCC_CRS_IT_SYNCERR | RCC_CRS_IT_SYNCMISS) #define __HAL_RCC_CRS_CLEAR_IT(__INTERRUPT__) do { \ if(((__INTERRUPT__) & RCC_CRS_IT_ERROR_MASK) != RESET) \ @@ -1870,7 +2247,7 @@ typedef struct */ /* CRS Flag Error Mask */ -#define RCC_CRS_FLAG_ERROR_MASK ((uint32_t)(RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS)) +#define RCC_CRS_FLAG_ERROR_MASK (RCC_CRS_FLAG_TRIMOVF | RCC_CRS_FLAG_SYNCERR | RCC_CRS_FLAG_SYNCMISS) #define __HAL_RCC_CRS_CLEAR_FLAG(__FLAG__) do { \ if(((__FLAG__) & RCC_CRS_FLAG_ERROR_MASK) != RESET) \ @@ -1893,7 +2270,7 @@ typedef struct /** @defgroup RCCEx_CRS_Extended_Features RCCEx CRS Extended Features * @{ - */ + */ /** * @brief Enable the oscillator clock for frequency error counter. * @note when the CEN bit is set the CRS_CFGR register becomes write-protected. @@ -1922,8 +2299,8 @@ typedef struct /** * @brief Macro to calculate reload value to be set in CRS register according to target and sync frequencies - * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency - * of the synchronization source after prescaling. It is then decreased by one in order to + * @note The RELOAD value should be selected according to the ratio between the target frequency and the frequency + * of the synchronization source after prescaling. It is then decreased by one in order to * reach the expected synchronization on the zero value. The formula is the following: * RELOAD = (fTARGET / fSYNC) -1 * @param __FTARGET__ Target frequency (value in Hz) @@ -2170,6 +2547,87 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \ (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1)) +#elif defined(STM32L4R5xx) || defined(STM32L4S5xx) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1AUDIO) == RCC_PERIPHCLK_DFSDM1AUDIO) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI)) + +#elif defined(STM32L4R7xx) || defined(STM32L4S7xx) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1AUDIO) == RCC_PERIPHCLK_DFSDM1AUDIO) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC)) + +#elif defined(STM32L4R9xx) || defined(STM32L4S9xx) + +#define IS_RCC_PERIPHCLOCK(__SELECTION__) \ + ((((__SELECTION__) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART2) == RCC_PERIPHCLK_USART2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USART3) == RCC_PERIPHCLK_USART3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART4) == RCC_PERIPHCLK_UART4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_UART5) == RCC_PERIPHCLK_UART5) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C2) == RCC_PERIPHCLK_I2C2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3) || \ + (((__SELECTION__) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SAI2) == RCC_PERIPHCLK_SAI2) || \ + (((__SELECTION__) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) || \ + (((__SELECTION__) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DFSDM1AUDIO) == RCC_PERIPHCLK_DFSDM1AUDIO) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG) || \ + (((__SELECTION__) & RCC_PERIPHCLK_SDMMC1) == RCC_PERIPHCLK_SDMMC1) || \ + (((__SELECTION__) & RCC_PERIPHCLK_OSPI) == RCC_PERIPHCLK_OSPI) || \ + (((__SELECTION__) & RCC_PERIPHCLK_LTDC) == RCC_PERIPHCLK_LTDC) || \ + (((__SELECTION__) & RCC_PERIPHCLK_DSI) == RCC_PERIPHCLK_DSI)) + #else #define IS_RCC_PERIPHCLOCK(__SELECTION__) \ @@ -2262,7 +2720,7 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); (((__SOURCE__) == RCC_I2C3CLKSOURCE_PCLK1) || \ ((__SOURCE__) == RCC_I2C3CLKSOURCE_SYSCLK)|| \ ((__SOURCE__) == RCC_I2C3CLKSOURCE_HSI)) - + #if defined(I2C4) #define IS_RCC_I2C4CLKSOURCE(__SOURCE__) \ @@ -2274,11 +2732,20 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); #if defined(RCC_PLLSAI2_SUPPORT) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_RCC_SAI1CLK(__SOURCE__) \ + (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI1) || \ + ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI2) || \ + ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL) || \ + ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN) || \ + ((__SOURCE__) == RCC_SAI1CLKSOURCE_HSI)) +#else #define IS_RCC_SAI1CLK(__SOURCE__) \ (((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI1) || \ ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLLSAI2) || \ ((__SOURCE__) == RCC_SAI1CLKSOURCE_PLL) || \ ((__SOURCE__) == RCC_SAI1CLKSOURCE_PIN)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #else @@ -2291,35 +2758,52 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); #if defined(RCC_PLLSAI2_SUPPORT) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_RCC_SAI2CLK(__SOURCE__) \ + (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI1) || \ + ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI2) || \ + ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL) || \ + ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN) || \ + ((__SOURCE__) == RCC_SAI2CLKSOURCE_HSI)) +#else #define IS_RCC_SAI2CLK(__SOURCE__) \ (((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI1) || \ ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLLSAI2) || \ ((__SOURCE__) == RCC_SAI2CLKSOURCE_PLL) || \ ((__SOURCE__) == RCC_SAI2CLKSOURCE_PIN)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* RCC_PLLSAI2_SUPPORT */ #define IS_RCC_LPTIM1CLK(__SOURCE__) \ (((__SOURCE__) == RCC_LPTIM1CLKSOURCE_PCLK1) || \ - ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSI) || \ - ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_HSI) || \ ((__SOURCE__) == RCC_LPTIM1CLKSOURCE_LSE)) #define IS_RCC_LPTIM2CLK(__SOURCE__) \ (((__SOURCE__) == RCC_LPTIM2CLKSOURCE_PCLK1) || \ - ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSI) || \ - ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSI) || \ + ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_HSI) || \ ((__SOURCE__) == RCC_LPTIM2CLKSOURCE_LSE)) #if defined(SDMMC1) -#if defined(RCC_HSI48_SUPPORT) +#if defined(RCC_HSI48_SUPPORT) && defined(RCC_CCIPR2_SDMMCSEL) + +#define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \ + (((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLLP) || \ + ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_HSI48) || \ + ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLLSAI1) || \ + ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL) || \ + ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_MSI)) + +#elif defined(RCC_HSI48_SUPPORT) #define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \ (((__SOURCE__) == RCC_SDMMC1CLKSOURCE_HSI48) || \ ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLLSAI1) || \ ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_PLL) || \ ((__SOURCE__) == RCC_SDMMC1CLKSOURCE_MSI)) - #else #define IS_RCC_SDMMC1CLKSOURCE(__SOURCE__) \ @@ -2400,11 +2884,51 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); (((__SOURCE__) == RCC_DFSDM1CLKSOURCE_PCLK2) || \ ((__SOURCE__) == RCC_DFSDM1CLKSOURCE_SYSCLK)) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +#define IS_RCC_DFSDM1AUDIOCLKSOURCE(__SOURCE__) \ + (((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_SAI1) || \ + ((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_HSI) || \ + ((__SOURCE__) == RCC_DFSDM1AUDIOCLKSOURCE_MSI)) + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #endif /* DFSDM1_Filter0 */ +#if defined(LTDC) + +#define IS_RCC_LTDCCLKSOURCE(__SOURCE__) \ + (((__SOURCE__) == RCC_LTDCCLKSOURCE_PLLSAI2_DIV2) || \ + ((__SOURCE__) == RCC_LTDCCLKSOURCE_PLLSAI2_DIV4) || \ + ((__SOURCE__) == RCC_LTDCCLKSOURCE_PLLSAI2_DIV8) || \ + ((__SOURCE__) == RCC_LTDCCLKSOURCE_PLLSAI2_DIV16)) + +#endif /* LTDC */ + +#if defined(DSI) + +#define IS_RCC_DSICLKSOURCE(__SOURCE__) \ + (((__SOURCE__) == RCC_DSICLKSOURCE_DSIPHY) || \ + ((__SOURCE__) == RCC_DSICLKSOURCE_PLLSAI2)) + +#endif /* DSI */ + +#if defined(OCTOSPI1) || defined(OCTOSPI2) + +#define IS_RCC_OSPICLKSOURCE(__SOURCE__) \ + (((__SOURCE__) == RCC_OSPICLKSOURCE_SYSCLK) || \ + ((__SOURCE__) == RCC_OSPICLKSOURCE_MSI) || \ + ((__SOURCE__) == RCC_OSPICLKSOURCE_PLL)) + +#endif /* OCTOSPI1 || OCTOSPI2 */ + #define IS_RCC_PLLSAI1SOURCE(__VALUE__) IS_RCC_PLLSOURCE(__VALUE__) +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +#define IS_RCC_PLLSAI1M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 16U)) +#else #define IS_RCC_PLLSAI1M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 8U)) +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ #define IS_RCC_PLLSAI1N_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U)) @@ -2424,7 +2948,11 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); #define IS_RCC_PLLSAI2SOURCE(__VALUE__) IS_RCC_PLLSOURCE(__VALUE__) +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) +#define IS_RCC_PLLSAI2M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 16U)) +#else #define IS_RCC_PLLSAI2M_VALUE(__VALUE__) ((1U <= (__VALUE__)) && ((__VALUE__) <= 8U)) +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ #define IS_RCC_PLLSAI2N_VALUE(__VALUE__) ((8U <= (__VALUE__)) && ((__VALUE__) <= 86U)) @@ -2434,6 +2962,11 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); #define IS_RCC_PLLSAI2P_VALUE(__VALUE__) (((__VALUE__) == 7U) || ((__VALUE__) == 17U)) #endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) +#define IS_RCC_PLLSAI2Q_VALUE(__VALUE__) (((__VALUE__) == 2U) || ((__VALUE__) == 4U) || \ + ((__VALUE__) == 6U) || ((__VALUE__) == 8U)) +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ + #define IS_RCC_PLLSAI2R_VALUE(__VALUE__) (((__VALUE__) == 2U) || ((__VALUE__) == 4U) || \ ((__VALUE__) == 6U) || ((__VALUE__) == 8U)) @@ -2452,7 +2985,7 @@ void HAL_RCCEx_CRS_ErrorCallback(uint32_t Error); #define IS_RCC_CRS_SYNC_POLARITY(__POLARITY__) (((__POLARITY__) == RCC_CRS_SYNC_POLARITY_RISING) || \ ((__POLARITY__) == RCC_CRS_SYNC_POLARITY_FALLING)) - + #define IS_RCC_CRS_RELOADVALUE(__VALUE__) (((__VALUE__) <= 0xFFFFU)) #define IS_RCC_CRS_ERRORLIMIT(__VALUE__) (((__VALUE__) <= 0xFFU)) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.c index 9d94bf1480..469c6af21d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rng.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RNG HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Random Number Generator (RNG) peripheral: @@ -122,11 +120,12 @@ HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng) { return HAL_ERROR; } - - assert_param(IS_RNG_ALL_INSTANCE(hrng->Instance)); - - __HAL_LOCK(hrng); - + + assert_param(IS_RNG_ALL_INSTANCE(hrng->Instance)); +#if defined(RNG_CR_CED) + assert_param(IS_RNG_CED(hrng->Init.ClockErrorDetection)); +#endif /* defined(RNG_CR_CED) */ + if(hrng->State == HAL_RNG_STATE_RESET) { /* Allocate lock resource and initialize it */ @@ -135,18 +134,21 @@ HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng) /* Init the low level hardware */ HAL_RNG_MspInit(hrng); } - + /* Change RNG peripheral state */ hrng->State = HAL_RNG_STATE_BUSY; +#if defined(RNG_CR_CED) + /* Clock Error Detection configuration */ + MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection); +#endif /* defined(RNG_CR_CED) */ + /* Enable the RNG Peripheral */ __HAL_RNG_ENABLE(hrng); /* Initialize the RNG state */ hrng->State = HAL_RNG_STATE_READY; - __HAL_UNLOCK(hrng); - /* Return function status */ return HAL_OK; } @@ -163,21 +165,27 @@ HAL_StatusTypeDef HAL_RNG_DeInit(RNG_HandleTypeDef *hrng) { return HAL_ERROR; } + +#if defined(RNG_CR_CED) + /* Clear Clock Error Detection bit */ + CLEAR_BIT(hrng->Instance->CR, RNG_CR_CED); +#endif /* defined(RNG_CR_CED) */ + /* Disable the RNG Peripheral */ CLEAR_BIT(hrng->Instance->CR, RNG_CR_IE | RNG_CR_RNGEN); - + /* Clear RNG interrupt status flags */ CLEAR_BIT(hrng->Instance->SR, RNG_SR_CEIS | RNG_SR_SEIS); - + /* DeInit the low level hardware */ HAL_RNG_MspDeInit(hrng); - + /* Update the RNG state */ hrng->State = HAL_RNG_STATE_RESET; /* Release Lock */ __HAL_UNLOCK(hrng); - + /* Return the function status */ return HAL_OK; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.h index 53fcd334e0..4eedd1bb24 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rng.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rng.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RNG HAL module. ****************************************************************************** * @attention @@ -59,6 +57,16 @@ * @{ */ +#if defined(RNG_CR_CED) +/** + * @brief RNG Configuration Structure definition + */ +typedef struct +{ + uint32_t ClockErrorDetection; /*!< Clock error detection */ +}RNG_InitTypeDef; +#endif /* defined(RNG_CR_CED) */ + /** * @brief RNG HAL State Structure definition */ @@ -69,7 +77,7 @@ typedef enum HAL_RNG_STATE_BUSY = 0x02, /*!< RNG internal process is ongoing */ HAL_RNG_STATE_TIMEOUT = 0x03, /*!< RNG timeout state */ HAL_RNG_STATE_ERROR = 0x04 /*!< RNG error state */ - + }HAL_RNG_StateTypeDef; /** @@ -77,14 +85,18 @@ typedef enum */ typedef struct { - RNG_TypeDef *Instance; /*!< Register base address */ - - HAL_LockTypeDef Lock; /*!< RNG locking object */ - - __IO HAL_RNG_StateTypeDef State; /*!< RNG communication state */ - + RNG_TypeDef *Instance; /*!< Register base address */ + +#if defined(RNG_CR_CED) + RNG_InitTypeDef Init; /*!< RNG configuration parameters */ +#endif /* defined(RNG_CR_CED) */ + + HAL_LockTypeDef Lock; /*!< RNG locking object */ + + __IO HAL_RNG_StateTypeDef State; /*!< RNG communication state */ + uint32_t RandomNumber; /*!< Last Generated RNG Data */ - + }RNG_HandleTypeDef; /** @@ -116,6 +128,17 @@ typedef struct * @} */ +#if defined(RNG_CR_CED) +/** @defgroup RNG_Clock_Error_Detection RNG Clock Error Detection + * @{ + */ +#define RNG_CED_ENABLE ((uint32_t)0x00000000) /*!< Clock error detection enabled */ +#define RNG_CED_DISABLE RNG_CR_CED /*!< Clock error detection disabled */ +/** + * @} + */ +#endif /* defined(RNG_CR_CED) */ + /** * @} */ @@ -176,7 +199,7 @@ typedef struct * @retval None */ #define __HAL_RNG_ENABLE_IT(__HANDLE__) ((__HANDLE__)->Instance->CR |= RNG_CR_IE) - + /** * @brief Disable the RNG interrupt. * @param __HANDLE__: RNG Handle @@ -266,6 +289,23 @@ HAL_RNG_StateTypeDef HAL_RNG_GetState(RNG_HandleTypeDef *hrng); /* Private variables ---------------------------------------------------------*/ /* Private constants ---------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/ +/** @addtogroup RNG_Private_Macros RNG Private Macros + * @{ + */ + +#if defined(RNG_CR_CED) +/** + * @brief Verify the RNG Clock Error Detection mode. + * @param __MODE__: RNG Clock Error Detection mode + * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) + */ +#define IS_RNG_CED(__MODE__) (((__MODE__) == RNG_CED_ENABLE) || \ + ((__MODE__) == RNG_CED_DISABLE)) +#endif /* defined(RNG_CR_CED) */ + +/** + * @} + */ /* Private functions prototypes ----------------------------------------------*/ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.c index 636adf2692..73ffaf2f11 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rtc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RTC HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Real-Time Clock (RTC) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.h index be41b872af..ed269a98ca 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rtc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RTC HAL module. ****************************************************************************** * @attention @@ -268,8 +266,8 @@ typedef struct /** @defgroup RTC_Input_parameter_format_definitions RTC Input Parameter Format Definitions * @{ */ -#define RTC_FORMAT_BIN ((uint32_t)0x000000000) -#define RTC_FORMAT_BCD ((uint32_t)0x000000001) +#define RTC_FORMAT_BIN ((uint32_t)0x00000000) +#define RTC_FORMAT_BCD ((uint32_t)0x00000001) /** * @} */ @@ -718,10 +716,10 @@ HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); * @{ */ /* Masks Definition */ -#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F) -#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F) -#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFFU) -#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5FU) +#define RTC_TR_RESERVED_MASK 0x007F7F7FU +#define RTC_DR_RESERVED_MASK 0x00FFFF3FU +#define RTC_INIT_MASK 0xFFFFFFFFU +#define RTC_RSF_MASK 0xFFFFFF5FU #define RTC_TIMEOUT_VALUE 1000 diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.c index 0f334cd37c..31a6fe7de1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rtc_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended RTC HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Real Time Clock (RTC) Extended peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.h index df4c98ce7c..102703f1e9 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_rtc_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_rtc_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RTC HAL Extended module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.c index 160fd53c8c..02f941c970 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sai.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SAI HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Serial Audio Interface (SAI) peripheral: @@ -73,6 +71,11 @@ (+@) Number of SLOT x SLOT size = Frame length (+@) The number of slots should be even when SAI_FS_CHANNEL_IDENTIFICATION is selected. + [..] + (@) For STM32L4Rx/STM32L4Sx devices, PDM interface can be activated through HAL_SAI_Init function. + Please note that PDM interface is only available for SAI1 sub-block A. + PDM microphone delays can be tuned with HAL_SAIEx_ConfigPdmMicDelay function. + [..] Three operation modes are available within this driver : @@ -200,7 +203,6 @@ typedef enum { #define SAI_FIFO_SIZE 8 #define SAI_DEFAULT_TIMEOUT 4 #define SAI_LONG_TIMEOUT 1000 -#define SAI_xCR2_MUTECNT_OFFSET POSITION_VAL(SAI_xCR2_MUTECNT) /** * @} @@ -265,6 +267,7 @@ static void SAI_DMAAbort(DMA_HandleTypeDef *hdma); (++) FIFO Threshold (++) Frame Config (++) Slot Config + (++) PDM Config (only for STM32L4Rx/STM32L4Sx devices) (+) Call the function HAL_SAI_DeInit() to restore the default configuration of the selected SAI peripheral. @@ -277,12 +280,12 @@ static void SAI_DMAAbort(DMA_HandleTypeDef *hdma); * @brief Initialize the structure FrameInit, SlotInit and the low part of * Init according to the specified parameters and call the function * HAL_SAI_Init to initialize the SAI block. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param protocol: one of the supported protocol @ref SAI_Protocol - * @param datasize: one of the supported datasize @ref SAI_Protocol_DataSize + * @param protocol one of the supported protocol @ref SAI_Protocol + * @param datasize one of the supported datasize @ref SAI_Protocol_DataSize * the configuration information for SAI module. - * @param nbslot: Number of slot. + * @param nbslot Number of slot. * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot) @@ -320,7 +323,7 @@ HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protoco /** * @brief Initialize the SAI according to the specified parameters. * in the SAI_InitTypeDef structure and initialize the associated handle. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -354,6 +357,9 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) assert_param(IS_SAI_BLOCK_COMPANDING_MODE(hsai->Init.CompandingMode)); assert_param(IS_SAI_BLOCK_TRISTATE_MANAGEMENT(hsai->Init.TriState)); assert_param(IS_SAI_BLOCK_SYNCEXT(hsai->Init.SynchroExt)); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + assert_param(IS_SAI_BLOCK_MCK_OVERSAMPLING(hsai->Init.MckOverSampling)); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Check the SAI Block Frame parameters */ assert_param(IS_SAI_BLOCK_FRAME_LENGTH(hsai->FrameInit.FrameLength)); @@ -368,6 +374,23 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) assert_param(IS_SAI_BLOCK_SLOT_NUMBER(hsai->SlotInit.SlotNumber)); assert_param(IS_SAI_SLOT_ACTIVE(hsai->SlotInit.SlotActive)); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Check the SAI PDM parameters */ + assert_param(IS_FUNCTIONAL_STATE(hsai->Init.PdmInit.Activation)); + if(hsai->Init.PdmInit.Activation == ENABLE) + { + assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(hsai->Init.PdmInit.MicPairsNbr)); + assert_param(IS_SAI_PDM_CLOCK_ENABLE(hsai->Init.PdmInit.ClockEnable)); + /* Check that SAI sub-block is SAI1 sub-block A, in master RX mode with free protocol */ + if((hsai->Instance != SAI1_Block_A) || + (hsai->Init.AudioMode != SAI_MODEMASTER_RX) || + (hsai->Init.Protocol != SAI_FREE_PROTOCOL)) + { + return HAL_ERROR; + } + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + if(hsai->State == HAL_SAI_STATE_RESET) { /* Allocate lock resource and initialize it */ @@ -423,7 +446,8 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) } #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) if((hsai->Instance == SAI1_Block_A) || (hsai->Instance == SAI1_Block_B)) { @@ -439,7 +463,8 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) SAI1->GCR = tmpregisterGCR; #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ if(hsai->Init.AudioFrequency != SAI_AUDIO_FREQUENCY_MCKDIV) { @@ -448,7 +473,8 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) /* In this case, the MCKDIV value is calculated to get AudioFrequency */ #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) if((hsai->Instance == SAI1_Block_A ) || (hsai->Instance == SAI1_Block_B )) { @@ -464,8 +490,35 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SAI1); #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Configure Master Clock Divider using the following formula : + - If NOMCK = 1 : + MCKDIV[5:0] = SAI_CK_x / (FS * (FRL + 1)) + - If NOMCK = 0 : + MCKDIV[5:0] = SAI_CK_x / (FS * (OSR + 1) * 256) */ + if(hsai->Init.NoDivider == SAI_MASTERDIVIDER_DISABLE) + { /* NOMCK = 1 */ + /* (freq x 10) to keep Significant digits */ + tmpval = (freq * 10) / (hsai->Init.AudioFrequency * hsai->FrameInit.FrameLength); + } + else + { /* NOMCK = 0 */ + uint32_t tmposr; + tmposr = (hsai->Init.MckOverSampling == SAI_MCK_OVERSAMPLING_ENABLE) ? 2 : 1; + /* (freq x 10) to keep Significant digits */ + tmpval = (freq * 10) / (hsai->Init.AudioFrequency * tmposr * 256); + } + hsai->Init.Mckdiv = tmpval / 10; + + /* Round result to the nearest integer */ + if((tmpval % 10) > 8) + { + hsai->Init.Mckdiv+= 1; + } +#else /* Configure Master Clock using the following formula : MCLK_x = SAI_CK_x / (MCKDIV[3:0] * 2) with MCLK_x = 256 * FS FS = SAI_CK_x / (MCKDIV[3:0] * 2) * 256 @@ -479,6 +532,7 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) { hsai->Init.Mckdiv+= 1; } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ } /* Compute CKSTR bits of SAI CR1 according ClockStrobing and AudioMode */ @@ -493,6 +547,19 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) /* SAI Block Configuration -------------------------------------------------*/ /* SAI CR1 Configuration */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + hsai->Instance->CR1&=~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ + SAI_xCR1_LSBFIRST | SAI_xCR1_CKSTR | SAI_xCR1_SYNCEN |\ + SAI_xCR1_MONO | SAI_xCR1_OUTDRIV | SAI_xCR1_DMAEN | \ + SAI_xCR1_NOMCK | SAI_xCR1_MCKDIV | SAI_xCR1_OSR); + + hsai->Instance->CR1|=(hsai->Init.AudioMode | hsai->Init.Protocol | \ + hsai->Init.DataSize | hsai->Init.FirstBit | \ + ckstr_bits | syncen_bits | \ + hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ + hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20) | \ + hsai->Init.MckOverSampling); +#else hsai->Instance->CR1&=~(SAI_xCR1_MODE | SAI_xCR1_PRTCFG | SAI_xCR1_DS | \ SAI_xCR1_LSBFIRST | SAI_xCR1_CKSTR | SAI_xCR1_SYNCEN |\ SAI_xCR1_MONO | SAI_xCR1_OUTDRIV | SAI_xCR1_DMAEN | \ @@ -503,6 +570,7 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) ckstr_bits | syncen_bits | \ hsai->Init.MonoStereoMode | hsai->Init.OutputDrive | \ hsai->Init.NoDivider | (hsai->Init.Mckdiv << 20)); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* SAI CR2 Configuration */ hsai->Instance->CR2&= ~(SAI_xCR2_FTH | SAI_xCR2_FFLUSH | SAI_xCR2_COMP | SAI_xCR2_CPL); @@ -525,6 +593,22 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) hsai->Instance->SLOTR|= hsai->SlotInit.FirstBitOffset | hsai->SlotInit.SlotSize | (hsai->SlotInit.SlotActive << 16) | ((hsai->SlotInit.SlotNumber - 1) << 8); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* SAI PDM Configuration ---------------------------------------------------*/ + if(hsai->Instance == SAI1_Block_A) + { + /* Disable PDM interface */ + SAI1->PDMCR &= ~(SAI_PDMCR_PDMEN); + if(hsai->Init.PdmInit.Activation == ENABLE) + { + /* Configure and enable PDM interface */ + SAI1->PDMCR = (hsai->Init.PdmInit.ClockEnable | + ((hsai->Init.PdmInit.MicPairsNbr - 1) << SAI_PDMCR_MICNBR_Pos)); + SAI1->PDMCR |= SAI_PDMCR_PDMEN; + } + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Initialize the error code */ hsai->ErrorCode = HAL_SAI_ERROR_NONE; @@ -539,7 +623,7 @@ HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai) /** * @brief DeInitialize the SAI peripheral. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -563,6 +647,18 @@ HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) /* Flush the fifo */ SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Disable SAI PDM interface */ + if(hsai->Instance == SAI1_Block_A) + { + /* Reset PDM delays */ + SAI1->PDMDLY = 0U; + + /* Disable PDM interface */ + SAI1->PDMCR &= ~(SAI_PDMCR_PDMEN); + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */ HAL_SAI_MspDeInit(hsai); @@ -580,7 +676,7 @@ HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai) /** * @brief Initialize the SAI MSP. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -596,7 +692,7 @@ __weak void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai) /** * @brief DeInitialize the SAI MSP. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -638,17 +734,14 @@ __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) (+) Blocking mode functions are : (++) HAL_SAI_Transmit() (++) HAL_SAI_Receive() - (++) HAL_SAI_TransmitReceive() (+) Non Blocking mode functions with Interrupt are : (++) HAL_SAI_Transmit_IT() (++) HAL_SAI_Receive_IT() - (++) HAL_SAI_TransmitReceive_IT() (+) Non Blocking mode functions with DMA are : (++) HAL_SAI_Transmit_DMA() (++) HAL_SAI_Receive_DMA() - (++) HAL_SAI_TransmitReceive_DMA() (+) A set of Transfer Complete Callbacks are provided in non Blocking mode: (++) HAL_SAI_TxCpltCallback() @@ -661,11 +754,11 @@ __weak void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai) /** * @brief Transmit an amount of data in blocking mode. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be sent - * @param Timeout: Timeout duration + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t* pData, uint16_t Size, uint32_t Timeout) @@ -761,11 +854,11 @@ HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t* pData, uint /** * @brief Receive an amount of data in blocking mode. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be received - * @param Timeout: Timeout duration + * @param pData Pointer to data buffer + * @param Size Amount of data to be received + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout) @@ -859,10 +952,10 @@ HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint1 /** * @brief Transmit an amount of data in non-blocking mode with Interrupt. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be sent + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) @@ -921,10 +1014,10 @@ HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, u /** * @brief Receive an amount of data in non-blocking mode with Interrupt. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be received + * @param pData Pointer to data buffer + * @param Size Amount of data to be received * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) @@ -981,7 +1074,7 @@ HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, ui /** * @brief Pause the audio stream playing from the Media. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1001,7 +1094,7 @@ HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai) /** * @brief Resume the audio stream playing from the Media. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1028,7 +1121,7 @@ HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai) /** * @brief Stop the audio stream playing from the Media. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1060,6 +1153,9 @@ HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) /* Disable SAI peripheral */ SAI_Disable(hsai); + /* Flush the fifo */ + SET_BIT(hsai->Instance->CR2, SAI_xCR2_FFLUSH); + hsai->State = HAL_SAI_STATE_READY; /* Process Unlocked */ @@ -1070,7 +1166,7 @@ HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai) /** * @brief Abort the current transfer and disable the SAI. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1123,10 +1219,10 @@ HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai) /** * @brief Transmit an amount of data in non-blocking mode with DMA. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be sent + * @param pData Pointer to data buffer + * @param Size Amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) @@ -1210,10 +1306,10 @@ HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, /** * @brief Receive an amount of data in non-blocking mode with DMA. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param pData: Pointer to data buffer - * @param Size: Amount of data to be received + * @param pData Pointer to data buffer + * @param Size Amount of data to be received * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size) @@ -1280,9 +1376,9 @@ HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, u /** * @brief Enable the Tx mute mode. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param val: value sent during the mute @ref SAI_Block_Mute_Value + * @param val value sent during the mute @ref SAI_Block_Mute_Value * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val) @@ -1300,7 +1396,7 @@ HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val /** * @brief Disable the Tx mute mode. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1316,10 +1412,10 @@ HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai) /** * @brief Enable the Rx mute detection. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param callback: function called when the mute is detected. - * @param counter: number a data before mute detection max 63. + * @param callback function called when the mute is detected. + * @param counter number a data before mute detection max 63. * @retval HAL status */ HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t counter) @@ -1330,7 +1426,7 @@ HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback { /* set the mute counter */ CLEAR_BIT(hsai->Instance->CR2, SAI_xCR2_MUTECNT); - SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_OFFSET)); + SET_BIT(hsai->Instance->CR2, (uint32_t)((uint32_t)counter << SAI_xCR2_MUTECNT_Pos)); hsai->mutecallback = callback; /* enable the IT interrupt */ __HAL_SAI_ENABLE_IT(hsai, SAI_IT_MUTEDET); @@ -1341,7 +1437,7 @@ HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback /** * @brief Disable the Rx mute detection. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL status */ @@ -1360,7 +1456,7 @@ HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai) /** * @brief Handle SAI interrupt request. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1536,7 +1632,7 @@ void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai) /** * @brief Tx Transfer completed callback. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1552,7 +1648,7 @@ __weak void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai) /** * @brief Tx Transfer Half completed callback. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1568,7 +1664,7 @@ __weak void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai) /** * @brief Rx Transfer completed callback. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1584,7 +1680,7 @@ __weak void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) /** * @brief Rx Transfer half completed callback. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1600,7 +1696,7 @@ __weak void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) /** * @brief SAI error callback. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1636,7 +1732,7 @@ __weak void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai) /** * @brief Return the SAI handle state. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval HAL state */ @@ -1647,7 +1743,7 @@ HAL_SAI_StateTypeDef HAL_SAI_GetState(SAI_HandleTypeDef *hsai) /** * @brief Return the SAI error code. -* @param hsai: pointer to a SAI_HandleTypeDef structure that contains +* @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for the specified SAI Block. * @retval SAI Error Code */ @@ -1671,12 +1767,12 @@ uint32_t HAL_SAI_GetError(SAI_HandleTypeDef *hsai) /** * @brief Initialize the SAI I2S protocol according to the specified parameters * in the SAI_InitTypeDef and create the associated handle. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param protocol: one of the supported protocol. - * @param datasize: one of the supported datasize @ref SAI_Protocol_DataSize + * @param protocol one of the supported protocol. + * @param datasize one of the supported datasize @ref SAI_Protocol_DataSize * the configuration information for SAI module. - * @param nbslot: number of slot minimum value is 2 and max is 16. + * @param nbslot number of slot minimum value is 2 and max is 16. * the value must be a multiple of 2. * @retval HAL status */ @@ -1766,11 +1862,11 @@ static HAL_StatusTypeDef SAI_InitI2S(SAI_HandleTypeDef *hsai, uint32_t protocol, /** * @brief Initialize the SAI PCM protocol according to the specified parameters * in the SAI_InitTypeDef and create the associated handle. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param protocol: one of the supported protocol - * @param datasize: one of the supported datasize @ref SAI_Protocol_DataSize - * @param nbslot: number of slot minimum value is 1 and the max is 16. + * @param protocol one of the supported protocol + * @param datasize one of the supported datasize @ref SAI_Protocol_DataSize + * @param nbslot number of slot minimum value is 1 and the max is 16. * @retval HAL status */ static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot) @@ -1836,7 +1932,7 @@ static HAL_StatusTypeDef SAI_InitPCM(SAI_HandleTypeDef *hsai, uint32_t protocol, /** * @brief Fill the fifo. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1865,9 +1961,9 @@ static void SAI_FillFifo(SAI_HandleTypeDef *hsai) /** * @brief Return the interrupt flag to set according the SAI setup. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. - * @param mode: SAI_MODE_DMA or SAI_MODE_IT + * @param mode SAI_MODE_DMA or SAI_MODE_IT * @retval the list of the IT flag to enable */ static uint32_t SAI_InterruptFlag(SAI_HandleTypeDef *hsai, uint32_t mode) @@ -1899,7 +1995,7 @@ static uint32_t SAI_InterruptFlag(SAI_HandleTypeDef *hsai, uint32_t mode) /** * @brief Disable the SAI and wait for the disabling. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1925,7 +2021,7 @@ static HAL_StatusTypeDef SAI_Disable(SAI_HandleTypeDef *hsai) /** * @brief Tx Handler for Transmit in Interrupt mode 8-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1949,7 +2045,7 @@ static void SAI_Transmit_IT8Bit(SAI_HandleTypeDef *hsai) /** * @brief Tx Handler for Transmit in Interrupt mode for 16-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1974,7 +2070,7 @@ static void SAI_Transmit_IT16Bit(SAI_HandleTypeDef *hsai) /** * @brief Tx Handler for Transmit in Interrupt mode for 32-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -1999,7 +2095,7 @@ static void SAI_Transmit_IT32Bit(SAI_HandleTypeDef *hsai) /** * @brief Rx Handler for Receive in Interrupt mode 8-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -2025,7 +2121,7 @@ static void SAI_Receive_IT8Bit(SAI_HandleTypeDef *hsai) /** * @brief Rx Handler for Receive in Interrupt mode for 16-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -2051,7 +2147,7 @@ static void SAI_Receive_IT16Bit(SAI_HandleTypeDef *hsai) } /** * @brief Rx Handler for Receive in Interrupt mode for 32-Bit transfer. - * @param hsai: pointer to a SAI_HandleTypeDef structure that contains + * @param hsai pointer to a SAI_HandleTypeDef structure that contains * the configuration information for SAI module. * @retval None */ @@ -2078,7 +2174,7 @@ static void SAI_Receive_IT32Bit(SAI_HandleTypeDef *hsai) /** * @brief DMA SAI transmit process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2103,7 +2199,7 @@ static void SAI_DMATxCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SAI transmit process half complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2116,7 +2212,7 @@ static void SAI_DMATxHalfCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SAI receive process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2139,7 +2235,7 @@ static void SAI_DMARxCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SAI receive process half complete callback - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2151,7 +2247,7 @@ static void SAI_DMARxHalfCplt(DMA_HandleTypeDef *hdma) } /** * @brief DMA SAI communication error callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2180,7 +2276,7 @@ static void SAI_DMAError(DMA_HandleTypeDef *hdma) /** * @brief DMA SAI Abort callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.h index 383d35fadf..1c956e7348 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sai.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SAI HAL module. ****************************************************************************** * @attention @@ -76,6 +74,20 @@ typedef enum */ typedef void (*SAIcallback)(void); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** + * @brief SAI PDM Init structure definition + */ +typedef struct +{ + FunctionalState Activation; /*!< Enable/disable PDM interface */ + uint32_t MicPairsNbr; /*!< Specifies the number of microphone pairs used. + This parameter must be a number between Min_Data = 1 and Max_Data = 3. */ + uint32_t ClockEnable; /*!< Specifies which clock must be enabled. + This parameter can be a values combination of @ref SAI_PDM_ClockEnable */ +}SAI_PdmInitTypeDef; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** @defgroup SAI_Init_Structure_definition SAI Init Structure definition * @brief SAI Init Structure definition * @{ @@ -101,7 +113,14 @@ typedef struct uint32_t NoDivider; /*!< Specifies whether master clock will be divided or not. This parameter can be a value of @ref SAI_Block_NoDivider - @note: If bit NODIV in the SAI_xCR1 register is cleared, the frame length + @note: For STM32L4Rx/STM32L4Sx devices : + If bit NOMCK in the SAI_xCR1 register is cleared, the frame length + should be aligned to a number equal to a power of 2, from 8 to 256. + If bit NOMCK in the SAI_xCR1 register is set, the frame length can + take any of the values without constraint. There is no MCLK_x clock + which can be output. + For other devices : + If bit NODIV in the SAI_xCR1 register is cleared, the frame length should be aligned to a number equal to a power of 2, from 8 to 256. If bit NODIV in the SAI_xCR1 register is set, the frame length can take any of the values without constraint since the input clock of @@ -116,7 +135,13 @@ typedef struct uint32_t Mckdiv; /*!< Specifies the master clock divider, the parameter will be used if for AudioFrequency the user choice - This parameter must be a number between Min_Data = 0 and Max_Data = 15 */ + This parameter must be a number between Min_Data = 0 and Max_Data = 63 on STM32L4Rx/STM32L4Sx devices. + This parameter must be a number between Min_Data = 0 and Max_Data = 15 on other devices. */ + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t MckOverSampling; /*!< Specifies the master clock oversampling. + This parameter can be a value of @ref SAI_Block_Mck_OverSampling */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ uint32_t MonoStereoMode; /*!< Specifies if the mono or stereo mode is selected. This parameter can be a value of @ref SAI_Mono_Stereo_Mode */ @@ -127,6 +152,10 @@ typedef struct uint32_t TriState; /*!< Specifies the companding mode type. This parameter can be a value of @ref SAI_TRIState_Management */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + SAI_PdmInitTypeDef PdmInit; /*!< Specifies the PDM configuration. */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* This part of the structure is automatically filled if your are using the high level initialisation function HAL_SAI_InitProtocol */ @@ -314,6 +343,26 @@ typedef struct __SAI_HandleTypeDef * @} */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup SAI_Block_Mck_OverSampling SAI Block Master Clock OverSampling + * @{ + */ +#define SAI_MCK_OVERSAMPLING_DISABLE ((uint32_t)0x00000000U) +#define SAI_MCK_OVERSAMPLING_ENABLE ((uint32_t)SAI_xCR1_OSR) +/** + * @} + */ + +/** @defgroup SAI_PDM_ClockEnable SAI PDM Clock Enable + * @{ + */ +#define SAI_PDM_CLOCK1_ENABLE ((uint32_t)SAI_PDMCR_CKEN1) +#define SAI_PDM_CLOCK2_ENABLE ((uint32_t)SAI_PDMCR_CKEN2) +/** + * @} + */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** @defgroup SAI_Block_Mode SAI Block Mode * @{ */ @@ -391,7 +440,11 @@ typedef struct __SAI_HandleTypeDef * @{ */ #define SAI_MASTERDIVIDER_ENABLE ((uint32_t)0x00000000U) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SAI_MASTERDIVIDER_DISABLE ((uint32_t)SAI_xCR1_NOMCK) +#else #define SAI_MASTERDIVIDER_DISABLE ((uint32_t)SAI_xCR1_NODIV) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -564,14 +617,14 @@ typedef struct __SAI_HandleTypeDef */ /** @brief Reset SAI handle state. - * @param __HANDLE__: specifies the SAI Handle. + * @param __HANDLE__ specifies the SAI Handle. * @retval None */ #define __HAL_SAI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SAI_STATE_RESET) /** @brief Enable or disable the specified SAI interrupts. - * @param __HANDLE__: specifies the SAI Handle. - * @param __INTERRUPT__: specifies the interrupt source to enable or disable. + * @param __HANDLE__ specifies the SAI Handle. + * @param __INTERRUPT__ specifies the interrupt source to enable or disable. * This parameter can be one of the following values: * @arg SAI_IT_OVRUDR: Overrun underrun interrupt enable * @arg SAI_IT_MUTEDET: Mute detection interrupt enable @@ -586,8 +639,8 @@ typedef struct __SAI_HandleTypeDef #define __HAL_SAI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR &= (~(__INTERRUPT__))) /** @brief Check whether the specified SAI interrupt source is enabled or not. - * @param __HANDLE__: specifies the SAI Handle. - * @param __INTERRUPT__: specifies the SAI interrupt source to check. + * @param __HANDLE__ specifies the SAI Handle. + * @param __INTERRUPT__ specifies the SAI interrupt source to check. * This parameter can be one of the following values: * @arg SAI_IT_OVRUDR: Overrun underrun interrupt enable * @arg SAI_IT_MUTEDET: Mute detection interrupt enable @@ -601,8 +654,8 @@ typedef struct __SAI_HandleTypeDef #define __HAL_SAI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) /** @brief Check whether the specified SAI flag is set or not. - * @param __HANDLE__: specifies the SAI Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the SAI Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: * @arg SAI_FLAG_OVRUDR: Overrun underrun flag. * @arg SAI_FLAG_MUTEDET: Mute detection flag. @@ -616,8 +669,8 @@ typedef struct __SAI_HandleTypeDef #define __HAL_SAI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) /** @brief Clear the specified SAI pending flag. - * @param __HANDLE__: specifies the SAI Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the SAI Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be any combination of the following values: * @arg SAI_FLAG_OVRUDR: Clear Overrun underrun * @arg SAI_FLAG_MUTEDET: Clear Mute detection @@ -638,6 +691,11 @@ typedef struct __SAI_HandleTypeDef * @} */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/* Include SAI HAL Extension module */ +#include "stm32l4xx_hal_sai_ex.h" +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Exported functions --------------------------------------------------------*/ /** @addtogroup SAI_Exported_Functions @@ -738,6 +796,16 @@ uint32_t HAL_SAI_GetError(SAI_HandleTypeDef *hsai); ((AUDIO) == SAI_AUDIO_FREQUENCY_16K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_11K) || \ ((AUDIO) == SAI_AUDIO_FREQUENCY_8K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_MCKDIV)) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_SAI_BLOCK_MCK_OVERSAMPLING(VALUE) (((VALUE) == SAI_MCK_OVERSAMPLING_DISABLE) || \ + ((VALUE) == SAI_MCK_OVERSAMPLING_ENABLE)) + +#define IS_SAI_PDM_MIC_PAIRS_NUMBER(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 3U)) + +#define IS_SAI_PDM_CLOCK_ENABLE(CLOCK) (((CLOCK) != 0U) && \ + (((CLOCK) & ~(SAI_PDM_CLOCK1_ENABLE | SAI_PDM_CLOCK2_ENABLE)) == 0U)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #define IS_SAI_BLOCK_MODE(MODE) (((MODE) == SAI_MODEMASTER_TX) || \ ((MODE) == SAI_MODEMASTER_RX) || \ ((MODE) == SAI_MODESLAVE_TX) || \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.c new file mode 100644 index 0000000000..44bd907dc5 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.c @@ -0,0 +1,142 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_sai_ex.c + * @author MCD Application Team + * @brief SAI Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionality of the SAI Peripheral Controller: + * + Modify PDM microphone delays. + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ +#ifdef HAL_SAI_MODULE_ENABLED +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/** @defgroup SAIEx SAIEx + * @brief SAI Extended HAL module driver + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ + +#define SAI_PDM_DELAY_MASK 0x77U +#define SAI_PDM_DELAY_OFFSET 8U +#define SAI_PDM_RIGHT_DELAY_OFFSET 4U + +/* Private macros ------------------------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup SAIEx_Exported_Functions SAIEx Extended Exported Functions + * @{ + */ + +/** @defgroup SAIEx_Exported_Functions_Group1 Peripheral Control functions + * @brief SAIEx control functions + * +@verbatim + =============================================================================== + ##### Extended features functions ##### + =============================================================================== + [..] This section provides functions allowing to: + (+) Modify PDM microphone delays + +@endverbatim + * @{ + */ + +/** + * @brief Configure PDM microphone delays. + * @param hsai SAI handle. + * @param pdmMicDelay Microphone delays configuration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SAIEx_ConfigPdmMicDelay(SAI_HandleTypeDef *hsai, SAIEx_PdmMicDelayParamTypeDef *pdmMicDelay) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check that SAI sub-block is SAI1 sub-block A */ + if(hsai->Instance != SAI1_Block_A) + { + status = HAL_ERROR; + } + else + { + /* Check microphone delay parameters */ + assert_param(IS_SAI_PDM_MIC_PAIRS_NUMBER(pdmMicDelay->MicPair)); + assert_param(IS_SAI_PDM_MIC_DELAY(pdmMicDelay->LeftDelay)); + assert_param(IS_SAI_PDM_MIC_DELAY(pdmMicDelay->RightDelay)); + + /* Check SAI state */ + if(hsai->State != HAL_SAI_STATE_RESET) + { + /* Reset current delays for specified microphone */ + SAI1->PDMDLY &= ~(SAI_PDM_DELAY_MASK << (SAI_PDM_DELAY_OFFSET * (pdmMicDelay->MicPair - 1))); + + /* Apply new microphone delays */ + SAI1->PDMDLY |= (((pdmMicDelay->RightDelay << SAI_PDM_RIGHT_DELAY_OFFSET) | pdmMicDelay->LeftDelay) << \ + (SAI_PDM_DELAY_OFFSET * (pdmMicDelay->MicPair - 1))); + } + else + { + status = HAL_ERROR; + } + } + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ +#endif /* HAL_SAI_MODULE_ENABLED */ +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.h new file mode 100644 index 0000000000..3a3828dad1 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sai_ex.h @@ -0,0 +1,132 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_sai_ex.h + * @author MCD Application Team + * @brief Header file of SAI HAL extended module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_SAI_EX_H +#define __STM32L4xx_HAL_SAI_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup SAIEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ + +/** @defgroup SAIEx_Exported_Types SAIEx Exported Types + * @{ + */ + +/** + * @brief PDM microphone delay structure definition + */ +typedef struct +{ + uint32_t MicPair; /*!< Specifies which pair of microphones is selected. + This parameter must be a number between Min_Data = 1 and Max_Data = 3. */ + + uint32_t LeftDelay; /*!< Specifies the delay in PDM clock unit to apply on left microphone. + This parameter must be a number between Min_Data = 0 and Max_Data = 7. */ + + uint32_t RightDelay; /*!< Specifies the delay in PDM clock unit to apply on right microphone. + This parameter must be a number between Min_Data = 0 and Max_Data = 7. */ +}SAIEx_PdmMicDelayParamTypeDef; + +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/* Exported macros -----------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ + +/** @addtogroup SAIEx_Exported_Functions SAIEx Extended Exported Functions + * @{ + */ + +/** @addtogroup SAIEx_Exported_Functions_Group1 Peripheral Control functions + * @{ + */ + +HAL_StatusTypeDef HAL_SAIEx_ConfigPdmMicDelay(SAI_HandleTypeDef *hsai, SAIEx_PdmMicDelayParamTypeDef *pdmMicDelay); + +/** + * @} + */ + +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ + +/** @addtogroup SAIEx_Private_Macros SAIEx Extended Private Macros + * @{ + */ + +#define IS_SAI_PDM_MIC_DELAY(VALUE) ((VALUE) <= 7U) + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_HAL_SAI_EX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.c index 5ea713557e..d76c7386a1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sd.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SD card HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Secure Digital (SD) peripheral: @@ -37,7 +35,8 @@ (+++) Enable the clock for the SDMMC GPIOs using the functions __HAL_RCC_GPIOx_CLK_ENABLE(); (+++) Configure these SDMMC pins as alternate function pull-up using HAL_GPIO_Init() and according to your pin assignment; - (##) Perform DMA configuration if you need to use DMA process (HAL_SD_ReadBlocks_DMA() + (##) On STM32L4Rx/STM32L4Sxx devices, no DMA configuration is need, an internal DMA for SDMMC IP is used. + (##) On other devices, perform DMA configuration if you need to use DMA process (HAL_SD_ReadBlocks_DMA() and HAL_SD_WriteBlocks_DMA() APIs). (+++) Enable the DMAx interface clock using __HAL_RCC_DMAx_CLK_ENABLE(); (+++) Configure the DMA using the function HAL_DMA_Init() with predeclared and filled. @@ -233,9 +232,10 @@ * @{ */ -/** @addtogroup SD +/** @defgroup SD SD + * @brief SD HAL module driver * @{ - */ + */ #ifdef HAL_SD_MODULE_ENABLED @@ -266,11 +266,13 @@ static uint32_t SD_FindSCR (SD_HandleTypeDef *hsd, uint32_t *pSC static HAL_StatusTypeDef SD_PowerOFF (SD_HandleTypeDef *hsd); static HAL_StatusTypeDef SD_Write_IT (SD_HandleTypeDef *hsd); static HAL_StatusTypeDef SD_Read_IT (SD_HandleTypeDef *hsd); +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) static void SD_DMATransmitCplt(DMA_HandleTypeDef *hdma); static void SD_DMAReceiveCplt (DMA_HandleTypeDef *hdma); static void SD_DMAError (DMA_HandleTypeDef *hdma); static void SD_DMATxAbort (DMA_HandleTypeDef *hdma); static void SD_DMARxAbort (DMA_HandleTypeDef *hdma); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /** * @} */ @@ -312,7 +314,9 @@ HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) /* Check the parameters */ assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) assert_param(IS_SDMMC_CLOCK_BYPASS(hsd->Init.ClockBypass)); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); @@ -334,6 +338,28 @@ HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) return HAL_ERROR; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Configure the bus wide */ + if(HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) + { + return HAL_ERROR; + } + + if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) + { + if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || + (hsd->SdCard.CardType == CARD_SDHC_SDXC)) + { + hsd->Instance->CLKCR |= 0x00100000; + /* Enable High Speed */ + if(HAL_SDEx_HighSpeed(hsd) != HAL_OK) + { + return HAL_ERROR; + } + } + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Initialize the error code */ hsd->ErrorCode = HAL_SD_ERROR_NONE; @@ -361,12 +387,22 @@ HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) /* Default SDMMC peripheral configuration for SD card initialization */ Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE; +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; Init.BusWide = SDMMC_BUS_WIDE_1B; Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; Init.ClockDiv = SDMMC_INIT_CLK_DIV; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) + { + /* Set Transceiver polarity */ + hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Initialize SDMMC peripheral interface with default configuration */ status = SDMMC_Init(hsd->Instance, Init); if(status != HAL_OK) @@ -374,8 +410,10 @@ HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) return HAL_ERROR; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Disable SDMMC Clock */ __HAL_SD_DISABLE(hsd); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /* Set Power State to ON */ status = SDMMC_PowerState_ON(hsd->Instance); @@ -384,9 +422,11 @@ HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) return HAL_ERROR; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Enable SDMMC Clock */ __HAL_SD_ENABLE(hsd); - +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ + /* Required power up waiting time before starting the SD initialization sequence */ HAL_Delay(2U); @@ -553,8 +593,15 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint3 config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + config.DPSM = SDMMC_DPSM_DISABLE; +#else config.DPSM = SDMMC_DPSM_ENABLE; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ SDMMC_ConfigData(hsd->Instance, &config); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Read block(s) in polling mode */ if(NumberOfBlocks > 1) @@ -602,6 +649,9 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint3 return HAL_TIMEOUT; } } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __SDMMC_CMDTRANS_DISABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Send stop transmission command in case of multiblock read */ if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) @@ -647,6 +697,7 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint3 return HAL_ERROR; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Empty FIFO if there is still any data */ while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))) { @@ -662,9 +713,10 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint3 return HAL_ERROR; } } +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /* Clear all the static flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); hsd->State = HAL_SD_STATE_READY; @@ -734,6 +786,22 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint return HAL_ERROR; } + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = NumberOfBlocks * BLOCKSIZE; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + config.DPSM = SDMMC_DPSM_DISABLE; +#else + config.DPSM = SDMMC_DPSM_ENABLE; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + SDMMC_ConfigData(hsd->Instance, &config); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Write Blocks in Polling mode */ if(NumberOfBlocks > 1U) { @@ -758,15 +826,6 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint return HAL_ERROR; } - /* Configure the SD DPSM (Data Path State Machine) */ - config.DataTimeOut = SDMMC_DATATIMEOUT; - config.DataLength = NumberOfBlocks * BLOCKSIZE; - config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; - config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD; - config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; - config.DPSM = SDMMC_DPSM_ENABLE; - SDMMC_ConfigData(hsd->Instance, &config); - /* Write block(s) in polling mode */ while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DATAEND)) { @@ -789,7 +848,10 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint return HAL_TIMEOUT; } } - +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __SDMMC_CMDTRANS_DISABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Send stop transmission command in case of multiblock write */ if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) { @@ -835,7 +897,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint } /* Clear all the static flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); hsd->State = HAL_SD_STATE_READY; @@ -897,15 +959,6 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, ui BlockAdd *= 512U; } - /* Configure the SD DPSM (Data Path State Machine) */ - config.DataTimeOut = SDMMC_DATATIMEOUT; - config.DataLength = BLOCKSIZE * NumberOfBlocks; - config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; - config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; - config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; - config.DPSM = SDMMC_DPSM_ENABLE; - SDMMC_ConfigData(hsd->Instance, &config); - /* Set Block Size for Card */ errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); if(errorstate != HAL_SD_ERROR_NONE) @@ -917,6 +970,22 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, ui return HAL_ERROR; } + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + config.DPSM = SDMMC_DPSM_DISABLE; +#else + config.DPSM = SDMMC_DPSM_ENABLE; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + SDMMC_ConfigData(hsd->Instance, &config); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Read Blocks in IT mode */ if(NumberOfBlocks > 1U) { @@ -1010,6 +1079,19 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, u return HAL_ERROR; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; + config.DPSM = SDMMC_DPSM_DISABLE; + SDMMC_ConfigData(hsd->Instance, &config); + + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Write Blocks in Polling mode */ if(NumberOfBlocks > 1U) { @@ -1034,6 +1116,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, u return HAL_ERROR; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Configure the SD DPSM (Data Path State Machine) */ config.DataTimeOut = SDMMC_DATATIMEOUT; config.DataLength = BLOCKSIZE * NumberOfBlocks; @@ -1042,6 +1125,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, u config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; config.DPSM = SDMMC_DPSM_ENABLE; SDMMC_ConfigData(hsd->Instance, &config); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ return HAL_OK; } @@ -1090,6 +1174,7 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u /* Initialize data control register */ hsd->Instance->DCTRL = 0U; +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAEND)); /* Set the DMA transfer complete callback */ @@ -1106,21 +1191,16 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u /* Enable SD DMA transfer */ __HAL_SD_DMA_ENABLE(hsd); +#else + hsd->pRxBuffPtr = (uint32_t*)pData; + hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ if(hsd->SdCard.CardType != CARD_SDHC_SDXC) { BlockAdd *= 512U; } - /* Configure the SD DPSM (Data Path State Machine) */ - config.DataTimeOut = SDMMC_DATATIMEOUT; - config.DataLength = BLOCKSIZE * NumberOfBlocks; - config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; - config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; - config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; - config.DPSM = SDMMC_DPSM_ENABLE; - SDMMC_ConfigData(hsd->Instance, &config); - /* Set Block Size for Card */ errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); if(errorstate != HAL_SD_ERROR_NONE) @@ -1131,6 +1211,28 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } + + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + config.DPSM = SDMMC_DPSM_DISABLE; +#else + config.DPSM = SDMMC_DPSM_ENABLE; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + SDMMC_ConfigData(hsd->Instance, &config); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Enable transfer interrupts */ + __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAEND)); + + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); + hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; + hsd->Instance->IDMABASE0 = (uint32_t) pData ; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Read Blocks in DMA mode */ if(NumberOfBlocks > 1U) @@ -1151,6 +1253,9 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAEND)); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ hsd->ErrorCode |= errorstate; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; @@ -1203,6 +1308,10 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, /* Initialize data control register */ hsd->Instance->DCTRL = 0U; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + hsd->pTxBuffPtr = (uint32_t*)pData; + hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; +#else /* Enable SD Error interrupts */ __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR)); @@ -1214,6 +1323,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, /* Set the DMA Abort callback */ hsd->hdmatx->XferAbortCallback = NULL; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ if(hsd->SdCard.CardType != CARD_SDHC_SDXC) { @@ -1230,6 +1340,24 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; + config.DPSM = SDMMC_DPSM_DISABLE; + SDMMC_ConfigData(hsd->Instance, &config); + + /* Enable transfer interrupts */ + __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND)); + + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); + + hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; + hsd->Instance->IDMABASE0 = (uint32_t) pData ; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Write Blocks in Polling mode */ if(NumberOfBlocks > 1U) @@ -1250,11 +1378,15 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND)); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ hsd->ErrorCode |= errorstate; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Enable SDMMC DMA transfer */ __HAL_SD_DMA_ENABLE(hsd); @@ -1269,6 +1401,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; config.DPSM = SDMMC_DPSM_ENABLE; SDMMC_ConfigData(hsd->Instance, &config); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ return HAL_OK; } @@ -1396,8 +1529,14 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) { __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); - __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ - SDMMC_IT_TXUNDERR| SDMMC_IT_RXOVERR); + __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT |\ + SDMMC_IT_TXUNDERR | SDMMC_IT_RXOVERR | SDMMC_IT_TXFIFOHE |\ + SDMMC_IT_RXFIFOHF); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); + __SDMMC_CMDTRANS_DISABLE( hsd->Instance); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ if((hsd->Context & SD_CONTEXT_IT) != RESET) { @@ -1412,7 +1551,7 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) } /* Clear all the static flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); hsd->State = HAL_SD_STATE_READY; if(((hsd->Context & SD_CONTEXT_READ_SINGLE_BLOCK) != RESET) || ((hsd->Context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != RESET)) @@ -1426,6 +1565,32 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) } else if((hsd->Context & SD_CONTEXT_DMA) != RESET) { +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + hsd->Instance->DLEN = 0; + hsd->Instance->DCTRL = 0; + hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; + + /* Stop Transfer for Write Single/Multi blocks or Read Multi blocks */ + if((hsd->Context & SD_CONTEXT_READ_SINGLE_BLOCK) == RESET) + { + errorstate = SDMMC_CmdStopTransfer(hsd->Instance); + if(errorstate != HAL_SD_ERROR_NONE) + { + hsd->ErrorCode |= errorstate; + HAL_SD_ErrorCallback(hsd); + } + } + + hsd->State = HAL_SD_STATE_READY; + if(((hsd->Context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != RESET) || ((hsd->Context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != RESET)) + { + HAL_SD_TxCpltCallback(hsd); + } + if(((hsd->Context & SD_CONTEXT_READ_SINGLE_BLOCK) != RESET) || ((hsd->Context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != RESET)) + { + HAL_SD_RxCpltCallback(hsd); + } +#else if((hsd->Context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != RESET) { errorstate = SDMMC_CmdStopTransfer(hsd->Instance); @@ -1445,20 +1610,17 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) HAL_SD_TxCpltCallback(hsd); } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ } } else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXFIFOHE) != RESET) { - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_TXFIFOHE); - SD_Write_IT(hsd); } else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXFIFOHF) != RESET) { - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXFIFOHF); - SD_Read_IT(hsd); } @@ -1483,15 +1645,33 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) } /* Clear All flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); /* Disable all interrupts */ __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ SDMMC_IT_TXUNDERR| SDMMC_IT_RXOVERR); - if((hsd->Context & SD_CONTEXT_DMA) != RESET) + if((hsd->Context & SD_CONTEXT_IT) != RESET) { - /* Abort the SD DMA Streams */ + /* Set the SD state to ready to be able to start again the process */ + hsd->State = HAL_SD_STATE_READY; + HAL_SD_ErrorCallback(hsd); + } + else if((hsd->Context & SD_CONTEXT_DMA) != RESET) + { +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + if(hsd->ErrorCode != HAL_SD_ERROR_NONE) + { + /* Disable Internal DMA */ + __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); + hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; + + /* Set the SD state to ready to be able to start again the process */ + hsd->State = HAL_SD_STATE_READY; + HAL_SD_ErrorCallback(hsd); + } +#else + /* Abort the SD DMA channel */ if(hsd->hdmatx != NULL) { /* Set the DMA Tx abort callback */ @@ -1518,14 +1698,40 @@ void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) hsd->State = HAL_SD_STATE_READY; HAL_SD_AbortCallback(hsd); } - } - else if((hsd->Context & SD_CONTEXT_IT) != RESET) - { - /* Set the SD state to ready to be able to start again the process */ - hsd->State = HAL_SD_STATE_READY; - HAL_SD_ErrorCallback(hsd); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ } } + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_IDMABTC) != RESET) + { + if(READ_BIT(hsd->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == SD_DMA_BUFFER0) + { + /* Current buffer is buffer0, Transfer complete for buffer1 */ + if((hsd->Context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != RESET) + { + HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(hsd); + } + else /* SD_CONTEXT_READ_MULTIPLE_BLOCK */ + { + HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(hsd); + } + } + else /* SD_DMA_BUFFER1 */ + { + /* Current buffer is buffer1, Transfer complete for buffer0 */ + if((hsd->Context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != RESET) + { + HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(hsd); + } + else /* SD_CONTEXT_READ_MULTIPLE_BLOCK */ + { + HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(hsd); + } + } + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ } /** @@ -1650,7 +1856,7 @@ HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypedef pCID->OEM_AppliID = tmp << 8; /* Byte 2 */ - tmp = (uint8_t)((hsd->CID[0] & 0x000000FF00) >> 8); + tmp = (uint8_t)((hsd->CID[0] & 0x0000FF00) >> 8); pCID->OEM_AppliID |= tmp; /* Byte 3 */ @@ -2030,11 +2236,39 @@ HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t { /* Configure the SDMMC peripheral */ Init.ClockEdge = hsd->Init.ClockEdge; +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) Init.ClockBypass = hsd->Init.ClockBypass; +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ Init.ClockPowerSave = hsd->Init.ClockPowerSave; Init.BusWide = WideMode; Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#if 0 + /* Check if user Clock div < Normal speed 25Mhz, no change in Clockdiv */ + // if(hsd->Init.ClockDiv >= SDMMC_NSpeed_CLK_DIV) + if(hsd->Init.ClockDiv >= SDMMC_TRANSFER_CLK_DIV) + { + Init.ClockDiv = hsd->Init.ClockDiv; + } + else + { + if(hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) + { + Init.ClockDiv = hsd->Init.ClockDiv; + } + else + { + /* No High speed SD card */ + // Init.ClockDiv = SDMMC_NSpeed_CLK_DIV; + Init.ClockDiv = SDMMC_TRANSFER_CLK_DIV; + } + } +#else Init.ClockDiv = hsd->Init.ClockDiv; +#endif +#else + Init.ClockDiv = hsd->Init.ClockDiv; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ SDMMC_Init(hsd->Instance, Init); } @@ -2084,22 +2318,27 @@ HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) /* Clear All flags */ __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* If IDMA Context, disable Internal DMA */ + hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; +#else if((hsd->hdmatx != NULL) || (hsd->hdmarx != NULL)) { /* Disable the SD DMA request */ hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); - /* Abort the SD DMA Tx Stream */ + /* Abort the SD DMA Tx channel */ if(hsd->hdmatx != NULL) { HAL_DMA_Abort(hsd->hdmatx); } - /* Abort the SD DMA Rx Stream */ + /* Abort the SD DMA Rx channel */ if(hsd->hdmarx != NULL) { HAL_DMA_Abort(hsd->hdmarx); } } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ hsd->State = HAL_SD_STATE_READY; CardState = HAL_SD_GetCardState(hsd); @@ -2124,19 +2363,40 @@ HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) { HAL_SD_CardStateTypedef CardState; - /* DIsable All interrupts */ + /* Disable All interrupts */ __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ SDMMC_IT_TXUNDERR| SDMMC_IT_RXOVERR); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* If IDMA Context, disable Internal DMA */ + hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; + /* Clear All flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + CardState = HAL_SD_GetCardState(hsd); + hsd->State = HAL_SD_STATE_READY; + + if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING)) + { + hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); + } + + if(hsd->ErrorCode != HAL_SD_ERROR_NONE) + { + return HAL_ERROR; + } + else + { + HAL_SD_AbortCallback(hsd); + } +#else if((hsd->hdmatx != NULL) || (hsd->hdmarx != NULL)) { /* Disable the SD DMA request */ hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); - /* Abort the SD DMA Tx Stream */ + /* Abort the SD DMA Tx channel */ if(hsd->hdmatx != NULL) { hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; @@ -2145,7 +2405,7 @@ HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) hsd->hdmatx = NULL; } } - /* Abort the SD DMA Rx Stream */ + /* Abort the SD DMA Rx channel */ if(hsd->hdmarx != NULL) { hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; @@ -2159,6 +2419,9 @@ HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) /* No transfer ongoing on both DMA channels*/ if((hsd->hdmatx == NULL) && (hsd->hdmarx == NULL)) { + /* Clear All flags */ + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + CardState = HAL_SD_GetCardState(hsd); hsd->State = HAL_SD_STATE_READY; if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING)) @@ -2174,6 +2437,7 @@ HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) HAL_SD_AbortCallback(hsd); } } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ return HAL_OK; } @@ -2191,6 +2455,7 @@ HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) * @{ */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /** * @brief DMA SD transmit process complete callback * @param hdma: DMA handle @@ -2230,7 +2495,7 @@ static void SD_DMAReceiveCplt(DMA_HandleTypeDef *hdma) hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); /* Clear all the static flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); hsd->State = HAL_SD_STATE_READY; @@ -2287,14 +2552,16 @@ static void SD_DMATxAbort(DMA_HandleTypeDef *hdma) /* All DMA channels are aborted */ if((hsd->hdmatx == NULL) && (hsd->hdmarx == NULL)) { + /* Clear All flags */ + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + CardState = HAL_SD_GetCardState(hsd); - hsd->ErrorCode = HAL_SD_ERROR_NONE; hsd->State = HAL_SD_STATE_READY; if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING)) { hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); - if(hsd->ErrorCode != HAL_SD_ERROR_NONE) + if(hsd->ErrorCode == HAL_SD_ERROR_NONE) { HAL_SD_AbortCallback(hsd); } @@ -2324,14 +2591,16 @@ static void SD_DMARxAbort(DMA_HandleTypeDef *hdma) /* All DMA channels are aborted */ if((hsd->hdmatx == NULL) && (hsd->hdmarx == NULL)) { + /* Clear All flags */ + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + CardState = HAL_SD_GetCardState(hsd); - hsd->ErrorCode = HAL_SD_ERROR_NONE; hsd->State = HAL_SD_STATE_READY; if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING)) { hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); - if(hsd->ErrorCode != HAL_SD_ERROR_NONE) + if(hsd->ErrorCode == HAL_SD_ERROR_NONE) { HAL_SD_AbortCallback(hsd); } @@ -2342,6 +2611,7 @@ static void SD_DMARxAbort(DMA_HandleTypeDef *hdma) } } } +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /** * @brief Initializes the sd card. @@ -2423,8 +2693,10 @@ static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) return errorstate; } +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Configure SDMMC peripheral interface */ SDMMC_Init(hsd->Instance, hsd->Init); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /* All cards are initialized */ return HAL_SD_ERROR_NONE; @@ -2456,6 +2728,7 @@ static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) { hsd->SdCard.CardVersion = CARD_V1_X; +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ while(validvoltage == 0) { @@ -2486,11 +2759,13 @@ static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) } /* Card type is SDSC */ hsd->SdCard.CardType = CARD_SDSC; +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ } else { hsd->SdCard.CardVersion = CARD_V2_X; +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /* Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ while(validvoltage == 0) { @@ -2528,8 +2803,115 @@ static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) { hsd->SdCard.CardType = CARD_SDSC; } +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* SEND CMD55 APP_CMD with RCA as 0 */ + errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); + if(errorstate != HAL_SD_ERROR_NONE) + { + return HAL_SD_ERROR_UNSUPPORTED_FEATURE; + } + else + { + /* SD CARD */ + /* Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ + while((!validvoltage) && (count < SDMMC_MAX_VOLT_TRIAL)) + { + /* SEND CMD55 APP_CMD with RCA as 0 */ + errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); + if(errorstate != HAL_SD_ERROR_NONE) + { + return errorstate; + } + + /* Send CMD41 */ + errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | SD_SWITCH_1_8V_CAPACITY); + if(errorstate != HAL_SD_ERROR_NONE) + { + return HAL_SD_ERROR_UNSUPPORTED_FEATURE; + } + + /* Get command response */ + response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); + + /* Get operating voltage*/ + validvoltage = (((response >> 31) == 1) ? 1 : 0); + + count++; + } + + if(count >= SDMMC_MAX_VOLT_TRIAL) + { + return HAL_SD_ERROR_INVALID_VOLTRANGE; + } + + if((response & SDMMC_HIGH_CAPACITY) == SDMMC_HIGH_CAPACITY) /* (response &= SD_HIGH_CAPACITY) */ + { + hsd->SdCard.CardType = CARD_SDHC_SDXC; + + if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) + { + if((response & SD_SWITCH_1_8V_CAPACITY) == SD_SWITCH_1_8V_CAPACITY) + { + hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; + + /* Start switching procedue */ + hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; + + /* Send CMD11 to switch 1.8V mode */ + errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); + if(errorstate != HAL_SD_ERROR_NONE) + { + return errorstate; + } + + /* Check to CKSTOP */ + while(( hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP); + + /* Clear CKSTOP Flag */ + hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; + + /* Check to BusyD0 */ + if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) + { + /* Error when activate Voltage Switch in SDMMC IP */ + return SDMMC_ERROR_UNSUPPORTED_FEATURE; + } + else + { + /* Enable Transceiver Switch PIN */ + HAL_SDEx_DriveTransceiver_1_8V_Callback(SET); + + /* Switch ready */ + hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; + + /* Check VSWEND Flag */ + while(( hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND); + + /* Clear VSWEND Flag */ + hsd->Instance->ICR = SDMMC_FLAG_VSWEND; + + /* Check BusyD0 status */ + if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) + { + /* Error when enabling 1.8V mode */ + return HAL_SD_ERROR_INVALID_VOLTRANGE; + } + /* Switch to 1.8V OK */ + + /* Disable VSWITCH FLAG from SDMMC IP */ + hsd->Instance->POWER = 0x13; + /* Clean Status flags */ + hsd->Instance->ICR = 0xFFFFFFFF; + } + } + } + } + } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + return HAL_SD_ERROR_NONE; } @@ -2600,7 +2982,11 @@ static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) } /* Get status data */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DATAEND)) +#else while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ { if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) { @@ -2631,7 +3017,11 @@ static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) return HAL_SD_ERROR_RX_OVERRUN; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) +#else while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ { *pSDstatus = SDMMC_ReadFIFO(hsd->Instance); pSDstatus++; @@ -2643,7 +3033,7 @@ static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) } /* Clear all the static status flags*/ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); return HAL_SD_ERROR_NONE; } @@ -2815,6 +3205,23 @@ static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) return errorstate; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND | SDMMC_FLAG_DATAEND)) + { + if((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0)) + { + tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); + tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); + index++; + } + + + if((HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT) + { + return HAL_SD_ERROR_TIMEOUT; + } + } +#else while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND)) { if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) @@ -2828,6 +3235,7 @@ static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) return HAL_SD_ERROR_TIMEOUT; } } +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) { @@ -2851,8 +3259,8 @@ static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) { /* No error flag set */ /* Clear all the static flags */ - __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); - + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + *(pSCR + 1) = ((tempscr[0] & SDMMC_0TO7BITS) << 24) | ((tempscr[0] & SDMMC_8TO15BITS) << 8) |\ ((tempscr[0] & SDMMC_16TO23BITS) >> 8) | ((tempscr[0] & SDMMC_24TO31BITS) >> 24); diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.h index da41cd6551..b1748fe7a8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sd.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SD HAL module. ****************************************************************************** * @attention @@ -52,10 +50,9 @@ * @{ */ -/** @defgroup SD SD - * @brief SD HAL module driver +/** @addtogroup SD * @{ - */ + */ /* Exported types ------------------------------------------------------------*/ /** @defgroup SD_Exported_Types SD Exported Types @@ -126,6 +123,11 @@ typedef struct uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + + uint32_t CardSpeed; /*!< Specifies the card Speed */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ }HAL_SD_CardInfoTypeDef; /** @@ -153,10 +155,13 @@ typedef struct __IO uint32_t ErrorCode; /*!< SD Card Error codes */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) + DMA_HandleTypeDef *hdmatx; /*!< SD Tx DMA handle parameters */ DMA_HandleTypeDef *hdmarx; /*!< SD Rx DMA handle parameters */ +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ HAL_SD_CardInfoTypeDef SdCard; /*!< SD Card information */ uint32_t CSD[4]; /*!< SD card specific data table */ @@ -332,6 +337,13 @@ typedef struct /** @defgroup SD_Exported_Constansts_Group3 SD Supported Memory Cards * @{ */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define CARD_NORMAL_SPEED ((uint32_t)0x00000000U) /*!< Normal Speed Card <12.5Mo/s , Spec Version 1.01 */ +#define CARD_HIGH_SPEED ((uint32_t)0x00000100U) /*!< High Speed Card <25Mo/s , Spec version 2.00 */ +#define CARD_ULTRA_HIGH_SPEED ((uint32_t)0x00000200U) /*!< UHS-I SD Card <50Mo/s for SDR50, DDR5 Cards + and <104Mo/s for SDR104, Spec version 3.01 */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + #define CARD_SDSC ((uint32_t)0x00000000U) #define CARD_SDHC_SDXC ((uint32_t)0x00000001U) #define CARD_SECURED ((uint32_t)0x00000003U) @@ -359,6 +371,7 @@ typedef struct * @{ */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /** * @brief Enable the SD device. * @retval None @@ -382,6 +395,7 @@ typedef struct * @retval None */ #define __HAL_SD_DMA_DISABLE(__HANDLE__) __SDMMC_DMA_DISABLE((__HANDLE__)->Instance) +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /** * @brief Enable the SD device interrupt. @@ -615,6 +629,10 @@ typedef struct * @} */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/* Include SD HAL Extension module */ +#include "stm32l4xx_hal_sd_ex.h" +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* Exported functions --------------------------------------------------------*/ /** @defgroup SD_Exported_Functions SD Exported Functions * @{ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.c new file mode 100644 index 0000000000..4ee5298889 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.c @@ -0,0 +1,550 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_sd_ex.c + * @author MCD Application Team + * @brief SD card Extended HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Secure Digital (SD) peripheral: + * + Extended features functions + * + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + The SD Extension HAL driver can be used as follows: + (+) Set card in High Speed mode using HAL_SDEx_HighSpeed() function. + (+) Configure Buffer0 and Buffer1 start address and Buffer size using HAL_SDEx_ConfigDMAMultiBuffer() function. + (+) Start Read and Write for multibuffer mode using HAL_SDEx_ReadBlocksDMAMultiBuffer() and HAL_SDEx_WriteBlocksDMAMultiBuffer() functions. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup SDEx SDEx + * @brief SD HAL extended module driver + * @{ + */ + +#ifdef HAL_SD_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup SDEx_Exported_Functions + * @{ + */ + +/** @addtogroup SDEx_Exported_Functions_Group1 + * @brief High Speed function + * +@verbatim + ============================================================================== + ##### High Speed function ##### + ============================================================================== + [..] + This section provides function allowing to configure the card in High Speed mode. + +@endverbatim + * @{ + */ + +/** + * @brief Switches the SD card to High Speed mode. + * This API must be used after "Transfer State" + * @note This operation should be followed by the configuration + * of PLL to have SDMMCCK clock between 50 and 120 MHz + * @param hsd: SD handle + * @retval SD Card error state + */ +uint32_t HAL_SDEx_HighSpeed(SD_HandleTypeDef *hsd) +{ + uint32_t errorstate = HAL_OK; + SDMMC_DataInitTypeDef sdmmc_datainitstructure; + uint8_t SD_hs[64] = {0}; + uint32_t count = 0, *tempbuff = (uint32_t *)SD_hs; + uint32_t Timeout = HAL_GetTick(); + + if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) + { + /* Standard Speed Card <= 12.5Mhz */ + return HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; + } + + if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) && + (hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE)) + { + /* Initialize the Data control register */ + hsd->Instance->DCTRL = 0; + errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64); + + if (errorstate != HAL_OK) + { + return errorstate; + } + + /* Configure the SD DPSM (Data Path State Machine) */ + sdmmc_datainitstructure.DataTimeOut = SDMMC_DATATIMEOUT; + sdmmc_datainitstructure.DataLength = 64; + sdmmc_datainitstructure.DataBlockSize = SDMMC_DATABLOCK_SIZE_64B ; + sdmmc_datainitstructure.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; + sdmmc_datainitstructure.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; + sdmmc_datainitstructure.DPSM = SDMMC_DPSM_ENABLE; + SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); + + errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_SDR25_SWITCH_PATTERN); + if(errorstate != HAL_OK) + { + return errorstate; + } + + while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND| SDMMC_FLAG_DATAEND )) + { + if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) + { + for (count = 0; count < 8; count++) + { + *(tempbuff + count) = SDMMC_ReadFIFO(hsd->Instance); + } + + tempbuff += 8; + } + + if((HAL_GetTick()-Timeout) >= SDMMC_DATATIMEOUT) + { + hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; + hsd->State= HAL_SD_STATE_READY; + return HAL_TIMEOUT; + } + } + + if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) + { + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); + + errorstate = 0; + + return errorstate; + } + else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) + { + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); + + errorstate = SDMMC_ERROR_DATA_CRC_FAIL; + + return errorstate; + } + else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) + { + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); + + errorstate = SDMMC_ERROR_RX_OVERRUN; + + return errorstate; + } + else + { + /* No error flag set */ + } + + /* Clear all the static flags */ + __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); + + /* Test if the switch mode HS is ok */ + if ((SD_hs[13]& 2) != 2) + { + errorstate = SDMMC_ERROR_UNSUPPORTED_FEATURE; + } + else + { + HAL_SDEx_DriveTransceiver_1_8V_Callback(SET); + } + + /* Set Block Size for Card */ + errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); + if(errorstate != HAL_SD_ERROR_NONE) + { + hsd->State = HAL_SD_STATE_READY; + hsd->ErrorCode |= errorstate; + return HAL_ERROR; + } + } + + return errorstate; +} + +/** + * @brief Enable/Disable the SD Transciver 1.8V Mode Callback. + * @param status: Voltage Switch State + * @retval None + */ +__weak void HAL_SDEx_DriveTransceiver_1_8V_Callback(FlagStatus status) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(status); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_SD_EnableTransciver could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @addtogroup SDEx_Exported_Functions_Group2 + * @brief Multibuffer functions + * +@verbatim + ============================================================================== + ##### Multibuffer functions ##### + ============================================================================== + [..] + This section provides functions allowing to configure the multibuffer mode and start read and write + multibuffer mode for SD HAL driver. + +@endverbatim + * @{ + */ + +/** + * @brief Configure DMA Dual Buffer mode. The Data transfer is managed by an Internal DMA. + * @param hsd: SD handle + * @param pDataBuffer0: Pointer to the buffer0 that will contain/receive the transfered data + * @param pDataBuffer1: Pointer to the buffer1 that will contain/receive the transfered data + * @param BufferSize: Size of Buffer0 in Blocks. Buffer0 and Buffer1 must have the same size. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDEx_ConfigDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t *pDataBuffer0, uint32_t *pDataBuffer1, uint32_t BufferSize) +{ + if(hsd->State == HAL_SD_STATE_READY) + { + hsd->Instance->IDMABASE0 = (uint32_t) pDataBuffer0; + hsd->Instance->IDMABASE1 = (uint32_t) pDataBuffer1; + hsd->Instance->IDMABSIZE = (uint32_t) (BLOCKSIZE * BufferSize); + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + +/** + * @brief Reads block(s) from a specified address in a card. The received Data will be stored in Buffer0 and Buffer1. + * Buffer0, Buffer1 and BufferSize need to be configured by function HAL_SDEx_ConfigDMAMultiBuffer before call this function. + * @param hsd: SD handle + * @param BlockAdd: Block Address from where data is to be read + * @param NumberOfBlocks: Total number of blocks to read + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDEx_ReadBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks) +{ + SDMMC_DataInitTypeDef config; + uint32_t errorstate = HAL_SD_ERROR_NONE; + + if(hsd->State == HAL_SD_STATE_READY) + { + if((BlockAdd + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) + { + hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; + return HAL_ERROR; + } + + if ((hsd->Instance->IDMABASE0 == 0) || (hsd->Instance->IDMABASE1 == 0) || (hsd->Instance->IDMABSIZE == 0)) + { + hsd->ErrorCode = HAL_SD_ERROR_ADDR_OUT_OF_RANGE; + return HAL_ERROR; + } + + /* Initialize data control register */ + hsd->Instance->DCTRL = 0; + + hsd->ErrorCode = HAL_SD_ERROR_NONE; + hsd->State = HAL_SD_STATE_BUSY; + + if(hsd->SdCard.CardType != CARD_SDHC_SDXC) + { + BlockAdd *= 512; + } + + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; + config.DPSM = SDMMC_DPSM_DISABLE; + SDMMC_ConfigData(hsd->Instance, &config); + + hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; + +// /* Set Block Size for Card */ +// errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); +// if(errorstate != HAL_SD_ERROR_NONE) +// { +// hsd->State = HAL_SD_STATE_READY; +// hsd->ErrorCode |= errorstate; +// return HAL_ERROR; +// } + + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); + + hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_DOUBLE_BUFF0; + + __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAEND | SDMMC_IT_IDMABTC)); + + /* Read Blocks in DMA mode */ + hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); + + /* Read Multi Block command */ + errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, BlockAdd); + if(errorstate != HAL_SD_ERROR_NONE) + { + hsd->State = HAL_SD_STATE_READY; + hsd->ErrorCode |= errorstate; + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } + +} + +/** + * @brief Write block(s) to a specified address in a card. The transfered Data are stored in Buffer0 and Buffer1. + * Buffer0, Buffer1 and BufferSize need to be configured by function HAL_SDEx_ConfigDMAMultiBuffer before call this function. + * @param hsd: SD handle + * @param BlockAdd: Block Address from where data is to be read + * @param NumberOfBlocks: Total number of blocks to read + * @retval HAL status +*/ +HAL_StatusTypeDef HAL_SDEx_WriteBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks) +{ + SDMMC_DataInitTypeDef config; + uint32_t errorstate = HAL_SD_ERROR_NONE; + + if(hsd->State == HAL_SD_STATE_READY) + { + if((BlockAdd + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) + { + hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; + return HAL_ERROR; + } + + if ((hsd->Instance->IDMABASE0 == 0) || (hsd->Instance->IDMABASE1 == 0) || (hsd->Instance->IDMABSIZE == 0)) + { + hsd->ErrorCode = HAL_SD_ERROR_ADDR_OUT_OF_RANGE; + return HAL_ERROR; + } + + /* Initialize data control register */ + hsd->Instance->DCTRL = 0; + + hsd->ErrorCode = HAL_SD_ERROR_NONE; + + hsd->State = HAL_SD_STATE_BUSY; + + if(hsd->SdCard.CardType != CARD_SDHC_SDXC) + { + BlockAdd *= 512; + } + + /* Configure the SD DPSM (Data Path State Machine) */ + config.DataTimeOut = SDMMC_DATATIMEOUT; + config.DataLength = BLOCKSIZE * NumberOfBlocks; + config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B; + config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD; + config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK; + config.DPSM = SDMMC_DPSM_DISABLE; + SDMMC_ConfigData(hsd->Instance, &config); + +// /* Set Block Size for Card */ +// errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); +// if(errorstate != HAL_SD_ERROR_NONE) +// { +// hsd->State = HAL_SD_STATE_READY; +// hsd->ErrorCode |= errorstate; +// return HAL_ERROR; +// } + + __SDMMC_CMDTRANS_ENABLE( hsd->Instance); + + hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_DOUBLE_BUFF0; + + __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND | SDMMC_IT_IDMABTC)); + + /* Write Blocks in DMA mode */ + hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); + + /* Write Multi Block command */ + errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, BlockAdd); + if(errorstate != HAL_SD_ERROR_NONE) + { + hsd->State = HAL_SD_STATE_READY; + hsd->ErrorCode |= errorstate; + return HAL_ERROR; + } + + return HAL_OK; + } + else + { + return HAL_BUSY; + } +} + + +/** + * @brief Change the DMA Buffer0 or Buffer1 address on the fly. + * @param hsd: pointer to a SD_HandleTypeDef structure. + * @param Buffer: the buffer to be changed, This parameter can be one of + * the following values: SD_DMA_BUFFER0 or SD_DMA_BUFFER1 + * @param pDataBuffer: The new address + * @note The BUFFER0 address can be changed only when the current transfer use + * BUFFER1 and the BUFFER1 address can be changed only when the current + * transfer use BUFFER0. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SDEx_ChangeDMABuffer(SD_HandleTypeDef *hsd, HAL_SDEx_DMABuffer_MemoryTypeDef Buffer, uint32_t *pDataBuffer) +{ + if(Buffer == SD_DMA_BUFFER0) + { + /* change the buffer0 address */ + hsd->Instance->IDMABASE0 = (uint32_t)pDataBuffer; + } + else + { + /* change the memory1 address */ + hsd->Instance->IDMABASE1 = (uint32_t)pDataBuffer; + } + + return HAL_OK; +} + +/** + * @brief Read DMA Buffer 0 Transfer completed callbacks + * @param hsd: SD handle + * @retval None + */ +__weak void HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SDEx_Read_DMADoubleBuffer0CpltCallback can be implemented in the user file + */ +} + +/** + * @brief Read DMA Buffer 1 Transfer completed callbacks + * @param hsd: SD handle + * @retval None + */ +__weak void HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SDEx_Read_DMADoubleBuffer1CpltCallback can be implemented in the user file + */ +} + +/** + * @brief Write DMA Buffer 0 Transfer completed callbacks + * @param hsd: SD handle + * @retval None + */ +__weak void HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SDEx_Write_DMADoubleBuffer0CpltCallback can be implemented in the user file + */ +} + +/** + * @brief Write DMA Buffer 1 Transfer completed callbacks + * @param hsd: SD handle + * @retval None + */ +__weak void HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsd); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SDEx_Write_DMADoubleBuffer0CpltCallback can be implemented in the user file + */ +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_SD_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.h new file mode 100644 index 0000000000..a187e6143b --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sd_ex.h @@ -0,0 +1,144 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_sd_ex.h + * @author MCD Application Team + * @brief Header file of SD HAL extended module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_HAL_SD_EX_H +#define __STM32L4xx_HAL_SD_EX_H + +#ifdef __cplusplus + extern "C" { +#endif + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal_def.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @addtogroup SDEx + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup SDEx_Exported_Types SDEx Exported Types + * @{ + */ + +/** @defgroup SDEx_Exported_Types_Group1 SD Card Internal DMA Buffer structure + * @{ + */ +typedef enum +{ + SD_DMA_BUFFER0 = 0x00U, /*!< selects SD internal DMA Buffer 0 */ + SD_DMA_BUFFER1 = 0x01U, /*!< selects SD internal DMA Buffer 1 */ + +}HAL_SDEx_DMABuffer_MemoryTypeDef; + + +/** + * @} + */ + +/** + * @} + */ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SDEx_Exported_Functions SDEx Exported Functions + * @{ + */ + +/** @defgroup SDEx_Exported_Functions_Group1 HighSpeed functions + * @{ + */ +uint32_t HAL_SDEx_HighSpeed (SD_HandleTypeDef *hsd); + +void HAL_SDEx_DriveTransceiver_1_8V_Callback(FlagStatus status); + +/** + * @} + */ + +/** @defgroup SDEx_Exported_Functions_Group2 MultiBuffer functions + * @{ + */ +HAL_StatusTypeDef HAL_SDEx_ConfigDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t * pDataBuffer0, uint32_t * pDataBuffer1, uint32_t BufferSize); +HAL_StatusTypeDef HAL_SDEx_ReadBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks); +HAL_StatusTypeDef HAL_SDEx_WriteBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks); +HAL_StatusTypeDef HAL_SDEx_ChangeDMABuffer(SD_HandleTypeDef *hsd, HAL_SDEx_DMABuffer_MemoryTypeDef Buffer, uint32_t *pDataBuffer); + +void HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd); +void HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd); +void HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd); +void HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd); + +/** + * @} + */ + +/** + * @} + */ + +/* Private types -------------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private functions prototypes ----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __STM32L4xx_HAL_SDEx_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.c index 13b4a081dc..af7665a3d5 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_smartcard.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SMARTCARD HAL module driver. * This file provides firmware functions to manage the following * functionalities of the SMARTCARD peripheral: @@ -24,20 +22,20 @@ (#) Initialize the SMARTCARD low level resources by implementing the HAL_SMARTCARD_MspInit() API: (++) Enable the USARTx interface clock. (++) USART pins configuration: - (+++) Enable the clock for the USART GPIOs. - (+++) Configure the USART pins (TX as alternate function pull-up, RX as alternate function Input). + (+++) Enable the clock for the USART GPIOs. + (+++) Configure the USART pins (TX as alternate function pull-up, RX as alternate function Input). (++) NVIC configuration if you need to use interrupt process (HAL_SMARTCARD_Transmit_IT() and HAL_SMARTCARD_Receive_IT() APIs): (+++) Configure the USARTx interrupt priority. (+++) Enable the NVIC USART IRQ handle. (++) DMA Configuration if you need to use DMA process (HAL_SMARTCARD_Transmit_DMA() and HAL_SMARTCARD_Receive_DMA() APIs): - (+++) Declare a DMA handle structure for the Tx/Rx channel. - (+++) Enable the DMAx interface clock. - (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters. - (+++) Configure the DMA Tx/Rx channel. - (+++) Associate the initialized DMA handle to the SMARTCARD DMA Tx/Rx handle. - (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel. + (+++) Declare a DMA handle structure for the Tx/Rx channel. + (+++) Enable the DMAx interface clock. + (+++) Configure the declared DMA handle structure with the required Tx/Rx parameters. + (+++) Configure the DMA Tx/Rx channel. + (+++) Associate the initialized DMA handle to the SMARTCARD DMA Tx/Rx handle. + (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel. (#) Program the Baud Rate, Parity, Mode(Receiver/Transmitter), clock enabling/disabling and accordingly, the clock parameters (parity, phase, last bit), prescaler value, guard time and NACK on transmission @@ -153,17 +151,46 @@ */ #define SMARTCARD_TEACK_REACK_TIMEOUT 1000 /*!< SMARTCARD TX or RX enable acknowledge time-out value */ -#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ - USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8)) /*!< USART CR1 fields of parameters set by SMARTCARD_SetConfig API */ -#define USART_CR2_CLK_FIELDS ((uint32_t)(USART_CR2_CLKEN|USART_CR2_CPOL|USART_CR2_CPHA|USART_CR2_LBCL)) /*!< SMARTCARD clock-related USART CR2 fields of parameters */ -#define USART_CR2_FIELDS ((uint32_t)(USART_CR2_RTOEN|USART_CR2_CLK_FIELDS|USART_CR2_STOP)) /*!< USART CR2 fields of parameters set by SMARTCARD_SetConfig API */ -#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_ONEBIT|USART_CR3_NACK|USART_CR3_SCARCNT)) /*!< USART CR3 fields of parameters set by SMARTCARD_SetConfig API */ +#if defined(USART_CR1_FIFOEN) +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ + USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8| \ + USART_CR1_FIFOEN )) /*!< USART CR1 fields of parameters set by SMARTCARD_SetConfig API */ +#else +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ + USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8)) /*!< USART CR1 fields of parameters set by SMARTCARD_SetConfig API */ +#endif + +#define USART_CR2_CLK_FIELDS ((uint32_t)(USART_CR2_CLKEN | USART_CR2_CPOL | USART_CR2_CPHA | \ + USART_CR2_LBCL)) /*!< SMARTCARD clock-related USART CR2 fields of parameters */ + +#define USART_CR2_FIELDS ((uint32_t)(USART_CR2_RTOEN | USART_CR2_CLK_FIELDS | USART_CR2_STOP)) /*!< USART CR2 fields of parameters set by SMARTCARD_SetConfig API */ + +#if defined(USART_CR1_FIFOEN) +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_ONEBIT | USART_CR3_NACK | USART_CR3_SCARCNT | \ + USART_CR3_TXFTCFG | USART_CR3_RXFTCFG )) /*!< USART CR3 fields of parameters set by SMARTCARD_SetConfig API */ +#else +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_ONEBIT | USART_CR3_NACK | USART_CR3_SCARCNT)) /*!< USART CR3 fields of parameters set by SMARTCARD_SetConfig API */ +#endif + +#define USART_BRR_MIN 0x10U /*!< USART BRR minimum authorized value */ + +#define USART_BRR_MAX 0x0000FFFFU /*!< USART BRR maximum authorized value */ /** * @} */ /* Private macros ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup SMARTCARD_Private_Variables SMARTCARD Private Variables + * @{ + */ +static const uint16_t SMARTCARDPrescTable[12] = {1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256}; +/** + * @} + */ +#endif + /* Private function prototypes -----------------------------------------------*/ /** @addtogroup SMARTCARD_Private_Functions * @{ @@ -182,9 +209,15 @@ static void SMARTCARD_DMATxAbortCallback(DMA_HandleTypeDef *hdma); static void SMARTCARD_DMARxAbortCallback(DMA_HandleTypeDef *hdma); static void SMARTCARD_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); static void SMARTCARD_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); -static HAL_StatusTypeDef SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard); -static HAL_StatusTypeDef SMARTCARD_EndTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard); -static HAL_StatusTypeDef SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard); +static void SMARTCARD_TxISR(SMARTCARD_HandleTypeDef *hsmartcard); +#if defined(USART_CR1_FIFOEN) +static void SMARTCARD_TxISR_FIFOEN(SMARTCARD_HandleTypeDef *hsmartcard); +#endif +static void SMARTCARD_EndTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard); +static void SMARTCARD_RxISR(SMARTCARD_HandleTypeDef *hsmartcard); +#if defined(USART_CR1_FIFOEN) +static void SMARTCARD_RxISR_FIFOEN(SMARTCARD_HandleTypeDef *hsmartcard); +#endif /** * @} */ @@ -244,10 +277,10 @@ static HAL_StatusTypeDef SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcar */ /** - * @brief Initialize the SMARTCARD mode according to the specified + * @brief Initialize the SMARTCARD mode according to the specified * parameters in the SMARTCARD_HandleTypeDef and initialize the associated handle. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval HAL status */ HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsmartcard) @@ -306,9 +339,9 @@ HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsmartcard) } /** - * @brief DeInitialize the SMARTCARD peripheral. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief DeInitialize the SMARTCARD peripheral. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval HAL status */ HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsmartcard) @@ -347,32 +380,32 @@ HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsmartcard) } /** - * @brief Initialize the SMARTCARD MSP. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Initialize the SMARTCARD MSP. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ -__weak void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsmartcard) + __weak void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsmartcard) { /* Prevent unused argument(s) compilation warning */ UNUSED(hsmartcard); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMARTCARD_MspInit can be implemented in the user file */ } /** - * @brief DeInitialize the SMARTCARD MSP. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief DeInitialize the SMARTCARD MSP. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ -__weak void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsmartcard) + __weak void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsmartcard) { /* Prevent unused argument(s) compilation warning */ UNUSED(hsmartcard); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMARTCARD_MspDeInit can be implemented in the user file */ @@ -461,9 +494,13 @@ __weak void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsmartcard) */ /** - * @brief Send an amount of data in blocking mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Send an amount of data in blocking mode. + * @note When FIFO mode is enabled, writing a data in the TDR register adds one + * data to the TXFIFO. Write operations to the TDR register are performed + * when TXFNF flag is set. From hardware perspective, TXFNF flag and + * TXE are mapped on the same bit-field. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be sent. * @param Timeout Timeout duration. @@ -488,7 +525,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsmartcard, ui /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - + /* Disable the Peripheral first to update mode for TX master */ CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_UE); @@ -542,9 +579,13 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsmartcard, ui } /** - * @brief Receive an amount of data in blocking mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Receive an amount of data in blocking mode. + * @note When FIFO mode is enabled, the RXFNE flag is set as long as the RXFIFO + * is not empty. Read operations from the RDR register are performed when + * RXFNE flag is set. From hardware perspective, RXFNE flag and + * RXNE are mapped on the same bit-field. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be received. * @param Timeout Timeout duration. @@ -601,9 +642,16 @@ HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsmartcard, uin } /** - * @brief Send an amount of data in interrupt mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Send an amount of data in interrupt mode. + * @note When FIFO mode is disabled, USART interrupt is generated whenever + * USART_TDR register is empty, i.e one interrupt per data to transmit. + * @note When FIFO mode is enabled, USART interrupt is generated whenever + * TXFIFO threshold reached. In that case the interrupt rate depends on + * TXFIFO threshold configuration. + * @note This function sets the hsmartcard->TxIsr function pointer according to + * the FIFO mode (data transmission processing depends on FIFO mode). + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be sent. * @retval HAL status @@ -617,20 +665,21 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard, { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(hsmartcard); - + hsmartcard->ErrorCode = HAL_SMARTCARD_ERROR_NONE; hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY_TX; - - hsmartcard->pTxBuffPtr = pData; - hsmartcard->TxXferSize = Size; + + hsmartcard->pTxBuffPtr = pData; + hsmartcard->TxXferSize = Size; hsmartcard->TxXferCount = Size; - + hsmartcard->TxISR = NULL; + /* Disable the Peripheral first to update mode for TX master */ CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_UE); - + /* Disable Rx, enable Tx */ CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_RE); SET_BIT(hsmartcard->Instance->RQR, SMARTCARD_RXDATA_FLUSH_REQUEST); @@ -638,16 +687,43 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard, /* Enable the Peripheral */ SET_BIT(hsmartcard->Instance->CR1, USART_CR1_UE); - - /* Process Unlocked */ - __HAL_UNLOCK(hsmartcard); - - /* Enable the SMARTCARD Error Interrupt: (Frame error) */ - SET_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); - - /* Enable the SMARTCARD Transmit Data Register Empty Interrupt */ - SET_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE); - + +#if defined(USART_CR1_FIFOEN) + /* Configure Tx interrupt processing */ + if (hsmartcard->FifoMode == SMARTCARD_FIFOMODE_ENABLE) + { + /* Set the Tx ISR function pointer */ + hsmartcard->TxISR = SMARTCARD_TxISR_FIFOEN; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + /* Enable the SMARTCARD Error Interrupt: (Frame error) */ + SET_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); + + /* Enable the TX FIFO threshold interrupt */ + SET_BIT(hsmartcard->Instance->CR3, USART_CR3_TXFTIE); + } + else +#endif + { + /* Set the Tx ISR function pointer */ + hsmartcard->TxISR = SMARTCARD_TxISR; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + /* Enable the SMARTCARD Error Interrupt: (Frame error) */ + SET_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); + + /* Enable the SMARTCARD Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE); +#endif + } + return HAL_OK; } else @@ -657,9 +733,16 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard, } /** - * @brief Receive an amount of data in interrupt mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Receive an amount of data in interrupt mode. + * @note When FIFO mode is disabled, USART interrupt is generated whenever + * USART_RDR register can be read, i.e one interrupt per data to receive. + * @note When FIFO mode is enabled, USART interrupt is generated whenever + * RXFIFO threshold reached. In that case the interrupt rate depends on + * RXFIFO threshold configuration. + * @note This function sets the hsmartcard->RxIsr function pointer according to + * the FIFO mode (data reception processing depends on FIFO mode). + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be received. * @retval HAL status @@ -684,12 +767,37 @@ HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard, hsmartcard->RxXferSize = Size; hsmartcard->RxXferCount = Size; - /* Process Unlocked */ - __HAL_UNLOCK(hsmartcard); + /* Configure Rx interrupt processing */ +#if defined(USART_CR1_FIFOEN) + if ((hsmartcard->FifoMode == SMARTCARD_FIFOMODE_ENABLE) && (Size >= hsmartcard->NbRxDataToProcess)) + { + /* Set the Rx ISR function pointer */ + hsmartcard->RxISR = SMARTCARD_RxISR_FIFOEN; - /* Enable the SMARTCARD Parity Error and Data Register not empty Interrupts */ - SET_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE| USART_CR1_RXNEIE); + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + /* Enable the SMARTCART Parity Error interrupt and RX FIFO Threshold interrupt */ + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE); + SET_BIT(hsmartcard->Instance->CR3, USART_CR3_RXFTIE); + } + else +#endif + { + /* Set the Rx ISR function pointer */ + hsmartcard->RxISR = SMARTCARD_RxISR; + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + /* Enable the SMARTCARD Parity Error and Data Register not empty Interrupts */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE| USART_CR1_RXNEIE_RXFNEIE); +#else + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE| USART_CR1_RXNEIE); +#endif + } + /* Enable the SMARTCARD Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); @@ -702,9 +810,9 @@ HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard, } /** - * @brief Send an amount of data in DMA mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Send an amount of data in DMA mode. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be sent. * @retval HAL status @@ -774,9 +882,9 @@ HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsmartcard } /** - * @brief Receive an amount of data in DMA mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Receive an amount of data in DMA mode. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @param pData pointer to data buffer. * @param Size amount of data to be received. * @note The SMARTCARD-associated USART parity is enabled (PCE = 1), @@ -838,7 +946,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsmartcard, /** * @brief Abort ongoing transfers (blocking mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Tx and Rx) @@ -847,12 +955,17 @@ HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsmartcard, * - Set handle State to READY * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. * @retval HAL status -*/ + */ HAL_StatusTypeDef HAL_SMARTCARD_Abort(SMARTCARD_HandleTypeDef *hsmartcard) { - /* Disable RTOIE, EOBIE, TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + /* Disable RTOIE, EOBIE, TXEIE, TCIE, RXNE, PE, RXFT, TXFT and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE)); +#else CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); +#endif /* Disable the SMARTCARD DMA Tx request if enabled */ if (HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAT)) @@ -906,7 +1019,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort(SMARTCARD_HandleTypeDef *hsmartcard) /** * @brief Abort ongoing Transmit transfer (blocking mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Tx) @@ -915,11 +1028,17 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort(SMARTCARD_HandleTypeDef *hsmartcard) * - Set handle State to READY * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. * @retval HAL status -*/ + */ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit(SMARTCARD_HandleTypeDef *hsmartcard) { +#if defined(USART_CR1_FIFOEN) + /* Disable TCIE, TXEIE and TXFTIE interrupts */ + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_TXFTIE); +#else /* Disable TXEIE and TCIE interrupts */ CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Check if a receive process is ongoing or not. If not disable ERR IT */ if(hsmartcard->RxState == HAL_SMARTCARD_STATE_READY) @@ -959,7 +1078,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit(SMARTCARD_HandleTypeDef *hsmartcar /** * @brief Abort ongoing Receive transfer (blocking mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Rx) @@ -968,11 +1087,18 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit(SMARTCARD_HandleTypeDef *hsmartcar * - Set handle State to READY * @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed. * @retval HAL status -*/ + */ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive(SMARTCARD_HandleTypeDef *hsmartcard) { +#if defined(USART_CR1_FIFOEN) + /* Disable RTOIE, EOBIE, RXNE, PE, RXFT, TXFT and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); +#else /* Disable RTOIE, EOBIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); +#endif /* Check if a Transmit process is ongoing or not. If not disable ERR IT */ if(hsmartcard->gState == HAL_SMARTCARD_STATE_READY) @@ -1012,7 +1138,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive(SMARTCARD_HandleTypeDef *hsmartcard /** * @brief Abort ongoing transfers (Interrupt mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Tx and Rx) @@ -1023,14 +1149,20 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive(SMARTCARD_HandleTypeDef *hsmartcard * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be * considered as completed only when user abort complete callback is executed (not when exiting function). * @retval HAL status -*/ + */ HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard) { uint32_t abortcplt = 1; +#if defined(USART_CR1_FIFOEN) + /* Disable RTOIE, EOBIE, TXEIE, TCIE, RXNE, PE, RXFT, TXFT and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE)); +#else /* Disable RTOIE, EOBIE, TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); +#endif /* If DMA Tx and/or DMA Rx Handles are associated to SMARTCARD Handle, DMA Abort complete callbacks should be initialised before any call to DMA Abort functions */ @@ -1062,7 +1194,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard) hsmartcard->hdmarx->XferAbortCallback = NULL; } } - + /* Disable the SMARTCARD DMA Tx request if enabled */ if(HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAT)) { @@ -1118,6 +1250,10 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard) hsmartcard->TxXferCount = 0; hsmartcard->RxXferCount = 0; + /* Clear ISR function pointers */ + hsmartcard->RxISR = NULL; + hsmartcard->TxISR = NULL; + /* Reset errorCode */ hsmartcard->ErrorCode = HAL_SMARTCARD_ERROR_NONE; @@ -1138,7 +1274,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard) /** * @brief Abort ongoing Transmit transfer (Interrupt mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing Tx transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Tx) @@ -1149,11 +1285,17 @@ HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard) * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be * considered as completed only when user abort complete callback is executed (not when exiting function). * @retval HAL status -*/ + */ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard) { +#if defined(USART_CR1_FIFOEN) + /* Disable TCIE, TXEIE and TXFTIE interrupts */ + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_TXFTIE); +#else /* Disable TXEIE and TCIE interrupts */ CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Check if a receive process is ongoing or not. If not disable ERR IT */ if(hsmartcard->RxState == HAL_SMARTCARD_STATE_READY) @@ -1186,6 +1328,9 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmart /* Reset Tx transfer counter */ hsmartcard->TxXferCount = 0; + /* Clear TxISR function pointers */ + hsmartcard->TxISR = NULL; + /* Restore hsmartcard->gState to Ready */ hsmartcard->gState = HAL_SMARTCARD_STATE_READY; @@ -1197,10 +1342,13 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmart { /* Reset Tx transfer counter */ hsmartcard->TxXferCount = 0; - + + /* Clear TxISR function pointers */ + hsmartcard->TxISR = NULL; + /* Clear the Error flags in the ICR register */ __HAL_SMARTCARD_CLEAR_FLAG(hsmartcard, SMARTCARD_CLEAR_FEF); - + /* Restore hsmartcard->gState to Ready */ hsmartcard->gState = HAL_SMARTCARD_STATE_READY; @@ -1214,7 +1362,7 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmart /** * @brief Abort ongoing Receive transfer (Interrupt mode). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @note This procedure could be used for aborting any ongoing Rx transfer started in Interrupt or DMA mode. * This procedure performs following operations : * - Disable SMARTCARD Interrupts (Rx) @@ -1228,28 +1376,35 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmart */ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive_IT(SMARTCARD_HandleTypeDef *hsmartcard) { +#if defined(USART_CR1_FIFOEN) + /* Disable RTOIE, EOBIE, RXNE, PE, RXFT and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); + CLEAR_BIT(hsmartcard->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); +#else /* Disable RTOIE, EOBIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_RTOIE | USART_CR1_EOBIE)); - + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); +#endif + /* Check if a Transmit process is ongoing or not. If not disable ERR IT */ if(hsmartcard->gState == HAL_SMARTCARD_STATE_READY) { /* Disable the SMARTCARD Error Interrupt: (Frame error) */ CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); } - + /* Disable the SMARTCARD DMA Rx request if enabled */ if (HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_DMAR); - + /* Abort the SMARTCARD DMA Rx channel : use non blocking DMA Abort API (callback) */ if(hsmartcard->hdmarx != NULL) { /* Set the SMARTCARD DMA Abort callback : - will lead to call HAL_SMARTCARD_AbortCpltCallback() at end of DMA abort procedure */ + will lead to call HAL_SMARTCARD_AbortCpltCallback() at end of DMA abort procedure */ hsmartcard->hdmarx->XferAbortCallback = SMARTCARD_DMARxOnlyAbortCallback; - + /* Abort DMA RX */ if(HAL_DMA_Abort_IT(hsmartcard->hdmarx) != HAL_OK) { @@ -1261,13 +1416,16 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive_IT(SMARTCARD_HandleTypeDef *hsmartc { /* Reset Rx transfer counter */ hsmartcard->RxXferCount = 0; - + + /* Clear RxISR function pointer */ + hsmartcard->RxISR = NULL; + /* Clear the Error flags in the ICR register */ __HAL_SMARTCARD_CLEAR_FLAG(hsmartcard, SMARTCARD_CLEAR_OREF | SMARTCARD_CLEAR_NEF | SMARTCARD_CLEAR_PEF | SMARTCARD_CLEAR_FEF | SMARTCARD_CLEAR_RTOF | SMARTCARD_CLEAR_EOBF); - + /* Restore hsmartcard->RxState to Ready */ hsmartcard->RxState = HAL_SMARTCARD_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_SMARTCARD_AbortReceiveCpltCallback(hsmartcard); } @@ -1276,127 +1434,156 @@ HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive_IT(SMARTCARD_HandleTypeDef *hsmartc { /* Reset Rx transfer counter */ hsmartcard->RxXferCount = 0; - + + /* Clear RxISR function pointer */ + hsmartcard->RxISR = NULL; + /* Clear the Error flags in the ICR register */ __HAL_SMARTCARD_CLEAR_FLAG(hsmartcard, SMARTCARD_CLEAR_OREF | SMARTCARD_CLEAR_NEF | SMARTCARD_CLEAR_PEF | SMARTCARD_CLEAR_FEF | SMARTCARD_CLEAR_RTOF | SMARTCARD_CLEAR_EOBF); - + /* Restore hsmartcard->RxState to Ready */ hsmartcard->RxState = HAL_SMARTCARD_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_SMARTCARD_AbortReceiveCpltCallback(hsmartcard); } - + return HAL_OK; } /** * @brief Handle SMARTCARD interrupt requests. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard) { uint32_t isrflags = READ_REG(hsmartcard->Instance->ISR); uint32_t cr1its = READ_REG(hsmartcard->Instance->CR1); - uint32_t cr3its; + uint32_t cr3its = READ_REG(hsmartcard->Instance->CR3); uint32_t errorflags; - + /* If no error occurs */ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF)); if (errorflags == RESET) { /* SMARTCARD in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { - SMARTCARD_Receive_IT(hsmartcard); - /* Clear RXNE interrupt flag done by reading RDR in SMARTCARD_Receive_IT() */ + if (hsmartcard->RxISR != NULL) {hsmartcard->RxISR(hsmartcard);} return; } } - + /* If some errors occur */ - cr3its = READ_REG(hsmartcard->Instance->CR3); - if( (errorflags != RESET) - && ( ((cr3its & USART_CR3_EIE) != RESET) - || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != RESET)) ) +#if defined(USART_CR1_FIFOEN) + if( (errorflags != RESET) + && ( (((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != RESET) + || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != RESET))) ) +#else + if( (errorflags != RESET) + && ( ((cr3its & USART_CR3_EIE) != RESET) + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET)) ) +#endif { /* SMARTCARD parity error interrupt occurred -------------------------------------*/ if(((isrflags & USART_ISR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) { __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_PEF); - + hsmartcard->ErrorCode |= HAL_SMARTCARD_ERROR_PE; } - + /* SMARTCARD frame error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_FEF); - + hsmartcard->ErrorCode |= HAL_SMARTCARD_ERROR_FE; } - + /* SMARTCARD noise error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_NEF); - + hsmartcard->ErrorCode |= HAL_SMARTCARD_ERROR_NE; } - + /* SMARTCARD Over-Run interrupt occurred -----------------------------------------*/ - if(((isrflags & USART_ISR_ORE) != RESET) && - (((cr1its & USART_CR1_RXNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#if defined(USART_CR1_FIFOEN) + if( ((isrflags & USART_ISR_ORE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET) + || ((cr3its & USART_CR3_EIE) != RESET)) ) +#else + if( ((isrflags & USART_ISR_ORE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE) != RESET) + || ((cr3its & USART_CR3_EIE) != RESET)) ) +#endif { __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_OREF); - + hsmartcard->ErrorCode |= HAL_SMARTCARD_ERROR_ORE; } - + /* SMARTCARD receiver timeout interrupt occurred -----------------------------------------*/ if(((isrflags & USART_ISR_RTOF) != RESET) && ((cr1its & USART_CR1_RTOIE) != RESET)) { __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_RTOF); - + hsmartcard->ErrorCode |= HAL_SMARTCARD_ERROR_RTO; } - + /* Call SMARTCARD Error Call back function if need be --------------------------*/ if(hsmartcard->ErrorCode != HAL_SMARTCARD_ERROR_NONE) { /* SMARTCARD in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET) ) +#endif { - SMARTCARD_Receive_IT(hsmartcard); + if (hsmartcard->RxISR != NULL) {hsmartcard->RxISR(hsmartcard);} } - + /* If Error is to be considered as blocking : - - Receiver Timeout error in Reception - - Overrun error in Reception - - any error occurs in DMA mode reception + - Receiver Timeout error in Reception + - Overrun error in Reception + - any error occurs in DMA mode reception */ if ( ((hsmartcard->ErrorCode & (HAL_SMARTCARD_ERROR_RTO | HAL_SMARTCARD_ERROR_ORE)) != RESET) || (HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAR))) { /* Blocking error : transfer is aborted - Set the SMARTCARD state ready to be able to start again the process, - Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ + Set the SMARTCARD state ready to be able to start again the process, + Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ SMARTCARD_EndRxTransfer(hsmartcard); - + /* Disable the SMARTCARD DMA Rx request if enabled */ if (HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_DMAR); - + /* Abort the SMARTCARD DMA Rx channel */ if(hsmartcard->hdmarx != NULL) { /* Set the SMARTCARD DMA Abort callback : - will lead to call HAL_SMARTCARD_ErrorCallback() at end of DMA abort procedure */ + will lead to call HAL_SMARTCARD_ErrorCallback() at end of DMA abort procedure */ hsmartcard->hdmarx->XferAbortCallback = SMARTCARD_DMAAbortOnError; - + /* Abort DMA RX */ if(HAL_DMA_Abort_IT(hsmartcard->hdmarx) != HAL_OK) { @@ -1417,27 +1604,28 @@ void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard) } } /* other error type to be considered as blocking : - - Frame error in Transmission + - Frame error in Transmission */ - else if ((hsmartcard->gState == HAL_SMARTCARD_STATE_BUSY_TX) && ((hsmartcard->ErrorCode & HAL_SMARTCARD_ERROR_FE) != RESET)) + else if ( (hsmartcard->gState == HAL_SMARTCARD_STATE_BUSY_TX) + && ((hsmartcard->ErrorCode & HAL_SMARTCARD_ERROR_FE) != RESET)) { /* Blocking error : transfer is aborted - Set the SMARTCARD state ready to be able to start again the process, - Disable Tx Interrupts, and disable Tx DMA request, if ongoing */ + Set the SMARTCARD state ready to be able to start again the process, + Disable Tx Interrupts, and disable Tx DMA request, if ongoing */ SMARTCARD_EndTxTransfer(hsmartcard); - + /* Disable the SMARTCARD DMA Tx request if enabled */ if (HAL_IS_BIT_SET(hsmartcard->Instance->CR3, USART_CR3_DMAT)) { CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_DMAT); - + /* Abort the SMARTCARD DMA Tx channel */ if(hsmartcard->hdmatx != NULL) { /* Set the SMARTCARD DMA Abort callback : - will lead to call HAL_SMARTCARD_ErrorCallback() at end of DMA abort procedure */ + will lead to call HAL_SMARTCARD_ErrorCallback() at end of DMA abort procedure */ hsmartcard->hdmatx->XferAbortCallback = SMARTCARD_DMAAbortOnError; - + /* Abort DMA TX */ if(HAL_DMA_Abort_IT(hsmartcard->hdmatx) != HAL_OK) { @@ -1460,15 +1648,15 @@ void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard) else { /* Non Blocking error : transfer could go on. - Error is notified to user through user error callback */ + Error is notified to user through user error callback */ HAL_SMARTCARD_ErrorCallback(hsmartcard); hsmartcard->ErrorCode = HAL_SMARTCARD_ERROR_NONE; } } return; - + } /* End if some error occurs */ - + /* SMARTCARD in mode Receiver, end of block interruption ------------------------*/ if(((isrflags & USART_ISR_EOBF) != RESET) && ((cr1its & USART_CR1_EOBIE) != RESET)) { @@ -1476,69 +1664,93 @@ void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard) __HAL_UNLOCK(hsmartcard); HAL_SMARTCARD_RxCpltCallback(hsmartcard); /* Clear EOBF interrupt after HAL_SMARTCARD_RxCpltCallback() call for the End of Block information - * to be available during HAL_SMARTCARD_RxCpltCallback() processing */ + * to be available during HAL_SMARTCARD_RxCpltCallback() processing */ __HAL_SMARTCARD_CLEAR_IT(hsmartcard, SMARTCARD_CLEAR_EOBF); return; } - + /* SMARTCARD in mode Transmitter ------------------------------------------------*/ - if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_TXE_TXFNF) != RESET) + && ( ((cr1its & USART_CR1_TXEIE_TXFNFIE) != RESET) + || ((cr3its & USART_CR3_TXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_TXE) != RESET) + && ((cr1its & USART_CR1_TXEIE) != RESET)) +#endif { - SMARTCARD_Transmit_IT(hsmartcard); + if (hsmartcard->TxISR != NULL) {hsmartcard->TxISR(hsmartcard);} return; } - + /* SMARTCARD in mode Transmitter (transmission end) ------------------------*/ - if((__HAL_SMARTCARD_GET_IT(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication) != RESET) &&(__HAL_SMARTCARD_GET_IT_SOURCE(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication) != RESET)) + if( (__HAL_SMARTCARD_GET_IT(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication) != RESET) + && (__HAL_SMARTCARD_GET_IT_SOURCE(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication) != RESET)) { SMARTCARD_EndTransmit_IT(hsmartcard); return; } + +#if defined(USART_CR1_FIFOEN) + /* SMARTCARD TX Fifo Empty occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_TXFE) != RESET) && ((cr1its & USART_CR1_TXFEIE) != RESET)) + { + HAL_SMARTCARDEx_TxFifoEmptyCallback(hsmartcard); + return; + } + + /* SMARTCARD RX Fifo Full occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_RXFF) != RESET) && ((cr1its & USART_CR1_RXFFIE) != RESET)) + { + HAL_SMARTCARDEx_RxFifoFullCallback(hsmartcard); + return; + } +#endif } /** - * @brief Tx Transfer completed callback. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Tx Transfer completed callback. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ -__weak void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard) + __weak void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard) { /* Prevent unused argument(s) compilation warning */ UNUSED(hsmartcard); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMARTCARD_TxCpltCallback can be implemented in the user file. */ } /** - * @brief Rx Transfer completed callback. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief Rx Transfer completed callback. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ __weak void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard) { /* Prevent unused argument(s) compilation warning */ UNUSED(hsmartcard); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMARTCARD_RxCpltCallback can be implemented in the user file. */ } /** - * @brief SMARTCARD error callback. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @brief SMARTCARD error callback. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ __weak void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsmartcard) { /* Prevent unused argument(s) compilation warning */ UNUSED(hsmartcard); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMARTCARD_ErrorCallback can be implemented in the user file. */ @@ -1547,7 +1759,7 @@ __weak void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsmartcard) /** * @brief SMARTCARD Abort Complete callback. * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @retval None */ __weak void HAL_SMARTCARD_AbortCpltCallback (SMARTCARD_HandleTypeDef *hsmartcard) @@ -1563,7 +1775,7 @@ __weak void HAL_SMARTCARD_AbortCpltCallback (SMARTCARD_HandleTypeDef *hsmartcard /** * @brief SMARTCARD Abort Complete callback. * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @retval None */ __weak void HAL_SMARTCARD_AbortTransmitCpltCallback (SMARTCARD_HandleTypeDef *hsmartcard) @@ -1579,7 +1791,7 @@ __weak void HAL_SMARTCARD_AbortTransmitCpltCallback (SMARTCARD_HandleTypeDef *hs /** * @brief SMARTCARD Abort Receive Complete callback. * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @retval None */ __weak void HAL_SMARTCARD_AbortReceiveCpltCallback (SMARTCARD_HandleTypeDef *hsmartcard) @@ -1597,7 +1809,7 @@ __weak void HAL_SMARTCARD_AbortReceiveCpltCallback (SMARTCARD_HandleTypeDef *hsm */ /** @defgroup SMARTCARD_Exported_Functions_Group4 Peripheral State and Errors functions - * @brief SMARTCARD State and Errors functions + * @brief SMARTCARD State and Errors functions * @verbatim ============================================================================== @@ -1617,8 +1829,8 @@ __weak void HAL_SMARTCARD_AbortReceiveCpltCallback (SMARTCARD_HandleTypeDef *hsm /** * @brief Return the SMARTCARD handle state. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval SMARTCARD handle state */ HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsmartcard) @@ -1627,15 +1839,15 @@ HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsmar uint32_t temp1= 0x00, temp2 = 0x00; temp1 = hsmartcard->gState; temp2 = hsmartcard->RxState; - + return (HAL_SMARTCARD_StateTypeDef)(temp1 | temp2); } /** * @brief Return the SMARTCARD handle error code. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. - * @retval SMARTCARD handle Error Code + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. +* @retval SMARTCARD handle Error Code */ uint32_t HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsmartcard) { @@ -1650,14 +1862,14 @@ uint32_t HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsmartcard) * @} */ -/** @defgroup SMARTCARD_Private_Functions SMARTCARD Private Functions +/** @defgroup SMARTCARD_Private_Functions SMARTCARD Private Functions * @{ */ /** * @brief Configure the SMARTCARD associated USART peripheral. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval HAL status */ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard) @@ -1680,6 +1892,9 @@ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard assert_param(IS_SMARTCARD_NACK(hsmartcard->Init.NACKEnable)); assert_param(IS_SMARTCARD_TIMEOUT(hsmartcard->Init.TimeOutEnable)); assert_param(IS_SMARTCARD_AUTORETRY_COUNT(hsmartcard->Init.AutoRetryCount)); +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_SMARTCARD_CLOCKPRESCALER(hsmartcard->Init.ClockPrescaler)); +#endif /*-------------------------- USART CR1 Configuration -----------------------*/ /* In SmartCard mode, M and PCE are forced to 1 (8 bits + parity). @@ -1687,8 +1902,7 @@ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard * Configure the Parity and Mode: * set PS bit according to hsmartcard->Init.Parity value * set TE and RE bits according to hsmartcard->Init.Mode value */ - tmpreg = (uint32_t) hsmartcard->Init.Parity | hsmartcard->Init.Mode; - tmpreg |= (uint32_t) hsmartcard->Init.WordLength; + tmpreg = (uint32_t) (hsmartcard->Init.Parity | hsmartcard->Init.Mode | hsmartcard->Init.WordLength); MODIFY_REG(hsmartcard->Instance->CR1, USART_CR1_FIELDS, tmpreg); /*-------------------------- USART CR2 Configuration -----------------------*/ @@ -1707,15 +1921,22 @@ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard * to hsmartcard->Init.NACKEnable * - autoretry counter according to hsmartcard->Init.AutoRetryCount */ tmpreg = (uint32_t) hsmartcard->Init.OneBitSampling | hsmartcard->Init.NACKEnable; - tmpreg |= ((uint32_t)hsmartcard->Init.AutoRetryCount << SMARTCARD_CR3_SCARCNT_LSB_POS); - MODIFY_REG(hsmartcard->Instance-> CR3,USART_CR3_FIELDS, tmpreg); + tmpreg |= ((uint32_t)hsmartcard->Init.AutoRetryCount << USART_CR3_SCARCNT_Pos); + MODIFY_REG(hsmartcard->Instance->CR3, USART_CR3_FIELDS, tmpreg); + +#if defined(USART_PRESC_PRESCALER) + /*--------------------- SMARTCARD clock PRESC Configuration ----------------*/ + /* Configure + * - SMARTCARD Clock Prescaler: set PRESCALER according to hsmartcard->Init.ClockPrescaler value */ + MODIFY_REG(hsmartcard->Instance->PRESC, USART_PRESC_PRESCALER, hsmartcard->Init.ClockPrescaler); +#endif /*-------------------------- USART GTPR Configuration ----------------------*/ - tmpreg = (hsmartcard->Init.Prescaler | ((uint32_t)hsmartcard->Init.GuardTime << SMARTCARD_GTPR_GT_LSB_POS)); + tmpreg = (hsmartcard->Init.Prescaler | ((uint32_t)hsmartcard->Init.GuardTime << USART_GTPR_GT_Pos)); MODIFY_REG(hsmartcard->Instance->GTPR, (USART_GTPR_GT|USART_GTPR_PSC), tmpreg); /*-------------------------- USART RTOR Configuration ----------------------*/ - tmpreg = ((uint32_t)hsmartcard->Init.BlockLength << SMARTCARD_RTOR_BLEN_LSB_POS); + tmpreg = ((uint32_t)hsmartcard->Init.BlockLength << USART_RTOR_BLEN_Pos); if (hsmartcard->Init.TimeOutEnable == SMARTCARD_TIMEOUT_ENABLE) { assert_param(IS_SMARTCARD_TIMEOUT_VALUE(hsmartcard->Init.TimeOutValue)); @@ -1725,28 +1946,69 @@ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard /*-------------------------- USART BRR Configuration -----------------------*/ SMARTCARD_GETCLOCKSOURCE(hsmartcard, clocksource); + tmpreg = 0; switch (clocksource) { - case SMARTCARD_CLOCKSOURCE_PCLK1: - hsmartcard->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK1Freq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); - break; - case SMARTCARD_CLOCKSOURCE_PCLK2: - hsmartcard->Instance->BRR = (uint16_t)((HAL_RCC_GetPCLK2Freq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); - break; - case SMARTCARD_CLOCKSOURCE_HSI: - hsmartcard->Instance->BRR = (uint16_t)((HSI_VALUE + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); - break; - case SMARTCARD_CLOCKSOURCE_SYSCLK: - hsmartcard->Instance->BRR = (uint16_t)((HAL_RCC_GetSysClockFreq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); - break; - case SMARTCARD_CLOCKSOURCE_LSE: - hsmartcard->Instance->BRR = (uint16_t)((LSE_VALUE + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); - break; - case SMARTCARD_CLOCKSOURCE_UNDEFINED: - default: - ret = HAL_ERROR; - break; + case SMARTCARD_CLOCKSOURCE_PCLK1: +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)((HAL_RCC_GetPCLK1Freq()/SMARTCARDPrescTable[hsmartcard->Init.ClockPrescaler] + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#else + tmpreg = (uint16_t)((HAL_RCC_GetPCLK1Freq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#endif + break; + case SMARTCARD_CLOCKSOURCE_PCLK2: +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)((HAL_RCC_GetPCLK2Freq()/SMARTCARDPrescTable[hsmartcard->Init.ClockPrescaler] + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#else + tmpreg = (uint16_t)((HAL_RCC_GetPCLK2Freq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#endif + break; + case SMARTCARD_CLOCKSOURCE_HSI: +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)((HSI_VALUE/SMARTCARDPrescTable[hsmartcard->Init.ClockPrescaler] + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#else + tmpreg = (uint16_t)((HSI_VALUE + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#endif + break; + case SMARTCARD_CLOCKSOURCE_SYSCLK: +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)((HAL_RCC_GetSysClockFreq()/SMARTCARDPrescTable[hsmartcard->Init.ClockPrescaler] + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#else + tmpreg = (uint16_t)((HAL_RCC_GetSysClockFreq() + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#endif + break; + case SMARTCARD_CLOCKSOURCE_LSE: +#if defined(USART_PRESC_PRESCALER) + tmpreg = (uint16_t)((LSE_VALUE/SMARTCARDPrescTable[hsmartcard->Init.ClockPrescaler] + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#else + tmpreg = (uint16_t)((LSE_VALUE + (hsmartcard->Init.BaudRate/2)) / hsmartcard->Init.BaudRate); +#endif + break; + case SMARTCARD_CLOCKSOURCE_UNDEFINED: + default: + ret = HAL_ERROR; + break; } + + /* USARTDIV must be greater than or equal to 0d16 */ + if ((tmpreg >= USART_BRR_MIN) && (tmpreg <= USART_BRR_MAX)) + { + hsmartcard->Instance->BRR = tmpreg; + } + else + { + ret = HAL_ERROR; + } + +#if defined(USART_CR1_FIFOEN) + /* Initialize the number of data to process during RX/TX ISR execution */ + hsmartcard->NbTxDataToProcess = 1; + hsmartcard->NbRxDataToProcess = 1; +#endif + + /* Clear ISR function pointers */ + hsmartcard->RxISR = NULL; + hsmartcard->TxISR = NULL; return ret; } @@ -1754,8 +2016,8 @@ static HAL_StatusTypeDef SMARTCARD_SetConfig(SMARTCARD_HandleTypeDef *hsmartcard /** * @brief Configure the SMARTCARD associated USART peripheral advanced features. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval None */ static void SMARTCARD_AdvFeatureConfig(SMARTCARD_HandleTypeDef *hsmartcard) @@ -1816,8 +2078,8 @@ static void SMARTCARD_AdvFeatureConfig(SMARTCARD_HandleTypeDef *hsmartcard) /** * @brief Check the SMARTCARD Idle State. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. * @retval HAL status */ static HAL_StatusTypeDef SMARTCARD_CheckIdleState(SMARTCARD_HandleTypeDef *hsmartcard) @@ -1864,7 +2126,7 @@ static HAL_StatusTypeDef SMARTCARD_CheckIdleState(SMARTCARD_HandleTypeDef *hsmar /** * @brief Handle SMARTCARD Communication Timeout. * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @param Flag Specifies the SMARTCARD flag to check. * @param Status The new Flag status (SET or RESET). * @param Tickstart Tick start value @@ -1882,12 +2144,16 @@ static HAL_StatusTypeDef SMARTCARD_WaitOnFlagUntilTimeout(SMARTCARD_HandleTypeDe if((Timeout == 0) || ((HAL_GetTick()-Tickstart) > Timeout)) { /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE)); +#else CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); +#endif CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); - + hsmartcard->gState = HAL_SMARTCARD_STATE_READY; hsmartcard->RxState = HAL_SMARTCARD_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hsmartcard); return HAL_TIMEOUT; @@ -1901,13 +2167,17 @@ static HAL_StatusTypeDef SMARTCARD_WaitOnFlagUntilTimeout(SMARTCARD_HandleTypeDe /** * @brief End ongoing Tx transfer on SMARTCARD peripheral (following error detection or Transmit completion). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @retval None */ static void SMARTCARD_EndTxTransfer(SMARTCARD_HandleTypeDef *hsmartcard) { /* Disable TXEIE, TCIE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); /* At end of Tx process, restore hsmartcard->gState to Ready */ @@ -1918,13 +2188,17 @@ static void SMARTCARD_EndTxTransfer(SMARTCARD_HandleTypeDef *hsmartcard) /** * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. + * the configuration information for the specified SMARTCARD module. * @retval None */ static void SMARTCARD_EndRxTransfer(SMARTCARD_HandleTypeDef *hsmartcard) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(hsmartcard->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); /* At end of Rx process, restore hsmartcard->RxState to Ready */ @@ -1933,7 +2207,7 @@ static void SMARTCARD_EndRxTransfer(SMARTCARD_HandleTypeDef *hsmartcard) /** - * @brief DMA SMARTCARD transmit process complete callback. + * @brief DMA SMARTCARD transmit process complete callback. * @param hdma Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None @@ -1952,7 +2226,7 @@ static void SMARTCARD_DMATransmitCplt(DMA_HandleTypeDef *hdma) } /** - * @brief DMA SMARTCARD receive process complete callback. + * @brief DMA SMARTCARD receive process complete callback. * @param hdma Pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None @@ -2074,7 +2348,7 @@ static void SMARTCARD_DMATxAbortCallback(DMA_HandleTypeDef *hdma) static void SMARTCARD_DMARxAbortCallback(DMA_HandleTypeDef *hdma) { SMARTCARD_HandleTypeDef* hsmartcard = (SMARTCARD_HandleTypeDef* )(hdma->Parent); - + hsmartcard->hdmarx->XferAbortCallback = NULL; /* Check if an Abort process is still ongoing */ @@ -2085,7 +2359,7 @@ static void SMARTCARD_DMARxAbortCallback(DMA_HandleTypeDef *hdma) return; } } - + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ hsmartcard->TxXferCount = 0; hsmartcard->RxXferCount = 0; @@ -2155,13 +2429,14 @@ static void SMARTCARD_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) /** * @brief Send an amount of data in non-blocking mode. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. - * Function called under interruption only, once + * @note Function called under interruption only, once * interruptions have been enabled by HAL_SMARTCARD_Transmit_IT() - * @retval HAL status + * and when the FIFO mode is disabled. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. + * @retval None */ -static HAL_StatusTypeDef SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard) +static void SMARTCARD_TxISR(SMARTCARD_HandleTypeDef *hsmartcard) { /* Check that a Tx process is ongoing */ if (hsmartcard->gState == HAL_SMARTCARD_STATE_BUSY_TX) @@ -2169,34 +2444,67 @@ static HAL_StatusTypeDef SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartca if(hsmartcard->TxXferCount == 0) { /* Disable the SMARTCARD Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE); +#endif /* Enable the SMARTCARD Transmit Complete Interrupt */ __HAL_SMARTCARD_ENABLE_IT(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication); - - return HAL_OK; } else { hsmartcard->Instance->TDR = (*hsmartcard->pTxBuffPtr++ & (uint8_t)0xFF); hsmartcard->TxXferCount--; - - return HAL_OK; } } - else - { - return HAL_BUSY; - } } +#if defined(USART_CR1_FIFOEN) +/** + * @brief Send an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_SMARTCARD_Transmit_IT() + * and when the FIFO mode is enabled. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. + * @retval None + */ +static void SMARTCARD_TxISR_FIFOEN(SMARTCARD_HandleTypeDef *hsmartcard) +{ + uint8_t nb_tx_data; + + /* Check that a Tx process is ongoing */ + if (hsmartcard->gState == HAL_SMARTCARD_STATE_BUSY_TX) + { + for(nb_tx_data = hsmartcard->NbTxDataToProcess ; nb_tx_data > 0 ; nb_tx_data--) + { + if(hsmartcard->TxXferCount == 0) + { + /* Disable the SMARTCARD Transmit Data Register Empty Interrupt */ + CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); + + /* Enable the SMARTCARD Transmit Complete Interrupt */ + __HAL_SMARTCARD_ENABLE_IT(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication); + } + else if (READ_BIT(hsmartcard->Instance->ISR, USART_ISR_TXE_TXFNF) != RESET) + { + hsmartcard->Instance->TDR = (*hsmartcard->pTxBuffPtr++ & (uint8_t)0xFF); + hsmartcard->TxXferCount--; + } + } + } +} +#endif + /** * @brief Wrap up transmission in non-blocking mode. - * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. - * @retval HAL status + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. + * @retval None */ -static HAL_StatusTypeDef SMARTCARD_EndTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard) +static void SMARTCARD_EndTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard) { /* Disable the SMARTCARD Transmit Complete Interrupt */ __HAL_SMARTCARD_DISABLE_IT(hsmartcard, hsmartcard->AdvancedInit.TxCompletionIndication); @@ -2217,62 +2525,133 @@ static HAL_StatusTypeDef SMARTCARD_EndTransmit_IT(SMARTCARD_HandleTypeDef *hsmar /* Enable the Peripheral */ SET_BIT(hsmartcard->Instance->CR1, USART_CR1_UE); } - + /* Tx process is ended, restore hsmartcard->gState to Ready */ hsmartcard->gState = HAL_SMARTCARD_STATE_READY; - HAL_SMARTCARD_TxCpltCallback(hsmartcard); + /* Clear TxISR function pointer */ + hsmartcard->TxISR = NULL; - return HAL_OK; + HAL_SMARTCARD_TxCpltCallback(hsmartcard); } /** * @brief Receive an amount of data in non-blocking mode. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains - * the configuration information for the specified SMARTCARD module. - * Function called under interruption only, once - * interruptions have been enabled by HAL_SMARTCARD_Receive_IT(). - * @retval HAL status + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_SMARTCARD_Receive_IT() + * and when the FIFO mode is disabled. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. + * @retval None */ -static HAL_StatusTypeDef SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard) +static void SMARTCARD_RxISR(SMARTCARD_HandleTypeDef *hsmartcard) { /* Check that a Rx process is ongoing */ if (hsmartcard->RxState == HAL_SMARTCARD_STATE_BUSY_RX) { *hsmartcard->pRxBuffPtr++ = (uint8_t)(hsmartcard->Instance->RDR & (uint8_t)0xFF); - + if(--hsmartcard->RxXferCount == 0) { +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); +#else CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_RXNEIE); - +#endif + /* Check if a transmit process is ongoing or not. If not disable ERR IT */ if(hsmartcard->gState == HAL_SMARTCARD_STATE_READY) { /* Disable the SMARTCARD Error Interrupt: (Frame error, noise error, overrun error) */ CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); } - + /* Disable the SMARTCARD Parity Error Interrupt */ CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE); - + hsmartcard->RxState = HAL_SMARTCARD_STATE_READY; - + + /* Clear RxISR function pointer */ + hsmartcard->RxISR = NULL; + HAL_SMARTCARD_RxCpltCallback(hsmartcard); - - return HAL_OK; } - - return HAL_OK; } else { /* Clear RXNE interrupt flag */ __HAL_SMARTCARD_SEND_REQ(hsmartcard, SMARTCARD_RXDATA_FLUSH_REQUEST); - - return HAL_BUSY; } } +#if defined(USART_CR1_FIFOEN) +/** + * @brief Receive an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_SMARTCARD_Receive_IT() + * and when the FIFO mode is enabled. + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains + * the configuration information for the specified SMARTCARD module. + * @retval None + */ +static void SMARTCARD_RxISR_FIFOEN(SMARTCARD_HandleTypeDef *hsmartcard) +{ + uint8_t nb_rx_data; + + /* Check that a Rx process is ongoing */ + if (hsmartcard->RxState == HAL_SMARTCARD_STATE_BUSY_RX) + { + for(nb_rx_data = hsmartcard->NbRxDataToProcess ; nb_rx_data > 0 ; nb_rx_data--) + { + *hsmartcard->pRxBuffPtr++ = (uint8_t)(hsmartcard->Instance->RDR & (uint8_t)0xFF); + + if(--hsmartcard->RxXferCount == 0) + { + CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + + /* Check if a transmit process is ongoing or not. If not disable ERR IT */ + if(hsmartcard->gState == HAL_SMARTCARD_STATE_READY) + { + /* Disable the SMARTCARD Error Interrupt: (Frame error, noise error, overrun error) */ + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_EIE); + } + + /* Disable the SMARTCARD Parity Error Interrupt */ + CLEAR_BIT(hsmartcard->Instance->CR1, USART_CR1_PEIE); + + hsmartcard->RxState = HAL_SMARTCARD_STATE_READY; + + /* Clear RxISR function pointer */ + hsmartcard->RxISR = NULL; + + HAL_SMARTCARD_RxCpltCallback(hsmartcard); + } + } + + /* When remaining number of bytes to receive is less than the RX FIFO + threshold, next incoming frames are processed as if FIFO mode was + disabled (i.e. one interrupt per received frame). + */ + if (((hsmartcard->RxXferCount != 0U)) && (hsmartcard->RxXferCount < hsmartcard->NbRxDataToProcess)) + { + /* Disable the UART RXFT interrupt*/ + CLEAR_BIT(hsmartcard->Instance->CR3, USART_CR3_RXFTIE); + + /* Update the RxISR function pointer */ + hsmartcard->RxISR = SMARTCARD_RxISR; + + /* Enable the UART Data Register Not Empty interrupt */ + SET_BIT(hsmartcard->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_SMARTCARD_SEND_REQ(hsmartcard, SMARTCARD_RXDATA_FLUSH_REQUEST); + } +} +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.h index ad6d966b73..b6fe5b0436 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_smartcard.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SMARTCARD HAL module. ****************************************************************************** * @attention @@ -66,7 +64,8 @@ typedef struct { uint32_t BaudRate; /*!< Configures the SmartCard communication baud rate. The baud rate register is computed using the following formula: - Baud Rate Register = ((PCLKx) / ((hsmartcard->Init.BaudRate))) */ + Baud Rate Register = ((usart_ker_ckpres) / ((hsmartcard->Init.BaudRate))) + where usart_ker_ckpres is the USART input clock divided by a prescaler */ uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. This parameter @ref SMARTCARD_Word_Length can only be set to 9 (8 data + 1 parity bits). */ @@ -97,7 +96,9 @@ typedef struct Selecting the single sample method increases the receiver tolerance to clock deviations. This parameter can be a value of @ref SMARTCARD_OneBit_Sampling. */ - uint8_t Prescaler; /*!< Specifies the SmartCard Prescaler. */ + uint8_t Prescaler; /*!< Specifies the SmartCard Prescaler. + This parameter can be any value from 0x01 to 0x1F. Prescaler value is multiplied + by 2 to give the division factor of the source clock frequency */ uint8_t GuardTime; /*!< Specifies the SmartCard Guard Time applied after stop bits. */ @@ -120,6 +121,11 @@ typedef struct disabled. Otherwise, its maximum value is 7 (before signalling an error) */ +#if defined(USART_PRESC_PRESCALER) + uint32_t ClockPrescaler; /*!< Specifies the prescaler value used to divide the USART clock source. + This parameter can be a value of @ref SMARTCARD_ClockPrescaler. */ +#endif + }SMARTCARD_InitTypeDef; /** @@ -235,40 +241,53 @@ typedef enum /** * @brief SMARTCARD handle Structure definition */ -typedef struct +typedef struct __SMARTCARD_HandleTypeDef { - USART_TypeDef *Instance; /*!< USART registers base address */ + USART_TypeDef *Instance; /*!< USART registers base address */ - SMARTCARD_InitTypeDef Init; /*!< SmartCard communication parameters */ + SMARTCARD_InitTypeDef Init; /*!< SmartCard communication parameters */ - SMARTCARD_AdvFeatureInitTypeDef AdvancedInit; /*!< SmartCard advanced features initialization parameters */ + SMARTCARD_AdvFeatureInitTypeDef AdvancedInit; /*!< SmartCard advanced features initialization parameters */ - uint8_t *pTxBuffPtr; /*!< Pointer to SmartCard Tx transfer Buffer */ + uint8_t *pTxBuffPtr; /*!< Pointer to SmartCard Tx transfer Buffer */ - uint16_t TxXferSize; /*!< SmartCard Tx Transfer size */ + uint16_t TxXferSize; /*!< SmartCard Tx Transfer size */ - __IO uint16_t TxXferCount; /*!< SmartCard Tx Transfer Counter */ + __IO uint16_t TxXferCount; /*!< SmartCard Tx Transfer Counter */ - uint8_t *pRxBuffPtr; /*!< Pointer to SmartCard Rx transfer Buffer */ + uint8_t *pRxBuffPtr; /*!< Pointer to SmartCard Rx transfer Buffer */ - uint16_t RxXferSize; /*!< SmartCard Rx Transfer size */ + uint16_t RxXferSize; /*!< SmartCard Rx Transfer size */ - __IO uint16_t RxXferCount; /*!< SmartCard Rx Transfer Counter */ + __IO uint16_t RxXferCount; /*!< SmartCard Rx Transfer Counter */ - DMA_HandleTypeDef *hdmatx; /*!< SmartCard Tx DMA Handle parameters */ +#if defined(USART_CR1_FIFOEN) + uint16_t NbRxDataToProcess; /*!< Number of data to process during RX ISR execution */ - DMA_HandleTypeDef *hdmarx; /*!< SmartCard Rx DMA Handle parameters */ + uint16_t NbTxDataToProcess; /*!< Number of data to process during TX ISR execution */ - HAL_LockTypeDef Lock; /*!< Locking object */ + uint32_t FifoMode; /*!< Specifies if the FIFO mode is being used. + This parameter can be a value of @ref SMARTCARDEx_FIFO_mode. */ +#endif - __IO HAL_SMARTCARD_StateTypeDef gState; /*!< SmartCard state information related to global Handle management - and also related to Tx operations. - This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */ + void (*RxISR)(struct __SMARTCARD_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */ - __IO HAL_SMARTCARD_StateTypeDef RxState; /*!< SmartCard state information related to Rx operations. - This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */ + void (*TxISR)(struct __SMARTCARD_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */ - uint32_t ErrorCode; /*!< SmartCard Error code */ + DMA_HandleTypeDef *hdmatx; /*!< SmartCard Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< SmartCard Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_SMARTCARD_StateTypeDef gState; /*!< SmartCard state information related to global Handle management + and also related to Tx operations. + This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */ + + __IO HAL_SMARTCARD_StateTypeDef RxState; /*!< SmartCard state information related to Rx operations. + This parameter can be a value of @ref HAL_SMARTCARD_StateTypeDef */ + + uint32_t ErrorCode; /*!< SmartCard Error code */ }SMARTCARD_HandleTypeDef; @@ -297,7 +316,7 @@ typedef enum /** @defgroup SMARTCARD_Word_Length SMARTCARD Word Length * @{ */ -#define SMARTCARD_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< SMARTCARD frame length */ +#define SMARTCARD_WORDLENGTH_9B USART_CR1_M0 /*!< SMARTCARD frame length */ /** * @} */ @@ -305,17 +324,17 @@ typedef enum /** @defgroup SMARTCARD_Stop_Bits SMARTCARD Number of Stop Bits * @{ */ -#define SMARTCARD_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0) /*!< SMARTCARD frame with 0.5 stop bit */ -#define SMARTCARD_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1)) /*!< SMARTCARD frame with 1.5 stop bits */ +#define SMARTCARD_STOPBITS_0_5 USART_CR2_STOP_0 /*!< SMARTCARD frame with 0.5 stop bit */ +#define SMARTCARD_STOPBITS_1_5 USART_CR2_STOP /*!< SMARTCARD frame with 1.5 stop bits */ /** * @} - */ - + */ + /** @defgroup SMARTCARD_Parity SMARTCARD Parity * @{ */ -#define SMARTCARD_PARITY_EVEN ((uint32_t)USART_CR1_PCE) /*!< SMARTCARD frame even parity */ -#define SMARTCARD_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) /*!< SMARTCARD frame odd parity */ +#define SMARTCARD_PARITY_EVEN USART_CR1_PCE /*!< SMARTCARD frame even parity */ +#define SMARTCARD_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< SMARTCARD frame odd parity */ /** * @} */ @@ -323,9 +342,9 @@ typedef enum /** @defgroup SMARTCARD_Mode SMARTCARD Transfer Mode * @{ */ -#define SMARTCARD_MODE_RX ((uint32_t)USART_CR1_RE) /*!< SMARTCARD RX mode */ -#define SMARTCARD_MODE_TX ((uint32_t)USART_CR1_TE) /*!< SMARTCARD TX mode */ -#define SMARTCARD_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) /*!< SMARTCARD RX and TX mode */ +#define SMARTCARD_MODE_RX USART_CR1_RE /*!< SMARTCARD RX mode */ +#define SMARTCARD_MODE_TX USART_CR1_TE /*!< SMARTCARD TX mode */ +#define SMARTCARD_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< SMARTCARD RX and TX mode */ /** * @} */ @@ -333,8 +352,8 @@ typedef enum /** @defgroup SMARTCARD_Clock_Polarity SMARTCARD Clock Polarity * @{ */ -#define SMARTCARD_POLARITY_LOW ((uint32_t)0x00000000) /*!< SMARTCARD frame low polarity */ -#define SMARTCARD_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) /*!< SMARTCARD frame high polarity */ +#define SMARTCARD_POLARITY_LOW 0x00000000U /*!< SMARTCARD frame low polarity */ +#define SMARTCARD_POLARITY_HIGH USART_CR2_CPOL /*!< SMARTCARD frame high polarity */ /** * @} */ @@ -342,8 +361,8 @@ typedef enum /** @defgroup SMARTCARD_Clock_Phase SMARTCARD Clock Phase * @{ */ -#define SMARTCARD_PHASE_1EDGE ((uint32_t)0x00000000) /*!< SMARTCARD frame phase on first clock transition */ -#define SMARTCARD_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) /*!< SMARTCARD frame phase on second clock transition */ +#define SMARTCARD_PHASE_1EDGE 0x00000000U /*!< SMARTCARD frame phase on first clock transition */ +#define SMARTCARD_PHASE_2EDGE USART_CR2_CPHA /*!< SMARTCARD frame phase on second clock transition */ /** * @} */ @@ -351,8 +370,8 @@ typedef enum /** @defgroup SMARTCARD_Last_Bit SMARTCARD Last Bit * @{ */ -#define SMARTCARD_LASTBIT_DISABLE ((uint32_t)0x00000000) /*!< SMARTCARD frame last data bit clock pulse not output to SCLK pin */ -#define SMARTCARD_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) /*!< SMARTCARD frame last data bit clock pulse output to SCLK pin */ +#define SMARTCARD_LASTBIT_DISABLE 0x00000000U /*!< SMARTCARD frame last data bit clock pulse not output to SCLK pin */ +#define SMARTCARD_LASTBIT_ENABLE USART_CR2_LBCL /*!< SMARTCARD frame last data bit clock pulse output to SCLK pin */ /** * @} */ @@ -360,8 +379,8 @@ typedef enum /** @defgroup SMARTCARD_OneBit_Sampling SMARTCARD One Bit Sampling Method * @{ */ -#define SMARTCARD_ONE_BIT_SAMPLE_DISABLE ((uint32_t)0x00000000) /*!< SMARTCARD frame one-bit sample disabled */ -#define SMARTCARD_ONE_BIT_SAMPLE_ENABLE ((uint32_t)USART_CR3_ONEBIT) /*!< SMARTCARD frame one-bit sample enabled */ +#define SMARTCARD_ONE_BIT_SAMPLE_DISABLE 0x00000000U /*!< SMARTCARD frame one-bit sample disabled */ +#define SMARTCARD_ONE_BIT_SAMPLE_ENABLE USART_CR3_ONEBIT /*!< SMARTCARD frame one-bit sample enabled */ /** * @} */ @@ -370,8 +389,8 @@ typedef enum /** @defgroup SMARTCARD_NACK_Enable SMARTCARD NACK Enable * @{ */ -#define SMARTCARD_NACK_ENABLE ((uint32_t)USART_CR3_NACK) /*!< SMARTCARD NACK transmission disabled */ -#define SMARTCARD_NACK_DISABLE ((uint32_t)0x00000000) /*!< SMARTCARD NACK transmission enabled */ +#define SMARTCARD_NACK_DISABLE 0x00000000U /*!< SMARTCARD NACK transmission disabled */ +#define SMARTCARD_NACK_ENABLE USART_CR3_NACK /*!< SMARTCARD NACK transmission enabled */ /** * @} */ @@ -379,17 +398,39 @@ typedef enum /** @defgroup SMARTCARD_Timeout_Enable SMARTCARD Timeout Enable * @{ */ -#define SMARTCARD_TIMEOUT_DISABLE ((uint32_t)0x00000000) /*!< SMARTCARD receiver timeout disabled */ -#define SMARTCARD_TIMEOUT_ENABLE ((uint32_t)USART_CR2_RTOEN) /*!< SMARTCARD receiver timeout enabled */ +#define SMARTCARD_TIMEOUT_DISABLE 0x00000000U /*!< SMARTCARD receiver timeout disabled */ +#define SMARTCARD_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< SMARTCARD receiver timeout enabled */ /** * @} */ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup SMARTCARD_ClockPrescaler Clock Prescaler + * @{ + */ +#define SMARTCARD_PRESCALER_DIV1 0x00000000U /*!< fclk_pres = fclk */ +#define SMARTCARD_PRESCALER_DIV2 0x00000001U /*!< fclk_pres = fclk/2 */ +#define SMARTCARD_PRESCALER_DIV4 0x00000002U /*!< fclk_pres = fclk/4 */ +#define SMARTCARD_PRESCALER_DIV6 0x00000003U /*!< fclk_pres = fclk/6 */ +#define SMARTCARD_PRESCALER_DIV8 0x00000004U /*!< fclk_pres = fclk/8 */ +#define SMARTCARD_PRESCALER_DIV10 0x00000005U /*!< fclk_pres = fclk/10 */ +#define SMARTCARD_PRESCALER_DIV12 0x00000006U /*!< fclk_pres = fclk/12 */ +#define SMARTCARD_PRESCALER_DIV16 0x00000007U /*!< fclk_pres = fclk/16 */ +#define SMARTCARD_PRESCALER_DIV32 0x00000008U /*!< fclk_pres = fclk/32 */ +#define SMARTCARD_PRESCALER_DIV64 0x00000009U /*!< fclk_pres = fclk/64 */ +#define SMARTCARD_PRESCALER_DIV128 0x0000000AU /*!< fclk_pres = fclk/128 */ +#define SMARTCARD_PRESCALER_DIV256 0x0000000BU /*!< fclk_pres = fclk/256 */ + +/** + * @} + */ +#endif + /** @defgroup SMARTCARD_Tx_Inv SMARTCARD advanced feature TX pin active level inversion * @{ */ -#define SMARTCARD_ADVFEATURE_TXINV_DISABLE ((uint32_t)0x00000000) /*!< TX pin active level inversion disable */ -#define SMARTCARD_ADVFEATURE_TXINV_ENABLE ((uint32_t)USART_CR2_TXINV) /*!< TX pin active level inversion enable */ +#define SMARTCARD_ADVFEATURE_TXINV_DISABLE 0x00000000U /*!< TX pin active level inversion disable */ +#define SMARTCARD_ADVFEATURE_TXINV_ENABLE USART_CR2_TXINV /*!< TX pin active level inversion enable */ /** * @} */ @@ -397,8 +438,8 @@ typedef enum /** @defgroup SMARTCARD_Rx_Inv SMARTCARD advanced feature RX pin active level inversion * @{ */ -#define SMARTCARD_ADVFEATURE_RXINV_DISABLE ((uint32_t)0x00000000) /*!< RX pin active level inversion disable */ -#define SMARTCARD_ADVFEATURE_RXINV_ENABLE ((uint32_t)USART_CR2_RXINV) /*!< RX pin active level inversion enable */ +#define SMARTCARD_ADVFEATURE_RXINV_DISABLE 0x00000000U /*!< RX pin active level inversion disable */ +#define SMARTCARD_ADVFEATURE_RXINV_ENABLE USART_CR2_RXINV /*!< RX pin active level inversion enable */ /** * @} */ @@ -406,8 +447,8 @@ typedef enum /** @defgroup SMARTCARD_Data_Inv SMARTCARD advanced feature Binary Data inversion * @{ */ -#define SMARTCARD_ADVFEATURE_DATAINV_DISABLE ((uint32_t)0x00000000) /*!< Binary data inversion disable */ -#define SMARTCARD_ADVFEATURE_DATAINV_ENABLE ((uint32_t)USART_CR2_DATAINV) /*!< Binary data inversion enable */ +#define SMARTCARD_ADVFEATURE_DATAINV_DISABLE 0x00000000U /*!< Binary data inversion disable */ +#define SMARTCARD_ADVFEATURE_DATAINV_ENABLE USART_CR2_DATAINV /*!< Binary data inversion enable */ /** * @} */ @@ -415,8 +456,8 @@ typedef enum /** @defgroup SMARTCARD_Rx_Tx_Swap SMARTCARD advanced feature RX TX pins swap * @{ */ -#define SMARTCARD_ADVFEATURE_SWAP_DISABLE ((uint32_t)0x00000000) /*!< TX/RX pins swap disable */ -#define SMARTCARD_ADVFEATURE_SWAP_ENABLE ((uint32_t)USART_CR2_SWAP) /*!< TX/RX pins swap enable */ +#define SMARTCARD_ADVFEATURE_SWAP_DISABLE 0x00000000U /*!< TX/RX pins swap disable */ +#define SMARTCARD_ADVFEATURE_SWAP_ENABLE USART_CR2_SWAP /*!< TX/RX pins swap enable */ /** * @} */ @@ -424,8 +465,8 @@ typedef enum /** @defgroup SMARTCARD_Overrun_Disable SMARTCARD advanced feature Overrun Disable * @{ */ -#define SMARTCARD_ADVFEATURE_OVERRUN_ENABLE ((uint32_t)0x00000000) /*!< RX overrun enable */ -#define SMARTCARD_ADVFEATURE_OVERRUN_DISABLE ((uint32_t)USART_CR3_OVRDIS) /*!< RX overrun disable */ +#define SMARTCARD_ADVFEATURE_OVERRUN_ENABLE 0x00000000U /*!< RX overrun enable */ +#define SMARTCARD_ADVFEATURE_OVERRUN_DISABLE USART_CR3_OVRDIS /*!< RX overrun disable */ /** * @} */ @@ -433,8 +474,8 @@ typedef enum /** @defgroup SMARTCARD_DMA_Disable_on_Rx_Error SMARTCARD advanced feature DMA Disable on Rx Error * @{ */ -#define SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR ((uint32_t)0x00000000) /*!< DMA enable on Reception Error */ -#define SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR ((uint32_t)USART_CR3_DDRE) /*!< DMA disable on Reception Error */ +#define SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR 0x00000000U /*!< DMA enable on Reception Error */ +#define SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR USART_CR3_DDRE /*!< DMA disable on Reception Error */ /** * @} */ @@ -442,8 +483,8 @@ typedef enum /** @defgroup SMARTCARD_MSB_First SMARTCARD advanced feature MSB first * @{ */ -#define SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE ((uint32_t)0x00000000) /*!< Most significant bit sent/received first disable */ -#define SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE ((uint32_t)USART_CR2_MSBFIRST) /*!< Most significant bit sent/received first enable */ +#define SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE 0x00000000U /*!< Most significant bit sent/received first disable */ +#define SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE USART_CR2_MSBFIRST /*!< Most significant bit sent/received first enable */ /** * @} */ @@ -451,32 +492,8 @@ typedef enum /** @defgroup SMARTCARD_Request_Parameters SMARTCARD Request Parameters * @{ */ -#define SMARTCARD_RXDATA_FLUSH_REQUEST ((uint16_t)USART_RQR_RXFRQ) /*!< Receive data flush request */ -#define SMARTCARD_TXDATA_FLUSH_REQUEST ((uint16_t)USART_RQR_TXFRQ) /*!< Transmit data flush request */ -/** - * @} - */ - -/** @defgroup SMARTCARD_CR3_SCARCNT_LSB_POS SMARTCARD auto retry counter LSB position in CR3 register - * @{ - */ -#define SMARTCARD_CR3_SCARCNT_LSB_POS ((uint32_t) 17) /*!< SMARTCARD auto retry counter LSB position in CR3 register */ -/** - * @} - */ - -/** @defgroup SMARTCARD_GTPR_GT_LSB_POS SMARTCARD guard time value LSB position in GTPR register - * @{ - */ -#define SMARTCARD_GTPR_GT_LSB_POS ((uint32_t) 8) /*!< SMARTCARD guard time value LSB position in GTPR register */ -/** - * @} - */ - -/** @defgroup SMARTCARD_RTOR_BLEN_LSB_POS SMARTCARD block length LSB position in RTOR register - * @{ - */ -#define SMARTCARD_RTOR_BLEN_LSB_POS ((uint32_t) 24) /*!< SMARTCARD block length LSB position in RTOR register */ +#define SMARTCARD_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive data flush request */ +#define SMARTCARD_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush request */ /** * @} */ @@ -484,7 +501,7 @@ typedef enum /** @defgroup SMARTCARD_Interruption_Mask SMARTCARD interruptions flags mask * @{ */ -#define SMARTCARD_IT_MASK ((uint16_t)0x001F) /*!< SMARTCARD interruptions flags mask */ +#define SMARTCARD_IT_MASK 0x001FU /*!< SMARTCARD interruptions flags mask */ /** * @} */ @@ -499,7 +516,7 @@ typedef enum */ /** @brief Reset SMARTCARD handle states. - * @param __HANDLE__: SMARTCARD handle. + * @param __HANDLE__ SMARTCARD handle. * @retval None */ #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) do{ \ @@ -508,7 +525,7 @@ typedef enum } while(0) /** @brief Flush the Smartcard Data registers. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) \ @@ -518,8 +535,8 @@ typedef enum } while(0) /** @brief Clear the specified SMARTCARD pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be any combination of the following values: * @arg @ref SMARTCARD_CLEAR_PEF Parity error clear flag * @arg @ref SMARTCARD_CLEAR_FEF Framing error clear flag @@ -527,86 +544,92 @@ typedef enum * @arg @ref SMARTCARD_CLEAR_OREF OverRun error clear flag * @arg @ref SMARTCARD_CLEAR_IDLEF Idle line detected clear flag * @arg @ref SMARTCARD_CLEAR_TCF Transmission complete clear flag - @if STM32L443xx - * @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag (when flag available) - @endif + * @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag * @arg @ref SMARTCARD_CLEAR_RTOF Receiver timeout clear flag * @arg @ref SMARTCARD_CLEAR_EOBF End of block clear flag + * @arg @ref SMARTCARD_CLEAR_TXFECF TXFIFO empty Clear flag * @retval None */ #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) /** @brief Clear the SMARTCARD PE pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_PEF) /** @brief Clear the SMARTCARD FE pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_FEF) /** @brief Clear the SMARTCARD NE pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_NEF) /** @brief Clear the SMARTCARD ORE pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_OREF) /** @brief Clear the SMARTCARD IDLE pending flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_IDLEF) /** @brief Check whether the specified Smartcard flag is set or not. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - @if STM32L443xx * @arg @ref SMARTCARD_FLAG_TCBGT Transmission complete before guard time flag (when flag available) - @endif * @arg @ref SMARTCARD_FLAG_REACK Receive enable acknowledge flag * @arg @ref SMARTCARD_FLAG_TEACK Transmit enable acknowledge flag * @arg @ref SMARTCARD_FLAG_BUSY Busy flag * @arg @ref SMARTCARD_FLAG_EOBF End of block flag * @arg @ref SMARTCARD_FLAG_RTOF Receiver timeout flag * @arg @ref SMARTCARD_FLAG_TXE Transmit data register empty flag + * @arg @ref SMARTCARD_FLAG_TXFNF TXFIFO not full flag * @arg @ref SMARTCARD_FLAG_TC Transmission complete flag * @arg @ref SMARTCARD_FLAG_RXNE Receive data register not empty flag + * @arg @ref SMARTCARD_FLAG_RXFNE RXFIFO not empty flag * @arg @ref SMARTCARD_FLAG_IDLE Idle line detection flag * @arg @ref SMARTCARD_FLAG_ORE Overrun error flag * @arg @ref SMARTCARD_FLAG_NE Noise error flag * @arg @ref SMARTCARD_FLAG_FE Framing error flag * @arg @ref SMARTCARD_FLAG_PE Parity error flag + * @arg @ref SMARTCARD_FLAG_TXFE TXFIFO Empty flag + * @arg @ref SMARTCARD_FLAG_RXFF RXFIFO Full flag + * @arg @ref SMARTCARD_FLAG_RXFT SMARTCARD RXFIFO threshold flag + * @arg @ref SMARTCARD_FLAG_TXFT SMARTCARD TXFIFO threshold flag * @retval The new state of __FLAG__ (TRUE or FALSE). */ #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) - /** @brief Enable the specified SmartCard interrupt. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __INTERRUPT__: specifies the SMARTCARD interrupt to enable. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __INTERRUPT__ specifies the SMARTCARD interrupt to enable. * This parameter can be one of the following values: - * @arg @ref SMARTCARD_IT_EOB End of block interrupt - * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt - * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt - * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt - @if STM32L443xx - * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) - @endif - * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt - * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt - * @arg @ref SMARTCARD_IT_PE Parity error interrupt - * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_EOB End of block interrupt + * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt + * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt + * @arg @ref SMARTCARD_IT_TXFNF TX FIFO not full interruption + * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt + * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) + * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt + * @arg @ref SMARTCARD_IT_RXFNE RXFIFO not empty interruption + * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt + * @arg @ref SMARTCARD_IT_PE Parity error interrupt + * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_RXFF RXFIFO full interruption + * @arg @ref SMARTCARD_IT_TXFE TXFIFO empty interruption + * @arg @ref SMARTCARD_IT_RXFT RXFIFO threshold reached interruption + * @arg @ref SMARTCARD_IT_TXFT TXFIFO threshold reached interruption * @retval None */ #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \ @@ -614,20 +637,24 @@ typedef enum ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & SMARTCARD_IT_MASK)))) /** @brief Disable the specified SmartCard interrupt. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __INTERRUPT__: specifies the SMARTCARD interrupt to disable. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __INTERRUPT__ specifies the SMARTCARD interrupt to disable. * This parameter can be one of the following values: - * @arg @ref SMARTCARD_IT_EOB End of block interrupt - * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt - * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt - * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt - @if STM32L443xx - * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) - @endif - * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt - * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt - * @arg @ref SMARTCARD_IT_PE Parity error interrupt - * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_EOB End of block interrupt + * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt + * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt + * @arg @ref SMARTCARD_IT_TXFNF TX FIFO not full interruption + * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt + * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) + * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt + * @arg @ref SMARTCARD_IT_RXFNE RXFIFO not empty interruption + * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt + * @arg @ref SMARTCARD_IT_PE Parity error interrupt + * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_RXFF RXFIFO full interruption + * @arg @ref SMARTCARD_IT_TXFE TXFIFO empty interruption + * @arg @ref SMARTCARD_IT_RXFT RXFIFO threshold reached interruption + * @arg @ref SMARTCARD_IT_TXFT TXFIFO threshold reached interruption * @retval None */ #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \ @@ -636,51 +663,57 @@ typedef enum /** @brief Check whether the specified SmartCard interrupt has occurred or not. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __IT__: specifies the SMARTCARD interrupt to check. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __INTERRUPT__ specifies the SMARTCARD interrupt to check. * This parameter can be one of the following values: - * @arg @ref SMARTCARD_IT_EOB End of block interrupt - * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt - * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt - * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt - @if STM32L443xx - * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) - @endif - * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt - * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt - * @arg @ref SMARTCARD_IT_ORE Overrun error interrupt - * @arg @ref SMARTCARD_IT_NE Noise error interrupt - * @arg @ref SMARTCARD_IT_FE Framing error interrupt - * @arg @ref SMARTCARD_IT_PE Parity error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref SMARTCARD_IT_EOB End of block interrupt + * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt + * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt + * @arg @ref SMARTCARD_IT_TXFNF TX FIFO not full interruption + * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt + * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) + * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt + * @arg @ref SMARTCARD_IT_RXFNE RXFIFO not empty interruption + * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt + * @arg @ref SMARTCARD_IT_PE Parity error interrupt + * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_RXFF RXFIFO full interruption + * @arg @ref SMARTCARD_IT_TXFE TXFIFO empty interruption + * @arg @ref SMARTCARD_IT_RXFT RXFIFO threshold reached interruption + * @arg @ref SMARTCARD_IT_TXFT TXFIFO threshold reached interruption + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_SMARTCARD_GET_IT(__HANDLE__, __IT__) ((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__IT__)>> 0x08))) +#define __HAL_SMARTCARD_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (0x01U << ((__INTERRUPT__)>> 0x08U))) != RESET) ? SET : RESET) /** @brief Check whether the specified SmartCard interrupt source is enabled or not. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __IT__: specifies the SMARTCARD interrupt source to check. + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __INTERRUPT__ specifies the SMARTCARD interrupt source to check. * This parameter can be one of the following values: - * @arg @ref SMARTCARD_IT_EOB End of block interrupt - * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt - * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt - * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt - @if STM32L443xx - * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) - @endif - * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt - * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt - * @arg @ref SMARTCARD_IT_ERR Framing, overrun or noise error interrupt - * @arg @ref SMARTCARD_IT_PE Parity error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref SMARTCARD_IT_EOB End of block interrupt + * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt + * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt + * @arg @ref SMARTCARD_IT_TXFNF TX FIFO not full interruption + * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt + * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time interrupt (when interruption available) + * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt + * @arg @ref SMARTCARD_IT_RXFNE RXFIFO not empty interruption + * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt + * @arg @ref SMARTCARD_IT_PE Parity error interrupt + * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) + * @arg @ref SMARTCARD_IT_RXFF RXFIFO full interruption + * @arg @ref SMARTCARD_IT_TXFE TXFIFO empty interruption + * @arg @ref SMARTCARD_IT_RXFT RXFIFO threshold reached interruption + * @arg @ref SMARTCARD_IT_TXFT TXFIFO threshold reached interruption + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __IT__) ((((((uint8_t)(__IT__)) >> 5U) == 1)? (__HANDLE__)->Instance->CR1 : \ - (((((uint8_t)(__IT__)) >> 5U) == 2)? (__HANDLE__)->Instance->CR2 : \ - (__HANDLE__)->Instance->CR3)) & ((uint32_t)1 << (((uint16_t)(__IT__)) & SMARTCARD_IT_MASK))) +#define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U)? (__HANDLE__)->Instance->CR1 : \ + (((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U)? (__HANDLE__)->Instance->CR2 : \ + (__HANDLE__)->Instance->CR3)) & (0x01U << (((uint16_t)(__INTERRUPT__)) & SMARTCARD_IT_MASK))) != RESET) ? SET : RESET) /** @brief Clear the specified SMARTCARD ISR flag, in setting the proper ICR register flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __IT_CLEAR__: specifies the interrupt clear register flag that needs to be set + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set * to clear the corresponding interrupt. * This parameter can be one of the following values: * @arg @ref SMARTCARD_CLEAR_PEF Parity error clear flag @@ -688,19 +721,18 @@ typedef enum * @arg @ref SMARTCARD_CLEAR_NEF Noise detected clear flag * @arg @ref SMARTCARD_CLEAR_OREF OverRun error clear flag * @arg @ref SMARTCARD_CLEAR_IDLEF Idle line detection clear flag + * @arg @ref SMARTCARD_CLEAR_TXFECF TXFIFO empty Clear Flag * @arg @ref SMARTCARD_CLEAR_TCF Transmission complete clear flag - @if STM32L443xx * @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag (when flag available) - @endif * @arg @ref SMARTCARD_CLEAR_RTOF Receiver timeout clear flag * @arg @ref SMARTCARD_CLEAR_EOBF End of block clear flag * @retval None */ -#define __HAL_SMARTCARD_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__)) +#define __HAL_SMARTCARD_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR |= (uint32_t)(__IT_CLEAR__)) /** @brief Set a specific SMARTCARD request flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. - * @param __REQ__: specifies the request flag to set + * @param __HANDLE__ specifies the SMARTCARD Handle. + * @param __REQ__ specifies the request flag to set * This parameter can be one of the following values: * @arg @ref SMARTCARD_RXDATA_FLUSH_REQUEST Receive data flush Request * @arg @ref SMARTCARD_TXDATA_FLUSH_REQUEST Transmit data flush Request @@ -710,25 +742,25 @@ typedef enum #define __HAL_SMARTCARD_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__)) /** @brief Enable the SMARTCARD one bit sample method. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) /** @brief Disable the SMARTCARD one bit sample method. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT)) /** @brief Enable the USART associated to the SMARTCARD Handle. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) /** @brief Disable the USART associated to the SMARTCARD Handle - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @retval None */ #define __HAL_SMARTCARD_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) @@ -745,42 +777,42 @@ typedef enum /** @brief Check the Baud rate range. * @note The maximum Baud Rate is derived from the maximum clock on L4 (80 MHz) * divided by the oversampling used on the SMARTCARD (i.e. 16). - * @param __BAUDRATE__: Baud rate set by the configuration function. + * @param __BAUDRATE__ Baud rate set by the configuration function. * @retval Test result (TRUE or FALSE) */ #define IS_SMARTCARD_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 5000001) /** @brief Check the block length range. * @note The maximum SMARTCARD block length is 0xFF. - * @param __LENGTH__: block length. + * @param __LENGTH__ block length. * @retval Test result (TRUE or FALSE) */ -#define IS_SMARTCARD_BLOCKLENGTH(__LENGTH__) ((__LENGTH__) <= 0xFF) +#define IS_SMARTCARD_BLOCKLENGTH(__LENGTH__) ((__LENGTH__) <= 0xFFU) /** @brief Check the receiver timeout value. * @note The maximum SMARTCARD receiver timeout value is 0xFFFFFF. - * @param __TIMEOUTVALUE__: receiver timeout value. + * @param __TIMEOUTVALUE__ receiver timeout value. * @retval Test result (TRUE or FALSE) */ -#define IS_SMARTCARD_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFF) +#define IS_SMARTCARD_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU) /** @brief Check the SMARTCARD autoretry counter value. * @note The maximum number of retransmissions is 0x7. - * @param __COUNT__: number of retransmissions. + * @param __COUNT__ number of retransmissions. * @retval Test result (TRUE or FALSE) */ -#define IS_SMARTCARD_AUTORETRY_COUNT(__COUNT__) ((__COUNT__) <= 0x7) +#define IS_SMARTCARD_AUTORETRY_COUNT(__COUNT__) ((__COUNT__) <= 0x7U) /** * @brief Ensure that SMARTCARD frame length is valid. - * @param __LENGTH__: SMARTCARD frame length. + * @param __LENGTH__ SMARTCARD frame length. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) */ #define IS_SMARTCARD_WORD_LENGTH(__LENGTH__) ((__LENGTH__) == SMARTCARD_WORDLENGTH_9B) /** * @brief Ensure that SMARTCARD frame number of stop bits is valid. - * @param __STOPBITS__: SMARTCARD frame number of stop bits. + * @param __STOPBITS__ SMARTCARD frame number of stop bits. * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) */ #define IS_SMARTCARD_STOPBITS(__STOPBITS__) (((__STOPBITS__) == SMARTCARD_STOPBITS_0_5) ||\ @@ -788,7 +820,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame parity is valid. - * @param __PARITY__: SMARTCARD frame parity. + * @param __PARITY__ SMARTCARD frame parity. * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) */ #define IS_SMARTCARD_PARITY(__PARITY__) (((__PARITY__) == SMARTCARD_PARITY_EVEN) || \ @@ -796,28 +828,28 @@ typedef enum /** * @brief Ensure that SMARTCARD communication mode is valid. - * @param __MODE__: SMARTCARD communication mode. + * @param __MODE__ SMARTCARD communication mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ -#define IS_SMARTCARD_MODE(__MODE__) ((((__MODE__) & (uint16_t)0xFFF3) == 0x00) && ((__MODE__) != (uint16_t)0x00)) +#define IS_SMARTCARD_MODE(__MODE__) ((((__MODE__) & 0xFFF3U) == 0x00U) && ((__MODE__) != 0x00U)) /** * @brief Ensure that SMARTCARD frame polarity is valid. - * @param __CPOL__: SMARTCARD frame polarity. + * @param __CPOL__ SMARTCARD frame polarity. * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid) */ #define IS_SMARTCARD_POLARITY(__CPOL__) (((__CPOL__) == SMARTCARD_POLARITY_LOW) || ((__CPOL__) == SMARTCARD_POLARITY_HIGH)) /** * @brief Ensure that SMARTCARD frame phase is valid. - * @param __CPHA__: SMARTCARD frame phase. + * @param __CPHA__ SMARTCARD frame phase. * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid) */ #define IS_SMARTCARD_PHASE(__CPHA__) (((__CPHA__) == SMARTCARD_PHASE_1EDGE) || ((__CPHA__) == SMARTCARD_PHASE_2EDGE)) /** * @brief Ensure that SMARTCARD frame last bit clock pulse setting is valid. - * @param __LASTBIT__: SMARTCARD frame last bit clock pulse setting. + * @param __LASTBIT__ SMARTCARD frame last bit clock pulse setting. * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid) */ #define IS_SMARTCARD_LASTBIT(__LASTBIT__) (((__LASTBIT__) == SMARTCARD_LASTBIT_DISABLE) || \ @@ -825,7 +857,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame sampling is valid. - * @param __ONEBIT__: SMARTCARD frame sampling. + * @param __ONEBIT__ SMARTCARD frame sampling. * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid) */ #define IS_SMARTCARD_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == SMARTCARD_ONE_BIT_SAMPLE_DISABLE) || \ @@ -833,7 +865,7 @@ typedef enum /** * @brief Ensure that SMARTCARD NACK transmission setting is valid. - * @param __NACK__: SMARTCARD NACK transmission setting. + * @param __NACK__ SMARTCARD NACK transmission setting. * @retval SET (__NACK__ is valid) or RESET (__NACK__ is invalid) */ #define IS_SMARTCARD_NACK(__NACK__) (((__NACK__) == SMARTCARD_NACK_ENABLE) || \ @@ -841,15 +873,65 @@ typedef enum /** * @brief Ensure that SMARTCARD receiver timeout setting is valid. - * @param __TIMEOUT__: SMARTCARD receiver timeout setting. + * @param __TIMEOUT__ SMARTCARD receiver timeout setting. * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid) */ #define IS_SMARTCARD_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == SMARTCARD_TIMEOUT_DISABLE) || \ ((__TIMEOUT__) == SMARTCARD_TIMEOUT_ENABLE)) +/** + * @brief Ensure that SMARTCARD clock Prescaler is valid. + * @param __CLOCKPRESCALER__ SMARTCARD clock Prescaler value. + * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid) + */ +#define IS_SMARTCARD_CLOCKPRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV1) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV2) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV4) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV6) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV8) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV10) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV12) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV16) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV32) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV64) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV128) || \ + ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV256)) + +/** + * @brief Ensure that SMARTCARD FIFO mode is valid. + * @param __STATE__ SMARTCARD FIFO mode. + * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) + */ +#define IS_SMARTCARD_FIFOMODE_STATE(__STATE__) (((__STATE__) == SMARTCARD_FIFOMODE_DISABLE ) || \ + ((__STATE__) == SMARTCARD_FIFOMODE_ENABLE)) + +/** + * @brief Ensure that SMARTCARD TXFIFO threshold level is valid. + * @param __THRESHOLD__ SMARTCARD TXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_SMARTCARD_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_8_8)) + +/** + * @brief Ensure that SMARTCARD RXFIFO threshold level is valid. + * @param __THRESHOLD__ SMARTCARD RXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_SMARTCARD_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_8_8)) + /** * @brief Ensure that SMARTCARD advanced features initialization is valid. - * @param __INIT__: SMARTCARD advanced features initialization. + * @param __INIT__ SMARTCARD advanced features initialization. * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_INIT(__INIT__) ((__INIT__) <= (SMARTCARD_ADVFEATURE_NO_INIT | \ @@ -863,7 +945,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame TX inversion setting is valid. - * @param __TXINV__: SMARTCARD frame TX inversion setting. + * @param __TXINV__ SMARTCARD frame TX inversion setting. * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == SMARTCARD_ADVFEATURE_TXINV_DISABLE) || \ @@ -871,7 +953,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame RX inversion setting is valid. - * @param __RXINV__: SMARTCARD frame RX inversion setting. + * @param __RXINV__ SMARTCARD frame RX inversion setting. * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == SMARTCARD_ADVFEATURE_RXINV_DISABLE) || \ @@ -879,7 +961,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame data inversion setting is valid. - * @param __DATAINV__: SMARTCARD frame data inversion setting. + * @param __DATAINV__ SMARTCARD frame data inversion setting. * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == SMARTCARD_ADVFEATURE_DATAINV_DISABLE) || \ @@ -887,7 +969,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame RX/TX pins swap setting is valid. - * @param __SWAP__: SMARTCARD frame RX/TX pins swap setting. + * @param __SWAP__ SMARTCARD frame RX/TX pins swap setting. * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == SMARTCARD_ADVFEATURE_SWAP_DISABLE) || \ @@ -895,7 +977,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame overrun setting is valid. - * @param __OVERRUN__: SMARTCARD frame overrun setting. + * @param __OVERRUN__ SMARTCARD frame overrun setting. * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid) */ #define IS_SMARTCARD_OVERRUN(__OVERRUN__) (((__OVERRUN__) == SMARTCARD_ADVFEATURE_OVERRUN_ENABLE) || \ @@ -903,7 +985,7 @@ typedef enum /** * @brief Ensure that SMARTCARD DMA enabling or disabling on error setting is valid. - * @param __DMA__: SMARTCARD DMA enabling or disabling on error setting. + * @param __DMA__ SMARTCARD DMA enabling or disabling on error setting. * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_DMAONRXERROR(__DMA__) (((__DMA__) == SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR) || \ @@ -911,7 +993,7 @@ typedef enum /** * @brief Ensure that SMARTCARD frame MSB first setting is valid. - * @param __MSBFIRST__: SMARTCARD frame MSB first setting. + * @param __MSBFIRST__ SMARTCARD frame MSB first setting. * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid) */ #define IS_SMARTCARD_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE) || \ @@ -919,7 +1001,7 @@ typedef enum /** * @brief Ensure that SMARTCARD request parameter is valid. - * @param __PARAM__: SMARTCARD request parameter. + * @param __PARAM__ SMARTCARD request parameter. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) */ #define IS_SMARTCARD_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == SMARTCARD_RXDATA_FLUSH_REQUEST) || \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.c index a73b80ec74..6f17643d67 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_smartcard_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SMARTCARD HAL module driver. * This file provides extended firmware functions to manage the following * functionalities of the SmartCard. @@ -73,13 +71,69 @@ /* Private macros ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ +#if defined(USART_CR1_FIFOEN) +static void SMARTCARDEx_SetNbDataToProcess(SMARTCARD_HandleTypeDef *hsmartcard); +#endif /* Exported functions --------------------------------------------------------*/ /** @defgroup SMARTCARDEx_Exported_Functions SMARTCARD Extended Exported Functions * @{ */ -/** @defgroup SMARTCARDEx_Exported_Functions_Group1 Extended Peripheral Control functions +/** @defgroup SMARTCARDEx_Exported_Functions_Group2 IO operation functions + * @brief Extended SMARTCARD Transmit/Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of FIFO mode related callback functions. + + (#) TX/RX Fifos Callbacks: + (+) HAL_SMARTCARDEx_RxFifoFullCallback() + (+) HAL_SMARTCARDEx_TxFifoEmptyCallback() + +@endverbatim + * @{ + */ + +#if defined(USART_CR1_FIFOEN) +/** + * @brief SMARTCARD RX Fifo full callback. + * @param hsmartcard SMARTCARD handle. + * @retval None + */ +__weak void HAL_SMARTCARDEx_RxFifoFullCallback (SMARTCARD_HandleTypeDef *hsmartcard) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsmartcard); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SMARTCARDEx_RxFifoFullCallback can be implemented in the user file. + */ +} + +/** + * @brief SMARTCARD TX Fifo empty callback. + * @param hsmartcard SMARTCARD handle. + * @retval None + */ +__weak void HAL_SMARTCARDEx_TxFifoEmptyCallback (SMARTCARD_HandleTypeDef *hsmartcard) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hsmartcard); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_SMARTCARDEx_TxFifoEmptyCallback can be implemented in the user file. + */ +} +#endif + +/** + * @} + */ + +/** @defgroup SMARTCARDEx_Exported_Functions_Group3 Extended Peripheral Control functions * @brief Extended control functions * @verbatim @@ -92,6 +146,10 @@ (+) HAL_SMARTCARDEx_TimeOut_Config() API allows to configure the receiver timeout value on the fly (+) HAL_SMARTCARDEx_EnableReceiverTimeOut() API enables the receiver timeout feature (+) HAL_SMARTCARDEx_DisableReceiverTimeOut() API disables the receiver timeout feature + (+) HAL_SMARTCARDEx_EnableFifoMode() API enables the FIFO mode + (+) HAL_SMARTCARDEx_DisableFifoMode() API disables the FIFO mode + (+) HAL_SMARTCARDEx_SetTxFifoThreshold() API sets the TX FIFO threshold + (+) HAL_SMARTCARDEx_SetRxFifoThreshold() API sets the RX FIFO threshold @endverbatim * @{ @@ -99,21 +157,21 @@ /** * @brief Update on the fly the SMARTCARD block length in RTOR register. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains * the configuration information for the specified SMARTCARD module. - * @param BlockLength: SMARTCARD block length (8-bit long at most) + * @param BlockLength SMARTCARD block length (8-bit long at most) * @retval None */ void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength) { - MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_BLEN, ((uint32_t)BlockLength << SMARTCARD_RTOR_BLEN_LSB_POS)); + MODIFY_REG(hsmartcard->Instance->RTOR, USART_RTOR_BLEN, ((uint32_t)BlockLength << USART_RTOR_BLEN_Pos)); } /** * @brief Update on the fly the receiver timeout value in RTOR register. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains * the configuration information for the specified SMARTCARD module. - * @param TimeOutValue: receiver timeout value in number of baud blocks. The timeout + * @param TimeOutValue receiver timeout value in number of baud blocks. The timeout * value must be less or equal to 0x0FFFFFFFF. * @retval None */ @@ -125,7 +183,7 @@ void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_ /** * @brief Enable the SMARTCARD receiver timeout feature. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains * the configuration information for the specified SMARTCARD module. * @retval HAL status */ @@ -157,7 +215,7 @@ HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef /** * @brief Disable the SMARTCARD receiver timeout feature. - * @param hsmartcard: Pointer to a SMARTCARD_HandleTypeDef structure that contains + * @param hsmartcard Pointer to a SMARTCARD_HandleTypeDef structure that contains * the configuration information for the specified SMARTCARD module. * @retval HAL status */ @@ -187,6 +245,184 @@ HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef } } +#if defined(USART_CR1_FIFOEN) +/** + * @brief Enable the FIFO mode. + * @param hsmartcard SMARTCARD handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SMARTCARDEx_EnableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance)); + + /* Process Locked */ + __HAL_LOCK(hsmartcard); + + hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY; + + /* Save actual SMARTCARD configuration */ + tmpcr1 = READ_REG(hsmartcard->Instance->CR1); + + /* Disable SMARTCARD */ + __HAL_SMARTCARD_DISABLE(hsmartcard); + + /* Enable FIFO mode */ + SET_BIT(tmpcr1, USART_CR1_FIFOEN); + hsmartcard->FifoMode = SMARTCARD_FIFOMODE_ENABLE; + + /* Restore SMARTCARD configuration */ + WRITE_REG(hsmartcard->Instance->CR1, tmpcr1); + + /* Determine the number of data to process during RX/TX ISR execution */ + SMARTCARDEx_SetNbDataToProcess(hsmartcard); + + hsmartcard->gState = HAL_SMARTCARD_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + return HAL_OK; +} + +/** + * @brief Disable the FIFO mode. + * @param hsmartcard SMARTCARD handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SMARTCARDEx_DisableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance)); + + /* Process Locked */ + __HAL_LOCK(hsmartcard); + + hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY; + + /* Save actual SMARTCARD configuration */ + tmpcr1 = READ_REG(hsmartcard->Instance->CR1); + + /* Disable SMARTCARD */ + __HAL_SMARTCARD_DISABLE(hsmartcard); + + /* Enable FIFO mode */ + CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN); + hsmartcard->FifoMode = SMARTCARD_FIFOMODE_DISABLE; + + /* Restore SMARTCARD configuration */ + WRITE_REG(hsmartcard->Instance->CR1, tmpcr1); + + hsmartcard->gState = HAL_SMARTCARD_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + return HAL_OK; +} + +/** + * @brief Set the TXFIFO threshold. + * @param hsmartcard SMARTCARD handle. + * @param Threshold TX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_8 + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_4 + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_1_2 + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_3_4 + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_7_8 + * @arg @ref SMARTCARD_TXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SMARTCARDEx_SetTxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance)); + assert_param(IS_SMARTCARD_TXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(hsmartcard); + + hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY; + + /* Save actual SMARTCARD configuration */ + tmpcr1 = READ_REG(hsmartcard->Instance->CR1); + + /* Disable SMARTCARD */ + __HAL_SMARTCARD_DISABLE(hsmartcard); + + /* Update TX threshold configuration */ + MODIFY_REG(hsmartcard->Instance->CR3, USART_CR3_TXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + SMARTCARDEx_SetNbDataToProcess(hsmartcard); + + /* Restore SMARTCARD configuration */ + MODIFY_REG(hsmartcard->Instance->CR1, USART_CR1_UE, tmpcr1); + + hsmartcard->gState = HAL_SMARTCARD_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + return HAL_OK; +} + +/** + * @brief Set the RXFIFO threshold. + * @param hsmartcard SMARTCARD handle. + * @param Threshold RX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_8 + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_4 + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_1_2 + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_3_4 + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_7_8 + * @arg @ref SMARTCARD_RXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_SMARTCARDEx_SetRxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(hsmartcard->Instance)); + assert_param(IS_SMARTCARD_RXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(hsmartcard); + + hsmartcard->gState = HAL_SMARTCARD_STATE_BUSY; + + /* Save actual SMARTCARD configuration */ + tmpcr1 = READ_REG(hsmartcard->Instance->CR1); + + /* Disable SMARTCARD */ + __HAL_SMARTCARD_DISABLE(hsmartcard); + + /* Update RX threshold configuration */ + MODIFY_REG(hsmartcard->Instance->CR3, USART_CR3_RXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + SMARTCARDEx_SetNbDataToProcess(hsmartcard); + + /* Restore SMARTCARD configuration */ + MODIFY_REG(hsmartcard->Instance->CR1, USART_CR1_UE, tmpcr1); + + hsmartcard->gState = HAL_SMARTCARD_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(hsmartcard); + + return HAL_OK; +} +#endif /** * @} */ @@ -195,6 +431,47 @@ HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef * @} */ +/** @defgroup SMARTCARDEx_Private_Functions SMARTCARD Extended private Functions + * @{ + */ + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Calculate the number of data to process in RX/TX ISR. + * @note The RX FIFO depth and the TX FIFO depth is extracted from + * the USART configuration registers. + * @param hsmartcard SMARTCARD handle. + * @retval None + */ +static void SMARTCARDEx_SetNbDataToProcess(SMARTCARD_HandleTypeDef *hsmartcard) +{ + uint8_t rx_fifo_depth; + uint8_t tx_fifo_depth; + uint8_t rx_fifo_threshold; + uint8_t tx_fifo_threshold; + uint8_t numerator[] = {1, 1, 1, 3, 7, 1}; + uint8_t denominator[] = {8, 4, 2, 4, 8, 1}; + + if (hsmartcard->FifoMode == SMARTCARD_FIFOMODE_DISABLE) + { + hsmartcard->NbTxDataToProcess = 1; + hsmartcard->NbRxDataToProcess = 1; + } + else + { + rx_fifo_depth = 8; /* RX Fifo size */ + tx_fifo_depth = 8; /* TX Fifo size */ + rx_fifo_threshold = (uint8_t)(READ_BIT(hsmartcard->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos); + tx_fifo_threshold = (uint8_t)(READ_BIT(hsmartcard->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos); + hsmartcard->NbTxDataToProcess = (uint8_t)(tx_fifo_depth * numerator[tx_fifo_threshold])/denominator[tx_fifo_threshold]; + hsmartcard->NbRxDataToProcess = (uint8_t)(rx_fifo_depth * numerator[rx_fifo_threshold])/denominator[rx_fifo_threshold]; + } +} +#endif +/** + * @} + */ + #endif /* HAL_SMARTCARD_MODULE_ENABLED */ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.h index e2b7cbe68f..e59ba1112c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smartcard_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_smartcard_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SMARTCARD HAL Extended module. ****************************************************************************** * @attention @@ -70,50 +68,93 @@ #define SMARTCARD_TC SMARTCARD_IT_TC /*!< SMARTCARD transmission complete (flag raised when guard time has elapsed) */ /** * @} - */ - + */ + /** @defgroup SMARTCARDEx_Advanced_Features_Initialization_Type SMARTCARD advanced feature initialization type * @{ */ -#define SMARTCARD_ADVFEATURE_NO_INIT ((uint32_t)0x00000000) /*!< No advanced feature initialization */ -#define SMARTCARD_ADVFEATURE_TXINVERT_INIT ((uint32_t)0x00000001) /*!< TX pin active level inversion */ -#define SMARTCARD_ADVFEATURE_RXINVERT_INIT ((uint32_t)0x00000002) /*!< RX pin active level inversion */ -#define SMARTCARD_ADVFEATURE_DATAINVERT_INIT ((uint32_t)0x00000004) /*!< Binary data inversion */ -#define SMARTCARD_ADVFEATURE_SWAP_INIT ((uint32_t)0x00000008) /*!< TX/RX pins swap */ -#define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT ((uint32_t)0x00000010) /*!< RX overrun disable */ -#define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT ((uint32_t)0x00000020) /*!< DMA disable on Reception Error */ -#define SMARTCARD_ADVFEATURE_MSBFIRST_INIT ((uint32_t)0x00000080) /*!< Most significant bit sent/received first */ +#define SMARTCARD_ADVFEATURE_NO_INIT 0x00000000U /*!< No advanced feature initialization */ +#define SMARTCARD_ADVFEATURE_TXINVERT_INIT 0x00000001U /*!< TX pin active level inversion */ +#define SMARTCARD_ADVFEATURE_RXINVERT_INIT 0x00000002U /*!< RX pin active level inversion */ +#define SMARTCARD_ADVFEATURE_DATAINVERT_INIT 0x00000004U /*!< Binary data inversion */ +#define SMARTCARD_ADVFEATURE_SWAP_INIT 0x00000008U /*!< TX/RX pins swap */ +#define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT 0x00000010U /*!< RX overrun disable */ +#define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT 0x00000020U /*!< DMA disable on Reception Error */ +#define SMARTCARD_ADVFEATURE_MSBFIRST_INIT 0x00000080U /*!< Most significant bit sent/received first */ #if defined(USART_TCBGT_SUPPORT) -#define SMARTCARD_ADVFEATURE_TXCOMPLETION ((uint32_t)0x00000100) /*!< TX completion indication before of after guard time */ -#endif /* USART_TCBGT_SUPPORT */ +#define SMARTCARD_ADVFEATURE_TXCOMPLETION 0x00000100U /*!< TX completion indication before of after guard time */ +#endif /* USART_TCBGT_SUPPORT */ /** * @} */ +#if defined(USART_CR1_FIFOEN) +/** @defgroup SMARTCARDEx_TXFIFO_threshold_level SMARTCARDEx TXFIFO threshold level + * @brief SMARTCARD TXFIFO level + * @{ + */ +#define SMARTCARD_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */ +#define SMARTCARD_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */ +#define SMARTCARD_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */ +#define SMARTCARD_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */ +#define SMARTCARD_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */ +#define SMARTCARD_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */ +/** + * @} + */ + +/** @defgroup SMARTCARDEx_RXFIFO_threshold_level SMARTCARDEx RXFIFO threshold level + * @brief SMARTCARD RXFIFO level + * @{ + */ +#define SMARTCARD_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */ +#define SMARTCARD_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */ +#define SMARTCARD_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */ +#define SMARTCARD_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */ +#define SMARTCARD_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */ +#define SMARTCARD_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */ +/** + * @} + */ +#endif - - /** @defgroup SMARTCARDEx_Flags SMARTCARD Flags * Elements values convention: 0xXXXX * - 0xXXXX : Flag mask in the ISR register * @{ */ #if defined(USART_TCBGT_SUPPORT) -#define SMARTCARD_FLAG_TCBGT USART_ISR_TCBGT /*!< SMARTCARD transmission complete before guard time completion */ -#endif /* USART_TCBGT_SUPPORT */ -#define SMARTCARD_FLAG_REACK USART_ISR_REACK /*!< SMARTCARD receive enable acknowledge flag */ -#define SMARTCARD_FLAG_TEACK USART_ISR_TEACK /*!< SMARTCARD transmit enable acknowledge flag */ -#define SMARTCARD_FLAG_BUSY USART_ISR_BUSY /*!< SMARTCARD busy flag */ -#define SMARTCARD_FLAG_EOBF USART_ISR_EOBF /*!< SMARTCARD end of block flag */ -#define SMARTCARD_FLAG_RTOF USART_ISR_RTOF /*!< SMARTCARD receiver timeout flag */ +#define SMARTCARD_FLAG_TCBGT USART_ISR_TCBGT /*!< SMARTCARD transmission complete before guard time completion */ +#endif /* USART_TCBGT_SUPPORT */ +#define SMARTCARD_FLAG_REACK USART_ISR_REACK /*!< SMARTCARD receive enable acknowledge flag */ +#define SMARTCARD_FLAG_TEACK USART_ISR_TEACK /*!< SMARTCARD transmit enable acknowledge flag */ +#define SMARTCARD_FLAG_BUSY USART_ISR_BUSY /*!< SMARTCARD busy flag */ +#define SMARTCARD_FLAG_EOBF USART_ISR_EOBF /*!< SMARTCARD end of block flag */ +#define SMARTCARD_FLAG_RTOF USART_ISR_RTOF /*!< SMARTCARD receiver timeout flag */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_FLAG_TXE USART_ISR_TXE_TXFNF /*!< SMARTCARD transmit data register empty */ +#define SMARTCARD_FLAG_TXFNF USART_ISR_TXE_TXFNF /*!< SMARTCARD TXFIFO not full */ +#else #define SMARTCARD_FLAG_TXE USART_ISR_TXE /*!< SMARTCARD transmit data register empty */ -#define SMARTCARD_FLAG_TC USART_ISR_TC /*!< SMARTCARD transmission complete */ +#endif +#define SMARTCARD_FLAG_TC USART_ISR_TC /*!< SMARTCARD transmission complete */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_FLAG_RXNE USART_ISR_RXNE_RXFNE /*!< SMARTCARD read data register not empty */ +#define SMARTCARD_FLAG_RXFNE USART_ISR_RXNE_RXFNE /*!< SMARTCARD RXFIFO not empty */ +#else #define SMARTCARD_FLAG_RXNE USART_ISR_RXNE /*!< SMARTCARD read data register not empty */ -#define SMARTCARD_FLAG_IDLE USART_ISR_IDLE /*!< SMARTCARD idle line detection */ -#define SMARTCARD_FLAG_ORE USART_ISR_ORE /*!< SMARTCARD overrun error */ -#define SMARTCARD_FLAG_NE USART_ISR_NE /*!< SMARTCARD noise error */ -#define SMARTCARD_FLAG_FE USART_ISR_FE /*!< SMARTCARD frame error */ -#define SMARTCARD_FLAG_PE USART_ISR_PE /*!< SMARTCARD parity error */ +#endif +#define SMARTCARD_FLAG_IDLE USART_ISR_IDLE /*!< SMARTCARD idle line detection */ +#define SMARTCARD_FLAG_ORE USART_ISR_ORE /*!< SMARTCARD overrun error */ +#define SMARTCARD_FLAG_NE USART_ISR_NE /*!< SMARTCARD noise error */ +#define SMARTCARD_FLAG_FE USART_ISR_FE /*!< SMARTCARD frame error */ +#define SMARTCARD_FLAG_PE USART_ISR_PE /*!< SMARTCARD parity error */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_FLAG_TXFE USART_ISR_TXFE /*!< SMARTCARD TXFIFO Empty flag */ +#define SMARTCARD_FLAG_RXFF USART_ISR_RXFF /*!< SMARTCARD RXFIFO Full flag */ +#define SMARTCARD_FLAG_RXFT USART_ISR_RXFT /*!< SMARTCARD RXFIFO threshold flag */ +#define SMARTCARD_FLAG_TXFT USART_ISR_TXFT /*!< SMARTCARD TXFIFO threshold flag */ +#endif /** * @} */ @@ -128,23 +169,35 @@ * - ZZZZZ : Flag position in the ISR register(5 bits) * @{ */ -#define SMARTCARD_IT_PE ((uint16_t)0x0028) /*!< SMARTCARD parity error interruption */ -#define SMARTCARD_IT_TXE ((uint16_t)0x0727) /*!< SMARTCARD transmit data register empty interruption */ -#define SMARTCARD_IT_TC ((uint16_t)0x0626) /*!< SMARTCARD transmission complete interruption */ -#define SMARTCARD_IT_RXNE ((uint16_t)0x0525) /*!< SMARTCARD read data register not empty interruption */ -#define SMARTCARD_IT_IDLE ((uint16_t)0x0424) /*!< SMARTCARD idle line detection interruption */ +#define SMARTCARD_IT_PE 0x0028U /*!< SMARTCARD parity error interruption */ +#define SMARTCARD_IT_TXE 0x0727U /*!< SMARTCARD transmit data register empty interruption */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_IT_TXFNF 0x0727U /*!< SMARTCARD TX FIFO not full interruption */ +#endif +#define SMARTCARD_IT_TC 0x0626U /*!< SMARTCARD transmission complete interruption */ +#define SMARTCARD_IT_RXNE 0x0525U /*!< SMARTCARD read data register not empty interruption */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_IT_RXFNE 0x0525U /*!< SMARTCARD RXFIFO not empty interruption */ +#endif +#define SMARTCARD_IT_IDLE 0x0424U /*!< SMARTCARD idle line detection interruption */ -#define SMARTCARD_IT_ERR ((uint16_t)0x0060) /*!< SMARTCARD error interruption */ -#define SMARTCARD_IT_ORE ((uint16_t)0x0300) /*!< SMARTCARD overrun error interruption */ -#define SMARTCARD_IT_NE ((uint16_t)0x0200) /*!< SMARTCARD noise error interruption */ -#define SMARTCARD_IT_FE ((uint16_t)0x0100) /*!< SMARTCARD frame error interruption */ - -#define SMARTCARD_IT_EOB ((uint16_t)0x0C3B) /*!< SMARTCARD end of block interruption */ -#define SMARTCARD_IT_RTO ((uint16_t)0x0B3A) /*!< SMARTCARD receiver timeout interruption */ +#define SMARTCARD_IT_ERR 0x0060U /*!< SMARTCARD error interruption */ +#define SMARTCARD_IT_ORE 0x0300U /*!< SMARTCARD overrun error interruption */ +#define SMARTCARD_IT_NE 0x0200U /*!< SMARTCARD noise error interruption */ +#define SMARTCARD_IT_FE 0x0100U /*!< SMARTCARD frame error interruption */ +#define SMARTCARD_IT_EOB 0x0C3BU /*!< SMARTCARD end of block interruption */ +#define SMARTCARD_IT_RTO 0x0B3AU /*!< SMARTCARD receiver timeout interruption */ #if defined(USART_TCBGT_SUPPORT) -#define SMARTCARD_IT_TCBGT ((uint16_t)0x1978) /*!< SMARTCARD transmission complete before guard time completion interruption */ -#endif /* USART_TCBGT_SUPPORT */ +#define SMARTCARD_IT_TCBGT 0x1978U /*!< SMARTCARD transmission complete before guard time completion interruption */ +#endif + +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_IT_RXFF 0x183FU /*!< SMARTCARD RXFIFO full interruption */ +#define SMARTCARD_IT_TXFE 0x173EU /*!< SMARTCARD TXFIFO empty interruption */ +#define SMARTCARD_IT_RXFT 0x1A7CU /*!< SMARTCARD RXFIFO threshold reached interruption */ +#define SMARTCARD_IT_TXFT 0x1B77U /*!< SMARTCARD TXFIFO threshold reached interruption */ +#endif /** * @} */ @@ -154,13 +207,16 @@ */ #define SMARTCARD_CLEAR_PEF USART_ICR_PECF /*!< SMARTCARD parity error clear flag */ #define SMARTCARD_CLEAR_FEF USART_ICR_FECF /*!< SMARTCARD framing error clear flag */ -#define SMARTCARD_CLEAR_NEF USART_ICR_NCF /*!< SMARTCARD noise detected clear flag */ +#define SMARTCARD_CLEAR_NEF USART_ICR_NECF /*!< SMARTCARD noise detected clear flag */ #define SMARTCARD_CLEAR_OREF USART_ICR_ORECF /*!< SMARTCARD overrun error clear flag */ #define SMARTCARD_CLEAR_IDLEF USART_ICR_IDLECF /*!< SMARTCARD idle line detected clear flag */ +#if defined(USART_CR1_FIFOEN) +#define SMARTCARD_CLEAR_TXFECF USART_ICR_TXFECF /*!< TXFIFO empty Clear Flag */ +#endif #define SMARTCARD_CLEAR_TCF USART_ICR_TCCF /*!< SMARTCARD transmission complete clear flag */ #if defined(USART_TCBGT_SUPPORT) #define SMARTCARD_CLEAR_TCBGTF USART_ICR_TCBGTCF /*!< SMARTCARD transmission complete before guard time completion clear flag */ -#endif /* USART_TCBGT_SUPPORT */ +#endif #define SMARTCARD_CLEAR_RTOF USART_ICR_RTOCF /*!< SMARTCARD receiver time out clear flag */ #define SMARTCARD_CLEAR_EOBF USART_ICR_EOBCF /*!< SMARTCARD end of block clear flag */ /** @@ -170,7 +226,27 @@ /** * @} */ + /* Exported macros -----------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup SMARTCARDEx_Private_Constants SMARTCARDEx Private Constants + * @{ + */ +#if defined(USART_CR1_FIFOEN) +/** @defgroup SMARTCARDEx_FIFO_mode SMARTCARDEx FIFO mode + * @{ + */ +#define SMARTCARD_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ +#define SMARTCARD_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */ +/** + * @} + */ +#endif +/** + * @} + */ + /* Private macros ------------------------------------------------------------*/ /** @defgroup SMARTCARDEx_Private_Macros SMARTCARD Extended Private Macros * @{ @@ -297,24 +373,24 @@ #endif /* STM32L432xx || STM32L442xx */ /** @brief Set the Transmission Completion flag - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @note If TCBGT (Transmission Complete Before Guard Time) flag is not available or if * AdvancedInit.TxCompletionIndication is not already filled, the latter is forced * to SMARTCARD_TC (transmission completion indication when guard time has elapsed). * @retval None */ #if defined(USART_TCBGT_SUPPORT) -#define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \ - do { \ - if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION)) \ - { \ +#define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \ + do { \ + if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION)) \ + { \ (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \ - } \ - else \ - { \ + } \ + else \ + { \ assert_param(IS_SMARTCARD_TRANSMISSION_COMPLETION((__HANDLE__)->AdvancedInit.TxCompletionIndication)); \ - } \ - } while(0) + } \ + } while(0) #else #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \ do { \ @@ -323,22 +399,23 @@ #endif /** @brief Return the transmission completion flag. - * @param __HANDLE__: specifies the SMARTCARD Handle. + * @param __HANDLE__ specifies the SMARTCARD Handle. * @note Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag. * When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is * reported. * @retval Transmission completion flag */ #if defined(USART_TCBGT_SUPPORT) -#define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) \ +#define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) \ (((__HANDLE__)->AdvancedInit.TxCompletionIndication == SMARTCARD_TC) ? (SMARTCARD_FLAG_TC) : (SMARTCARD_FLAG_TCBGT)) #else #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) (SMARTCARD_FLAG_TC) #endif - + + /** * @brief Ensure that SMARTCARD frame transmission completion used flag is valid. - * @param __TXCOMPLETE__: SMARTCARD frame transmission completion used flag. + * @param __TXCOMPLETE__ SMARTCARD frame transmission completion used flag. * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid) */ #if defined(USART_TCBGT_SUPPORT) @@ -350,7 +427,7 @@ /** * @} - */ + */ /* Exported functions --------------------------------------------------------*/ /** @addtogroup SMARTCARDEx_Exported_Functions @@ -358,9 +435,22 @@ */ /* Initialization and de-initialization functions ****************************/ -/* IO operation methods *******************************************************/ +/** @addtogroup SMARTCARDEx_Exported_Functions_Group2 + * @{ + */ -/** @addtogroup SMARTCARDEx_Exported_Functions_Group1 +/* IO operation functions *****************************************************/ +#if defined(USART_CR1_FIFOEN) +void HAL_SMARTCARDEx_RxFifoFullCallback(SMARTCARD_HandleTypeDef *hsmartcard); +void HAL_SMARTCARDEx_TxFifoEmptyCallback(SMARTCARD_HandleTypeDef *hsmartcard); +#endif + +/** + * @} + */ + + +/** @addtogroup SMARTCARDEx_Exported_Functions_Group3 * @{ */ @@ -370,6 +460,13 @@ void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmart HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard); HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard); +#if defined(USART_CR1_FIFOEN) +HAL_StatusTypeDef HAL_SMARTCARDEx_EnableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard); +HAL_StatusTypeDef HAL_SMARTCARDEx_DisableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard); +HAL_StatusTypeDef HAL_SMARTCARDEx_SetTxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold); +HAL_StatusTypeDef HAL_SMARTCARDEx_SetRxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold); +#endif + /** * @} */ @@ -378,6 +475,9 @@ HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef * @} */ + +/* Private functions ---------------------------------------------------------*/ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.c index fdbd04224d..8aeaa1b497 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.c @@ -2,25 +2,23 @@ ****************************************************************************** * @file stm32l4xx_hal_smbus.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SMBUS HAL module driver. - * This file provides firmware functions to manage the following + * This file provides firmware functions to manage the following * functionalities of the System Management Bus (SMBus) peripheral, * based on I2C principles of operation : * + Initialization and de-initialization functions * + IO operation functions * + Peripheral State and Errors functions - * + * @verbatim ============================================================================== ##### How to use this driver ##### ============================================================================== [..] The SMBUS HAL driver can be used as follows: - + (#) Declare a SMBUS_HandleTypeDef handle structure, for example: - SMBUS_HandleTypeDef hsmbus; + SMBUS_HandleTypeDef hsmbus; (#)Initialize the SMBUS low level resources by implementing the HAL_SMBUS_MspInit() API: (##) Enable the SMBUSx interface clock @@ -28,7 +26,7 @@ (+++) Enable the clock for the SMBUS GPIOs (+++) Configure SMBUS pins as alternate function open-drain (##) NVIC configuration if you need to use interrupt process - (+++) Configure the SMBUSx interrupt priority + (+++) Configure the SMBUSx interrupt priority (+++) Enable the NVIC SMBUS IRQ Channel (#) Configure the Communication Clock Timing, Bus Timeout, Own Address1, Master Addressing mode, @@ -92,7 +90,7 @@ [..] (@) You can refer to the SMBUS HAL driver header file for more useful macros - + @endverbatim ****************************************************************************** * @attention @@ -121,8 +119,8 @@ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - ****************************************************************************** - */ + ****************************************************************************** + */ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal.h" @@ -156,7 +154,7 @@ /** * @} */ - + /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ @@ -172,6 +170,8 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus); static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus); +static void SMBUS_ITErrorHandler(SMBUS_HandleTypeDef *hsmbus); + static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t Size, uint32_t Mode, uint32_t Request); /** * @} @@ -184,19 +184,19 @@ static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddre */ /** @defgroup SMBUS_Exported_Functions_Group1 Initialization and de-initialization functions - * @brief Initialization and Configuration functions + * @brief Initialization and Configuration functions * -@verbatim +@verbatim =============================================================================== ##### Initialization and de-initialization functions ##### =============================================================================== - [..] This subsection provides a set of functions allowing to initialize and + [..] This subsection provides a set of functions allowing to initialize and deinitialize the SMBUSx peripheral: - (+) User must Implement HAL_SMBUS_MspInit() function in which he configures + (+) User must Implement HAL_SMBUS_MspInit() function in which he configures all related peripherals resources (CLOCK, GPIO, IT and NVIC ). - (+) Call the function HAL_SMBUS_Init() to configure the selected device with + (+) Call the function HAL_SMBUS_Init() to configure the selected device with the selected configuration: (++) Clock Timing (++) Bus Timeout @@ -212,31 +212,31 @@ static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddre (++) Peripheral mode - (+) Call the function HAL_SMBUS_DeInit() to restore the default configuration - of the selected SMBUSx peripheral. + (+) Call the function HAL_SMBUS_DeInit() to restore the default configuration + of the selected SMBUSx peripheral. (+) Enable/Disable Analog/Digital filters with HAL_SMBUS_ConfigAnalogFilter() and - HAL_SMBUS_ConfigDigitalFilter(). + HAL_SMBUS_ConfigDigitalFilter(). @endverbatim * @{ */ /** - * @brief Initialize the SMBUS according to the specified parameters + * @brief Initialize the SMBUS according to the specified parameters * in the SMBUS_InitTypeDef and initialize the associated handle. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains * the configuration information for the specified SMBUS. * @retval HAL status */ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) -{ +{ /* Check the SMBUS handle allocation */ - if(hsmbus == NULL) + if (hsmbus == NULL) { return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); assert_param(IS_SMBUS_ANALOG_FILTER(hsmbus->Init.AnalogFilter)); @@ -250,7 +250,7 @@ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) assert_param(IS_SMBUS_PEC(hsmbus->Init.PacketErrorCheckMode)); assert_param(IS_SMBUS_PERIPHERAL_MODE(hsmbus->Init.PeripheralMode)); - if(hsmbus->State == HAL_SMBUS_STATE_RESET) + if (hsmbus->State == HAL_SMBUS_STATE_RESET) { /* Allocate lock resource and initialize it */ hsmbus->Lock = HAL_UNLOCKED; @@ -258,17 +258,17 @@ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) /* Init the low level hardware : GPIO, CLOCK, NVIC */ HAL_SMBUS_MspInit(hsmbus); } - + hsmbus->State = HAL_SMBUS_STATE_BUSY; - + /* Disable the selected SMBUS peripheral */ __HAL_SMBUS_DISABLE(hsmbus); - - /*---------------------------- SMBUSx TIMINGR Configuration ------------------------*/ + + /*---------------------------- SMBUSx TIMINGR Configuration ------------------------*/ /* Configure SMBUSx: Frequency range */ hsmbus->Instance->TIMINGR = hsmbus->Init.Timing & TIMING_CLEAR_MASK; - - /*---------------------------- SMBUSx TIMEOUTR Configuration ------------------------*/ + + /*---------------------------- SMBUSx TIMEOUTR Configuration ------------------------*/ /* Configure SMBUSx: Bus Timeout */ hsmbus->Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TIMOUTEN; hsmbus->Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TEXTEN; @@ -277,10 +277,10 @@ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) /*---------------------------- SMBUSx OAR1 Configuration -----------------------*/ /* Configure SMBUSx: Own Address1 and ack own address1 mode */ hsmbus->Instance->OAR1 &= ~I2C_OAR1_OA1EN; - - if(hsmbus->Init.OwnAddress1 != 0U) + + if (hsmbus->Init.OwnAddress1 != 0U) { - if(hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_7BIT) + if (hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_7BIT) { hsmbus->Instance->OAR1 = (I2C_OAR1_OA1EN | hsmbus->Init.OwnAddress1); } @@ -292,41 +292,41 @@ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) /*---------------------------- SMBUSx CR2 Configuration ------------------------*/ /* Configure SMBUSx: Addressing Master mode */ - if(hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_10BIT) + if (hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_10BIT) { hsmbus->Instance->CR2 = (I2C_CR2_ADD10); } /* Enable the AUTOEND by default, and enable NACK (should be disable only during Slave process) */ /* AUTOEND and NACK bit will be manage during Transfer process */ hsmbus->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); - - /*---------------------------- SMBUSx OAR2 Configuration -----------------------*/ + + /*---------------------------- SMBUSx OAR2 Configuration -----------------------*/ /* Configure SMBUSx: Dual mode and Own Address2 */ hsmbus->Instance->OAR2 = (hsmbus->Init.DualAddressMode | hsmbus->Init.OwnAddress2 | (hsmbus->Init.OwnAddress2Masks << 8U)); /*---------------------------- SMBUSx CR1 Configuration ------------------------*/ /* Configure SMBUSx: Generalcall and NoStretch mode */ hsmbus->Instance->CR1 = (hsmbus->Init.GeneralCallMode | hsmbus->Init.NoStretchMode | hsmbus->Init.PacketErrorCheckMode | hsmbus->Init.PeripheralMode | hsmbus->Init.AnalogFilter); - + /* Enable Slave Byte Control only in case of Packet Error Check is enabled and SMBUS Peripheral is set in Slave mode */ - if( (hsmbus->Init.PacketErrorCheckMode == SMBUS_PEC_ENABLE) - && ( (hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE) || (hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE_ARP) ) ) + if ((hsmbus->Init.PacketErrorCheckMode == SMBUS_PEC_ENABLE) + && ((hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE) || (hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE_ARP))) { hsmbus->Instance->CR1 |= I2C_CR1_SBC; } /* Enable the selected SMBUS peripheral */ __HAL_SMBUS_ENABLE(hsmbus); - + hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; hsmbus->PreviousState = HAL_SMBUS_STATE_READY; hsmbus->State = HAL_SMBUS_STATE_READY; - + return HAL_OK; } /** - * @brief DeInitialize the SMBUS peripheral. + * @brief DeInitialize the SMBUS peripheral. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains * the configuration information for the specified SMBUS. * @retval HAL status @@ -334,29 +334,29 @@ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) HAL_StatusTypeDef HAL_SMBUS_DeInit(SMBUS_HandleTypeDef *hsmbus) { /* Check the SMBUS handle allocation */ - if(hsmbus == NULL) + if (hsmbus == NULL) { return HAL_ERROR; } - + /* Check the parameters */ assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); - + hsmbus->State = HAL_SMBUS_STATE_BUSY; - + /* Disable the SMBUS Peripheral Clock */ __HAL_SMBUS_DISABLE(hsmbus); - + /* DeInit the low level hardware: GPIO, CLOCK, NVIC */ HAL_SMBUS_MspDeInit(hsmbus); - + hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; hsmbus->PreviousState = HAL_SMBUS_STATE_RESET; hsmbus->State = HAL_SMBUS_STATE_RESET; - - /* Release Lock */ + + /* Release Lock */ __HAL_UNLOCK(hsmbus); - + return HAL_OK; } @@ -373,7 +373,7 @@ __weak void HAL_SMBUS_MspInit(SMBUS_HandleTypeDef *hsmbus) /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMBUS_MspInit could be implemented in the user file - */ + */ } /** @@ -389,7 +389,7 @@ __weak void HAL_SMBUS_MspDeInit(SMBUS_HandleTypeDef *hsmbus) /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMBUS_MspDeInit could be implemented in the user file - */ + */ } /** @@ -407,7 +407,7 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigAnalogFilter(SMBUS_HandleTypeDef *hsmbus, uint assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); assert_param(IS_SMBUS_ANALOG_FILTER(AnalogFilter)); - if(hsmbus->State == HAL_SMBUS_STATE_READY) + if (hsmbus->State == HAL_SMBUS_STATE_READY) { /* Process Locked */ __HAL_LOCK(hsmbus); @@ -453,7 +453,7 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uin assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); assert_param(IS_SMBUS_DIGITAL_FILTER(DigitalFilter)); - if(hsmbus->State == HAL_SMBUS_STATE_READY) + if (hsmbus->State == HAL_SMBUS_STATE_READY) { /* Process Locked */ __HAL_LOCK(hsmbus); @@ -490,20 +490,19 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uin } } - /** * @} */ /** @defgroup SMBUS_Exported_Functions_Group2 Input and Output operation functions - * @brief Data transfers functions + * @brief Data transfers functions * -@verbatim +@verbatim =============================================================================== ##### IO operation functions ##### - =============================================================================== + =============================================================================== [..] - This subsection provides a set of functions allowing to manage the SMBUS data + This subsection provides a set of functions allowing to manage the SMBUS data transfers. (#) Blocking mode function to check if device is ready for usage is : @@ -512,7 +511,7 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uin (#) There is only one mode of transfer: (++) Non-Blocking mode : The communication is performed using Interrupts. These functions return the status of the transfer startup. - The end of the data processing will be indicated through the + The end of the data processing will be indicated through the dedicated SMBUS IRQ when using Interrupt mode. (#) Non-Blocking mode functions with Interrupt are : @@ -550,15 +549,15 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uin * @retval HAL status */ HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) -{ +{ /* Check the parameters */ assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hsmbus->State == HAL_SMBUS_STATE_READY) + if (hsmbus->State == HAL_SMBUS_STATE_READY) { /* Process Locked */ __HAL_LOCK(hsmbus); - + hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_TX; hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; /* Prepare transfer parameters */ @@ -568,12 +567,12 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint /* In case of Quick command, remove autoend mode */ /* Manage the stop generation by software */ - if(hsmbus->pBuffPtr == NULL) + if (hsmbus->pBuffPtr == NULL) { hsmbus->XferOptions &= ~SMBUS_AUTOEND_MODE; } - if(Size > MAX_NBYTE_SIZE) + if (Size > MAX_NBYTE_SIZE) { hsmbus->XferSize = MAX_NBYTE_SIZE; } @@ -584,17 +583,17 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint /* Send Slave Address */ /* Set NBYTES to write and reload if size > MAX_NBYTE_SIZE and generate RESTART */ - if( (hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount) ) + if ((hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount)) { - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_GENERATE_START_WRITE); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_GENERATE_START_WRITE); } else { /* If transfer direction not change, do not generate Restart Condition */ /* Mean Previous state is same as current state */ - if((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(hsmbus->XferOptions) == 0)) + if ((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(hsmbus->XferOptions) == 0)) { - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); } /* Else transfer direction change, so generate Restart with new transfer direction */ else @@ -603,32 +602,32 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint SMBUS_ConvertOtherXferOptions(hsmbus); /* Handle Transfer */ - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_GENERATE_START_WRITE); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_GENERATE_START_WRITE); } /* If PEC mode is enable, size to transmit manage by SW part should be Size-1 byte, corresponding to PEC byte */ /* PEC byte is automatically sent by HW block, no need to manage it in Transmit process */ - if(SMBUS_GET_PEC_MODE(hsmbus) != RESET) + if (SMBUS_GET_PEC_MODE(hsmbus) != RESET) { hsmbus->XferSize--; hsmbus->XferCount--; } } - - /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); - /* Note : The SMBUS interrupts must be enabled after unlocking current process + /* Process Unlocked */ + __HAL_UNLOCK(hsmbus); + + /* Note : The SMBUS interrupts must be enabled after unlocking current process to avoid the risk of SMBUS interrupt handle execution before current process unlock */ SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_TX); - + return HAL_OK; } else { return HAL_BUSY; - } + } } /** @@ -647,27 +646,27 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint1 /* Check the parameters */ assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hsmbus->State == HAL_SMBUS_STATE_READY) + if (hsmbus->State == HAL_SMBUS_STATE_READY) { /* Process Locked */ __HAL_LOCK(hsmbus); - + hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_RX; hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; - + /* Prepare transfer parameters */ hsmbus->pBuffPtr = pData; hsmbus->XferCount = Size; hsmbus->XferOptions = XferOptions; - + /* In case of Quick command, remove autoend mode */ /* Manage the stop generation by software */ - if(hsmbus->pBuffPtr == NULL) + if (hsmbus->pBuffPtr == NULL) { hsmbus->XferOptions &= ~SMBUS_AUTOEND_MODE; } - - if(Size > MAX_NBYTE_SIZE) + + if (Size > MAX_NBYTE_SIZE) { hsmbus->XferSize = MAX_NBYTE_SIZE; } @@ -675,20 +674,20 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint1 { hsmbus->XferSize = Size; } - + /* Send Slave Address */ /* Set NBYTES to write and reload if size > MAX_NBYTE_SIZE and generate RESTART */ - if( (hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount) ) + if ((hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount)) { - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_GENERATE_START_READ); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_GENERATE_START_READ); } else { /* If transfer direction not change, do not generate Restart Condition */ /* Mean Previous state is same as current state */ - if((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(hsmbus->XferOptions) == 0)) + if ((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(hsmbus->XferOptions) == 0)) { - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); } /* Else transfer direction change, so generate Restart with new transfer direction */ else @@ -697,24 +696,24 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint1 SMBUS_ConvertOtherXferOptions(hsmbus); /* Handle Transfer */ - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_GENERATE_START_READ); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_GENERATE_START_READ); } } - - /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); - /* Note : The SMBUS interrupts must be enabled after unlocking current process + /* Process Unlocked */ + __HAL_UNLOCK(hsmbus); + + /* Note : The SMBUS interrupts must be enabled after unlocking current process to avoid the risk of SMBUS interrupt handle execution before current process unlock */ SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_RX); - + return HAL_OK; } else { - return HAL_BUSY; - } + return HAL_BUSY; + } } /** @@ -728,18 +727,18 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint1 */ HAL_StatusTypeDef HAL_SMBUS_Master_Abort_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress) { - if(hsmbus->State == HAL_SMBUS_STATE_READY) + if (hsmbus->State == HAL_SMBUS_STATE_READY) { /* Process Locked */ __HAL_LOCK(hsmbus); - + /* Keep the same state as previous */ /* to perform as well the call of the corresponding end of transfer callback */ - if(hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) + if (hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) { hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_TX; } - else if(hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if (hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) { hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_RX; } @@ -750,32 +749,32 @@ HAL_StatusTypeDef HAL_SMBUS_Master_Abort_IT(SMBUS_HandleTypeDef *hsmbus, uint16_ return HAL_ERROR; } hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; - + /* Set NBYTES to 1 to generate a dummy read on SMBUS peripheral */ /* Set AUTOEND mode, this will generate a NACK then STOP condition to abort the current transfer */ SMBUS_TransferConfig(hsmbus, DevAddress, 1U, SMBUS_AUTOEND_MODE, SMBUS_NO_STARTSTOP); - - /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); - /* Note : The SMBUS interrupts must be enabled after unlocking current process + /* Process Unlocked */ + __HAL_UNLOCK(hsmbus); + + /* Note : The SMBUS interrupts must be enabled after unlocking current process to avoid the risk of SMBUS interrupt handle execution before current process unlock */ - if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) + if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) { SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_TX); } - else if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) { SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_RX); } - + return HAL_OK; } else { - return HAL_BUSY; - } + return HAL_BUSY; + } } /** @@ -792,11 +791,11 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8 /* Check the parameters */ assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hsmbus->State == HAL_SMBUS_STATE_LISTEN) + if (hsmbus->State == HAL_SMBUS_STATE_LISTEN) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { - return HAL_ERROR; + return HAL_ERROR; } /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ @@ -804,10 +803,10 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8 /* Process Locked */ __HAL_LOCK(hsmbus); - + hsmbus->State |= HAL_SMBUS_STATE_SLAVE_BUSY_TX; hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; - + /* Set SBC bit to manage Acknowledge at each bit */ hsmbus->Instance->CR1 |= I2C_CR1_SBC; @@ -822,7 +821,7 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8 /* Convert OTHER_xxx XferOptions if any */ SMBUS_ConvertOtherXferOptions(hsmbus); - if(Size > MAX_NBYTE_SIZE) + if (Size > MAX_NBYTE_SIZE) { hsmbus->XferSize = MAX_NBYTE_SIZE; } @@ -832,32 +831,32 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8 } /* Set NBYTES to write and reload if size > MAX_NBYTE_SIZE and generate RESTART */ - if( (hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount) ) + if ((hsmbus->XferSize == MAX_NBYTE_SIZE) && (hsmbus->XferSize < hsmbus->XferCount)) { - SMBUS_TransferConfig(hsmbus, 0U,hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, 0U, hsmbus->XferSize, SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), SMBUS_NO_STARTSTOP); } else { /* Set NBYTE to transmit */ - SMBUS_TransferConfig(hsmbus, 0U,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, 0U, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); /* If PEC mode is enable, size to transmit should be Size-1 byte, corresponding to PEC byte */ /* PEC byte is automatically sent by HW block, no need to manage it in Transmit process */ - if(SMBUS_GET_PEC_MODE(hsmbus) != RESET) + if (SMBUS_GET_PEC_MODE(hsmbus) != RESET) { hsmbus->XferSize--; hsmbus->XferCount--; } } - + /* Clear ADDR flag after prepare the transfer parameters */ /* This action will generate an acknowledge to the HOST */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus,SMBUS_FLAG_ADDR); + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); + __HAL_UNLOCK(hsmbus); - /* Note : The SMBUS interrupts must be enabled after unlocking current process + /* Note : The SMBUS interrupts must be enabled after unlocking current process to avoid the risk of SMBUS interrupt handle execution before current process unlock */ /* REnable ADDR interrupt */ @@ -867,8 +866,8 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8 } else { - return HAL_ERROR; - } + return HAL_ERROR; + } } /** @@ -885,22 +884,22 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_ /* Check the parameters */ assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions)); - if(hsmbus->State == HAL_SMBUS_STATE_LISTEN) + if (hsmbus->State == HAL_SMBUS_STATE_LISTEN) { - if((pData == NULL) || (Size == 0U)) + if ((pData == NULL) || (Size == 0U)) { - return HAL_ERROR; + return HAL_ERROR; } - + /* Disable Interrupts, to prevent preemption during treatment in case of multicall */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR | SMBUS_IT_RX); /* Process Locked */ __HAL_LOCK(hsmbus); - + hsmbus->State |= HAL_SMBUS_STATE_SLAVE_BUSY_RX; hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; - + /* Set SBC bit to manage Acknowledge at each bit */ hsmbus->Instance->CR1 |= I2C_CR1_SBC; @@ -921,7 +920,7 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_ /* no need to set RELOAD bit mode, a ACK will be automatically generated in that case */ /* else need to set RELOAD bit mode to generate an automatic ACK at each byte Received */ /* This RELOAD bit will be reset for last BYTE to be receive in SMBUS_Slave_ISR */ - if((hsmbus->XferSize == 1U) || ((hsmbus->XferSize == 2U) && (SMBUS_GET_PEC_MODE(hsmbus) != RESET))) + if ((hsmbus->XferSize == 1U) || ((hsmbus->XferSize == 2U) && (SMBUS_GET_PEC_MODE(hsmbus) != RESET))) { SMBUS_TransferConfig(hsmbus, 0U, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); } @@ -932,12 +931,12 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_ /* Clear ADDR flag after prepare the transfer parameters */ /* This action will generate an acknowledge to the HOST */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus,SMBUS_FLAG_ADDR); + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); + __HAL_UNLOCK(hsmbus); - /* Note : The SMBUS interrupts must be enabled after unlocking current process + /* Note : The SMBUS interrupts must be enabled after unlocking current process to avoid the risk of SMBUS interrupt handle execution before current process unlock */ /* REnable ADDR interrupt */ @@ -947,7 +946,7 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_ } else { - return HAL_ERROR; + return HAL_ERROR; } } @@ -960,10 +959,10 @@ HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_ HAL_StatusTypeDef HAL_SMBUS_EnableListen_IT(SMBUS_HandleTypeDef *hsmbus) { hsmbus->State = HAL_SMBUS_STATE_LISTEN; - + /* Enable the Address Match interrupt */ SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_ADDR); - + return HAL_OK; } @@ -976,13 +975,13 @@ HAL_StatusTypeDef HAL_SMBUS_EnableListen_IT(SMBUS_HandleTypeDef *hsmbus) HAL_StatusTypeDef HAL_SMBUS_DisableListen_IT(SMBUS_HandleTypeDef *hsmbus) { /* Disable Address listen mode only if a transfer is not ongoing */ - if(hsmbus->State == HAL_SMBUS_STATE_LISTEN) + if (hsmbus->State == HAL_SMBUS_STATE_LISTEN) { hsmbus->State = HAL_SMBUS_STATE_READY; - + /* Disable the Address Match interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR); - + return HAL_OK; } else @@ -1000,7 +999,7 @@ HAL_StatusTypeDef HAL_SMBUS_DisableListen_IT(SMBUS_HandleTypeDef *hsmbus) HAL_StatusTypeDef HAL_SMBUS_EnableAlert_IT(SMBUS_HandleTypeDef *hsmbus) { /* Enable SMBus alert */ - hsmbus->Instance->CR1 |= I2C_CR1_ALERTEN; + hsmbus->Instance->CR1 |= I2C_CR1_ALERTEN; /* Clear ALERT flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT); @@ -1008,7 +1007,7 @@ HAL_StatusTypeDef HAL_SMBUS_EnableAlert_IT(SMBUS_HandleTypeDef *hsmbus) /* Enable Alert Interrupt */ SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_ALERT); - return HAL_OK; + return HAL_OK; } /** * @brief Disable the SMBUS alert mode with Interrupt. @@ -1019,16 +1018,16 @@ HAL_StatusTypeDef HAL_SMBUS_EnableAlert_IT(SMBUS_HandleTypeDef *hsmbus) HAL_StatusTypeDef HAL_SMBUS_DisableAlert_IT(SMBUS_HandleTypeDef *hsmbus) { /* Enable SMBus alert */ - hsmbus->Instance->CR1 &= ~I2C_CR1_ALERTEN; - + hsmbus->Instance->CR1 &= ~I2C_CR1_ALERTEN; + /* Disable Alert Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ALERT); - return HAL_OK; + return HAL_OK; } /** - * @brief Check if target device is ready for communication. + * @brief Check if target device is ready for communication. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains * the configuration information for the specified SMBUS. * @param DevAddress Target device address: The device 7 bits address value @@ -1038,72 +1037,72 @@ HAL_StatusTypeDef HAL_SMBUS_DisableAlert_IT(SMBUS_HandleTypeDef *hsmbus) * @retval HAL status */ HAL_StatusTypeDef HAL_SMBUS_IsDeviceReady(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout) -{ +{ uint32_t tickstart = 0U; - + __IO uint32_t SMBUS_Trials = 0U; - - if(hsmbus->State == HAL_SMBUS_STATE_READY) + + if (hsmbus->State == HAL_SMBUS_STATE_READY) { - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_BUSY) != RESET) + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_BUSY) != RESET) { return HAL_BUSY; } /* Process Locked */ __HAL_LOCK(hsmbus); - + hsmbus->State = HAL_SMBUS_STATE_BUSY; hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; - + do { /* Generate Start */ - hsmbus->Instance->CR2 = SMBUS_GENERATE_START(hsmbus->Init.AddressingMode,DevAddress); - + hsmbus->Instance->CR2 = SMBUS_GENERATE_START(hsmbus->Init.AddressingMode, DevAddress); + /* No need to Check TC flag, with AUTOEND mode the stop is automatically generated */ /* Wait until STOPF flag is set or a NACK flag is set*/ tickstart = HAL_GetTick(); - while((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) == RESET) && (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) == RESET) && (hsmbus->State != HAL_SMBUS_STATE_TIMEOUT)) + while ((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) == RESET) && (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) == RESET) && (hsmbus->State != HAL_SMBUS_STATE_TIMEOUT)) { - if(Timeout != HAL_MAX_DELAY) - { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + if (Timeout != HAL_MAX_DELAY) + { + if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) { /* Device is ready */ hsmbus->State = HAL_SMBUS_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); return HAL_TIMEOUT; } - } + } } - + /* Check if the NACKF flag has not been set */ if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) == RESET) { - /* Wait until STOPF flag is reset */ - if(SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) { return HAL_TIMEOUT; } - + /* Clear STOP Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); /* Device is ready */ hsmbus->State = HAL_SMBUS_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + return HAL_OK; } else { - /* Wait until STOPF flag is reset */ - if(SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) + /* Wait until STOPF flag is reset */ + if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) { return HAL_TIMEOUT; } @@ -1114,31 +1113,32 @@ HAL_StatusTypeDef HAL_SMBUS_IsDeviceReady(SMBUS_HandleTypeDef *hsmbus, uint16_t /* Clear STOP Flag, auto generated with autoend*/ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); } - + /* Check if the maximum allowed number of trials has been reached */ if (SMBUS_Trials++ == Trials) { /* Generate Stop */ hsmbus->Instance->CR2 |= I2C_CR2_STOP; - - /* Wait until STOPF flag is reset */ - if(SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) + + /* Wait until STOPF flag is reset */ + if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) { return HAL_TIMEOUT; } - + /* Clear STOP Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); - } - }while(SMBUS_Trials < Trials); + } + } + while (SMBUS_Trials < Trials); hsmbus->State = HAL_SMBUS_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + return HAL_TIMEOUT; - } + } else { return HAL_BUSY; @@ -1161,28 +1161,28 @@ HAL_StatusTypeDef HAL_SMBUS_IsDeviceReady(SMBUS_HandleTypeDef *hsmbus, uint16_t void HAL_SMBUS_EV_IRQHandler(SMBUS_HandleTypeDef *hsmbus) { uint32_t tmpisrvalue = 0U; - + /* Use a local variable to store the current ISR flags */ /* This action will avoid a wrong treatment due to ISR flags change during interrupt handler */ tmpisrvalue = SMBUS_GET_ISR_REG(hsmbus); - + /* SMBUS in mode Transmitter ---------------------------------------------------*/ - if (((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TXIS) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, (SMBUS_IT_TCI| SMBUS_IT_STOPI| SMBUS_IT_NACKI | SMBUS_IT_TXI)) != RESET)) - { + if (((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TXIS) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, (SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_TXI)) != RESET)) + { /* Slave mode selected */ if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) { SMBUS_Slave_ISR(hsmbus); } /* Master mode selected */ - else if((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_TX) == HAL_SMBUS_STATE_MASTER_BUSY_TX) + else if ((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_TX) == HAL_SMBUS_STATE_MASTER_BUSY_TX) { SMBUS_Master_ISR(hsmbus); } } - + /* SMBUS in mode Receiver ----------------------------------------------------*/ - if (((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_RXNE) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, (SMBUS_IT_TCI| SMBUS_IT_STOPI| SMBUS_IT_NACKI | SMBUS_IT_RXI)) != RESET)) + if (((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_RXNE) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, (SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_RXI)) != RESET)) { /* Slave mode selected */ if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX) @@ -1190,15 +1190,15 @@ void HAL_SMBUS_EV_IRQHandler(SMBUS_HandleTypeDef *hsmbus) SMBUS_Slave_ISR(hsmbus); } /* Master mode selected */ - else if((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_RX) == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if ((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_RX) == HAL_SMBUS_STATE_MASTER_BUSY_RX) { SMBUS_Master_ISR(hsmbus); } - } - - /* SMBUS in mode Listener Only --------------------------------------------------*/ + } + + /* SMBUS in mode Listener Only --------------------------------------------------*/ if (((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_ADDR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)) - && ((__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ADDRI) != RESET) || (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_STOPI) != RESET) || (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_NACKI) != RESET))) + && ((__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ADDRI) != RESET) || (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_STOPI) != RESET) || (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_NACKI) != RESET))) { if (hsmbus->State == HAL_SMBUS_STATE_LISTEN) { @@ -1215,79 +1215,7 @@ void HAL_SMBUS_EV_IRQHandler(SMBUS_HandleTypeDef *hsmbus) */ void HAL_SMBUS_ER_IRQHandler(SMBUS_HandleTypeDef *hsmbus) { - /* SMBUS Bus error interrupt occurred ------------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_BERR) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BERR; - - /* Clear BERR flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_BERR); - } - - /* SMBUS Over-Run/Under-Run interrupt occurred ----------------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_OVR) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_OVR; - - /* Clear OVR flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_OVR); - } - - /* SMBUS Arbitration Loss error interrupt occurred ------------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_ARLO) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ARLO; - - /* Clear ARLO flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ARLO); - } - - /* SMBUS Timeout error interrupt occurred ---------------------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TIMEOUT) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BUSTIMEOUT; - - /* Clear TIMEOUT flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_TIMEOUT); - } - - /* SMBUS Alert error interrupt occurred -----------------------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_ALERT) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ALERT; - - /* Clear ALERT flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT); - } - - /* SMBUS Packet Error Check error interrupt occurred ----------------------------------*/ - if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_PECERR) != RESET) && (__HAL_SMBUS_GET_IT_SOURCE(hsmbus, SMBUS_IT_ERRI) != RESET)) - { - hsmbus->ErrorCode |= HAL_SMBUS_ERROR_PECERR; - - /* Clear PEC error flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_PECERR); - } - - /* Call the Error Callback in case of Error detected */ - if((hsmbus->ErrorCode != HAL_SMBUS_ERROR_NONE)&&(hsmbus->ErrorCode != HAL_SMBUS_ERROR_ACKF)) - { - /* Do not Reset the HAL state in case of ALERT error */ - if((hsmbus->ErrorCode & HAL_SMBUS_ERROR_ALERT) != HAL_SMBUS_ERROR_ALERT) - { - if(((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) - || ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX)) - { - /* Reset only HAL_SMBUS_STATE_SLAVE_BUSY_XX */ - /* keep HAL_SMBUS_STATE_LISTEN if set */ - hsmbus->PreviousState = HAL_SMBUS_STATE_READY; - hsmbus->State = HAL_SMBUS_STATE_LISTEN; - } - } - - /* Call the Error callback to prevent upper layer */ - HAL_SMBUS_ErrorCallback(hsmbus); - } + SMBUS_ITErrorHandler(hsmbus); } /** @@ -1303,7 +1231,7 @@ __weak void HAL_SMBUS_MasterTxCpltCallback(SMBUS_HandleTypeDef *hsmbus) /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMBUS_MasterTxCpltCallback() could be implemented in the user file - */ + */ } /** @@ -1334,7 +1262,7 @@ __weak void HAL_SMBUS_SlaveTxCpltCallback(SMBUS_HandleTypeDef *hsmbus) /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMBUS_SlaveTxCpltCallback() could be implemented in the user file - */ + */ } /** @@ -1357,8 +1285,8 @@ __weak void HAL_SMBUS_SlaveRxCpltCallback(SMBUS_HandleTypeDef *hsmbus) * @brief Slave Address Match callback. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains * the configuration information for the specified SMBUS. - * @param TransferDirection: Master request Transfer Direction (Write/Read) - * @param AddrMatchCode: Address Match Code + * @param TransferDirection Master request Transfer Direction (Write/Read) + * @param AddrMatchCode Address Match Code * @retval None */ __weak void HAL_SMBUS_AddrCallback(SMBUS_HandleTypeDef *hsmbus, uint8_t TransferDirection, uint16_t AddrMatchCode) @@ -1402,22 +1330,22 @@ __weak void HAL_SMBUS_ErrorCallback(SMBUS_HandleTypeDef *hsmbus) /* NOTE : This function should not be modified, when the callback is needed, the HAL_SMBUS_ErrorCallback() could be implemented in the user file - */ + */ } /** * @} */ -/** @defgroup SMBUS_Exported_Functions_Group3 Peripheral State and Errors functions - * @brief Peripheral State and Errors functions +/** @defgroup SMBUS_Exported_Functions_Group3 Peripheral State and Errors functions + * @brief Peripheral State and Errors functions * -@verbatim +@verbatim =============================================================================== ##### Peripheral State and Errors functions ##### - =============================================================================== + =============================================================================== [..] - This subsection permits to get in run-time the status of the peripheral + This subsection permits to get in run-time the status of the peripheral and the data flow. @endverbatim @@ -1449,14 +1377,14 @@ uint32_t HAL_SMBUS_GetError(SMBUS_HandleTypeDef *hsmbus) /** * @} - */ + */ /** * @} - */ + */ /** @addtogroup SMBUS_Private_Functions SMBUS Private Functions - * @brief Data transfers Private functions + * @brief Data transfers Private functions * @{ */ @@ -1466,42 +1394,45 @@ uint32_t HAL_SMBUS_GetError(SMBUS_HandleTypeDef *hsmbus) * the configuration information for the specified SMBUS. * @retval HAL status */ -static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) +static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) { uint16_t DevAddress; /* Process Locked */ __HAL_LOCK(hsmbus); - - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) != RESET) + + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) != RESET) { /* Clear NACK Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); - + /* Set corresponding Error Code */ /* No need to generate STOP, it is automatically done */ hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ACKF; /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - - /* Call the Error callback to prevent upper layer */ + + /* Call the Error callback to inform upper layer */ HAL_SMBUS_ErrorCallback(hsmbus); } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) != RESET) { + /* Check and treat errors if errors occurs during STOP process */ + SMBUS_ITErrorHandler(hsmbus); + /* Call the corresponding callback to inform upper layer of End of Transfer */ - if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) + if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) { /* Disable Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); /* Clear STOP Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); - + /* Clear Configuration Register 2 */ SMBUS_RESET_CR2(hsmbus); - + /* Flush remaining data in Fifo register in case of error occurs before TXEmpty */ /* Disable the selected SMBUS peripheral */ __HAL_SMBUS_DISABLE(hsmbus); @@ -1511,21 +1442,21 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + /* REenable the selected SMBUS peripheral */ __HAL_SMBUS_ENABLE(hsmbus); HAL_SMBUS_MasterTxCpltCallback(hsmbus); } - else if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) { /* Store Last receive data if any */ - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) { /* Read data from RXDR */ (*hsmbus->pBuffPtr++) = hsmbus->Instance->RXDR; - if((hsmbus->XferSize > 0U)) + if ((hsmbus->XferSize > 0U)) { hsmbus->XferSize--; hsmbus->XferCount--; @@ -1537,64 +1468,64 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Clear STOP Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); - + /* Clear Configuration Register 2 */ SMBUS_RESET_CR2(hsmbus); - + hsmbus->PreviousState = HAL_SMBUS_STATE_READY; hsmbus->State = HAL_SMBUS_STATE_READY; /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + HAL_SMBUS_MasterRxCpltCallback(hsmbus); } } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) - { + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) + { /* Read data from RXDR */ (*hsmbus->pBuffPtr++) = hsmbus->Instance->RXDR; hsmbus->XferSize--; hsmbus->XferCount--; } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXIS) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXIS) != RESET) { /* Write data to TXDR */ hsmbus->Instance->TXDR = (*hsmbus->pBuffPtr++); hsmbus->XferSize--; - hsmbus->XferCount--; + hsmbus->XferCount--; } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TCR) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TCR) != RESET) { - if((hsmbus->XferSize == 0U)&&(hsmbus->XferCount != 0U)) + if ((hsmbus->XferSize == 0U) && (hsmbus->XferCount != 0U)) { DevAddress = (hsmbus->Instance->CR2 & I2C_CR2_SADD); - - if(hsmbus->XferCount > MAX_NBYTE_SIZE) - { + + if (hsmbus->XferCount > MAX_NBYTE_SIZE) + { SMBUS_TransferConfig(hsmbus, DevAddress, MAX_NBYTE_SIZE, (SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE)), SMBUS_NO_STARTSTOP); hsmbus->XferSize = MAX_NBYTE_SIZE; } else { hsmbus->XferSize = hsmbus->XferCount; - SMBUS_TransferConfig(hsmbus,DevAddress,hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, DevAddress, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); /* If PEC mode is enable, size to transmit should be Size-1 byte, corresponding to PEC byte */ /* PEC byte is automatically sent by HW block, no need to manage it in Transmit process */ - if(SMBUS_GET_PEC_MODE(hsmbus) != RESET) + if (SMBUS_GET_PEC_MODE(hsmbus) != RESET) { hsmbus->XferSize--; hsmbus->XferCount--; } } } - else if((hsmbus->XferSize == 0U)&&(hsmbus->XferCount == 0U)) + else if ((hsmbus->XferSize == 0U) && (hsmbus->XferCount == 0U)) { /* Call TxCpltCallback() if no stop mode is set */ - if(SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) + if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) { /* Call the corresponding callback to inform upper layer of End of Transfer */ - if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) + if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) { /* Disable Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); @@ -1603,10 +1534,10 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + HAL_SMBUS_MasterTxCpltCallback(hsmbus); } - else if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) { SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); hsmbus->PreviousState = hsmbus->State; @@ -1614,30 +1545,30 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + HAL_SMBUS_MasterRxCpltCallback(hsmbus); } } } } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TC) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TC) != RESET) { - if(hsmbus->XferCount == 0U) + if (hsmbus->XferCount == 0U) { /* Specific use case for Quick command */ - if(hsmbus->pBuffPtr == NULL) + if (hsmbus->pBuffPtr == NULL) { /* Generate a Stop command */ hsmbus->Instance->CR2 |= I2C_CR2_STOP; } /* Call TxCpltCallback() if no stop mode is set */ - else if(SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) + else if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) { /* No Generate Stop, to permit restart mode */ /* The stop will be done at the end of transfer, when SMBUS_AUTOEND_MODE enable */ - + /* Call the corresponding callback to inform upper layer of End of Transfer */ - if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) + if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) { /* Disable Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); @@ -1646,10 +1577,10 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + HAL_SMBUS_MasterTxCpltCallback(hsmbus); } - else if(hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) + else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) { SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); hsmbus->PreviousState = hsmbus->State; @@ -1657,39 +1588,39 @@ static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus) /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + HAL_SMBUS_MasterRxCpltCallback(hsmbus); } } } } - + /* Process Unlocked */ - __HAL_UNLOCK(hsmbus); - - return HAL_OK; -} + __HAL_UNLOCK(hsmbus); + + return HAL_OK; +} /** * @brief Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains * the configuration information for the specified SMBUS. * @retval HAL status */ -static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) +static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) { uint8_t TransferDirection = 0U; uint16_t SlaveAddrCode = 0U; /* Process Locked */ __HAL_LOCK(hsmbus); - - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) != RESET) + + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) != RESET) { /* Check that SMBUS transfer finished */ /* if yes, normal usecase, a NACK is sent by the HOST when Transfer is finished */ /* Mean XferCount == 0*/ /* So clear Flag NACKF only */ - if(hsmbus->XferCount == 0U) + if (hsmbus->XferCount == 0U) { /* Clear NACK Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); @@ -1711,58 +1642,58 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) /* Disable RX/TX Interrupts, keep only ADDR Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX | SMBUS_IT_TX); - + /* Set ErrorCode corresponding to a Non-Acknowledge */ hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ACKF; /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - - /* Call the Error callback to prevent upper layer */ + + /* Call the Error callback to inform upper layer */ HAL_SMBUS_ErrorCallback(hsmbus); } } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_ADDR) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_ADDR) != RESET) { TransferDirection = SMBUS_GET_DIR(hsmbus); SlaveAddrCode = SMBUS_GET_ADDR_MATCH(hsmbus); - + /* Disable ADDR interrupt to prevent multiple ADDRInterrupt*/ /* Other ADDRInterrupt will be treat in next Listen usecase */ __HAL_SMBUS_DISABLE_IT(hsmbus, SMBUS_IT_ADDRI); - + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); /* Call Slave Addr callback */ HAL_SMBUS_AddrCallback(hsmbus, TransferDirection, SlaveAddrCode); } - else if((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) || (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TCR) != RESET)) + else if ((__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) || (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TCR) != RESET)) { - if( (hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX) + if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX) { /* Read data from RXDR */ (*hsmbus->pBuffPtr++) = hsmbus->Instance->RXDR; hsmbus->XferSize--; hsmbus->XferCount--; - if(hsmbus->XferCount == 1U) + if (hsmbus->XferCount == 1U) { /* Receive last Byte, can be PEC byte in case of PEC BYTE enabled */ /* or only the last Byte of Transfer */ /* So reset the RELOAD bit mode */ hsmbus->XferOptions &= ~SMBUS_RELOAD_MODE; - SMBUS_TransferConfig(hsmbus, 0U ,1U , hsmbus->XferOptions, SMBUS_NO_STARTSTOP); + SMBUS_TransferConfig(hsmbus, 0U, 1U, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); } - else if(hsmbus->XferCount == 0U) + else if (hsmbus->XferCount == 0U) { /* Last Byte is received, disable Interrupt */ SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); - + /* Remove HAL_SMBUS_STATE_SLAVE_BUSY_RX, keep only HAL_SMBUS_STATE_LISTEN */ hsmbus->PreviousState = hsmbus->State; hsmbus->State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_RX); - + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); @@ -1777,13 +1708,13 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) /* Ack last Byte Read */ hsmbus->Instance->CR2 &= ~I2C_CR2_NACK; } - } - else if( (hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) + } + else if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) { - if((hsmbus->XferSize == 0U)&&(hsmbus->XferCount != 0U)) + if ((hsmbus->XferSize == 0U) && (hsmbus->XferCount != 0U)) { - if(hsmbus->XferCount > MAX_NBYTE_SIZE) - { + if (hsmbus->XferCount > MAX_NBYTE_SIZE) + { SMBUS_TransferConfig(hsmbus, 0U, MAX_NBYTE_SIZE, (SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE)), SMBUS_NO_STARTSTOP); hsmbus->XferSize = MAX_NBYTE_SIZE; } @@ -1793,7 +1724,7 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) SMBUS_TransferConfig(hsmbus, 0U, hsmbus->XferSize, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); /* If PEC mode is enable, size to transmit should be Size-1 byte, corresponding to PEC byte */ /* PEC byte is automatically sent by HW block, no need to manage it in Transmit process */ - if(SMBUS_GET_PEC_MODE(hsmbus) != RESET) + if (SMBUS_GET_PEC_MODE(hsmbus) != RESET) { hsmbus->XferSize--; hsmbus->XferCount--; @@ -1802,21 +1733,21 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) } } } - else if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXIS) != RESET) + else if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXIS) != RESET) { /* Write data to TXDR only if XferCount not reach "0" */ /* A TXIS flag can be set, during STOP treatment */ /* Check if all Data have already been sent */ /* If it is the case, this last write in TXDR is not sent, correspond to a dummy TXIS event */ - if(hsmbus->XferCount > 0U) + if (hsmbus->XferCount > 0U) { /* Write data to TXDR */ hsmbus->Instance->TXDR = (*hsmbus->pBuffPtr++); hsmbus->XferCount--; hsmbus->XferSize--; } - - if(hsmbus->XferCount == 0U) + + if (hsmbus->XferCount == 0U) { /* Last Byte is Transmitted */ /* Remove HAL_SMBUS_STATE_SLAVE_BUSY_TX, keep only HAL_SMBUS_STATE_LISTEN */ @@ -1833,17 +1764,17 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) } /* Check if STOPF is set */ - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) != RESET) + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF) != RESET) { - if((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) + if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) { /* Store Last receive data if any */ - if(__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) + if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) { /* Read data from RXDR */ (*hsmbus->pBuffPtr++) = hsmbus->Instance->RXDR; - if((hsmbus->XferSize > 0U)) + if ((hsmbus->XferSize > 0U)) { hsmbus->XferSize--; hsmbus->XferCount--; @@ -1861,30 +1792,30 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) /* Clear Configuration Register 2 */ SMBUS_RESET_CR2(hsmbus); - + /* Clear STOP Flag */ __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); - /* Clear ADDR flag */ - __HAL_SMBUS_CLEAR_FLAG(hsmbus,SMBUS_FLAG_ADDR); + /* Clear ADDR flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); hsmbus->XferOptions = 0U; hsmbus->PreviousState = hsmbus->State; hsmbus->State = HAL_SMBUS_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - /* Call the Listen Complete callback, to prevent upper layer of the end of Listen usecase */ + /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */ HAL_SMBUS_ListenCpltCallback(hsmbus); } } /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - - return HAL_OK; -} + + return HAL_OK; +} /** * @brief Manage the enabling of Interrupts. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains @@ -1892,40 +1823,40 @@ static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus) * @param InterruptRequest Value of @ref SMBUS_Interrupt_configuration_definition. * @retval HAL status */ -static HAL_StatusTypeDef SMBUS_Enable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t InterruptRequest) +static HAL_StatusTypeDef SMBUS_Enable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t InterruptRequest) { uint32_t tmpisr = 0U; - if((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT) + if ((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT) { /* Enable ERR interrupt */ tmpisr |= SMBUS_IT_ERRI; } - - if((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR) + + if ((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR) { /* Enable ADDR, STOP interrupt */ tmpisr |= SMBUS_IT_ADDRI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_ERRI; } - - if((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX) + + if ((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX) { /* Enable ERR, TC, STOP, NACK, RXI interrupt */ tmpisr |= SMBUS_IT_ERRI | SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_TXI; } - - if((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX) + + if ((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX) { /* Enable ERR, TC, STOP, NACK, TXI interrupt */ tmpisr |= SMBUS_IT_ERRI | SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_RXI; } - + /* Enable interrupts only at the end */ /* to avoid the risk of SMBUS interrupt handle execution before */ /* all interrupts requested done */ __HAL_SMBUS_ENABLE_IT(hsmbus, tmpisr); - return HAL_OK; + return HAL_OK; } /** * @brief Manage the disabling of Interrupts. @@ -1934,60 +1865,60 @@ static HAL_StatusTypeDef SMBUS_Enable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t * @param InterruptRequest Value of @ref SMBUS_Interrupt_configuration_definition. * @retval HAL status */ -static HAL_StatusTypeDef SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t InterruptRequest) +static HAL_StatusTypeDef SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t InterruptRequest) { uint32_t tmpisr = 0U; - if( ((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT) && (hsmbus->State == HAL_SMBUS_STATE_READY) ) + if (((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT) && (hsmbus->State == HAL_SMBUS_STATE_READY)) { /* Disable ERR interrupt */ tmpisr |= SMBUS_IT_ERRI; } - - if((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX) + + if ((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX) { /* Disable TC, STOP, NACK, TXI interrupt */ tmpisr |= SMBUS_IT_TCI | SMBUS_IT_TXI; - - if((SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) - && ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)) - { - /* Disable ERR interrupt */ - tmpisr |= SMBUS_IT_ERRI; - } - - if((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN) - { - /* Disable STOPI, NACKI */ - tmpisr |= SMBUS_IT_STOPI | SMBUS_IT_NACKI; - } - } - - if((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX) - { - /* Disable TC, STOP, NACK, RXI interrupt */ - tmpisr |= SMBUS_IT_TCI | SMBUS_IT_RXI; - - if((SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) - && ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)) + + if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) + && ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)) { /* Disable ERR interrupt */ tmpisr |= SMBUS_IT_ERRI; } - if((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN) + if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN) { /* Disable STOPI, NACKI */ tmpisr |= SMBUS_IT_STOPI | SMBUS_IT_NACKI; } } - - if((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR) + + if ((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX) + { + /* Disable TC, STOP, NACK, RXI interrupt */ + tmpisr |= SMBUS_IT_TCI | SMBUS_IT_RXI; + + if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) + && ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)) + { + /* Disable ERR interrupt */ + tmpisr |= SMBUS_IT_ERRI; + } + + if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN) + { + /* Disable STOPI, NACKI */ + tmpisr |= SMBUS_IT_STOPI | SMBUS_IT_NACKI; + } + } + + if ((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR) { /* Enable ADDR, STOP interrupt */ tmpisr |= SMBUS_IT_ADDRI | SMBUS_IT_STOPI | SMBUS_IT_NACKI; - if(SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) + if (SMBUS_GET_ALERT_ENABLED(hsmbus) == RESET) { /* Disable ERR interrupt */ tmpisr |= SMBUS_IT_ERRI; @@ -1998,9 +1929,95 @@ static HAL_StatusTypeDef SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t /* to avoid a breaking situation like at "t" time */ /* all disable interrupts request are not done */ __HAL_SMBUS_DISABLE_IT(hsmbus, tmpisr); - + return HAL_OK; } + +/** + * @brief SMBUS interrupts error handler. + * @param hsmbus SMBUS handle. + * @retval None + */ +static void SMBUS_ITErrorHandler(SMBUS_HandleTypeDef *hsmbus) +{ + uint32_t itflags = READ_REG(hsmbus->Instance->ISR); + uint32_t itsources = READ_REG(hsmbus->Instance->CR1); + + /* SMBUS Bus error interrupt occurred ------------------------------------*/ + if (((itflags & SMBUS_FLAG_BERR) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BERR; + + /* Clear BERR flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_BERR); + } + + /* SMBUS Over-Run/Under-Run interrupt occurred ----------------------------------------*/ + if (((itflags & SMBUS_FLAG_OVR) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_OVR; + + /* Clear OVR flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_OVR); + } + + /* SMBUS Arbitration Loss error interrupt occurred ------------------------------------*/ + if (((itflags & SMBUS_FLAG_ARLO) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ARLO; + + /* Clear ARLO flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ARLO); + } + + /* SMBUS Timeout error interrupt occurred ---------------------------------------------*/ + if (((itflags & SMBUS_FLAG_TIMEOUT) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BUSTIMEOUT; + + /* Clear TIMEOUT flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_TIMEOUT); + } + + /* SMBUS Alert error interrupt occurred -----------------------------------------------*/ + if (((itflags & SMBUS_FLAG_ALERT) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ALERT; + + /* Clear ALERT flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT); + } + + /* SMBUS Packet Error Check error interrupt occurred ----------------------------------*/ + if (((itflags & SMBUS_FLAG_PECERR) != RESET) && ((itsources & SMBUS_IT_ERRI) != RESET)) + { + hsmbus->ErrorCode |= HAL_SMBUS_ERROR_PECERR; + + /* Clear PEC error flag */ + __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_PECERR); + } + + /* Call the Error Callback in case of Error detected */ + if ((hsmbus->ErrorCode != HAL_SMBUS_ERROR_NONE) && (hsmbus->ErrorCode != HAL_SMBUS_ERROR_ACKF)) + { + /* Do not Reset the HAL state in case of ALERT error */ + if ((hsmbus->ErrorCode & HAL_SMBUS_ERROR_ALERT) != HAL_SMBUS_ERROR_ALERT) + { + if (((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) + || ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX)) + { + /* Reset only HAL_SMBUS_STATE_SLAVE_BUSY_XX */ + /* keep HAL_SMBUS_STATE_LISTEN if set */ + hsmbus->PreviousState = HAL_SMBUS_STATE_READY; + hsmbus->State = HAL_SMBUS_STATE_LISTEN; + } + } + + /* Call the Error callback to inform upper layer */ + HAL_SMBUS_ErrorCallback(hsmbus); + } +} + /** * @brief Handle SMBUS Communication Timeout. * @param hsmbus Pointer to a SMBUS_HandleTypeDef structure that contains @@ -2010,26 +2027,26 @@ static HAL_StatusTypeDef SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint16_t * @param Timeout Timeout duration * @retval HAL status */ -static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbus, uint32_t Flag, FlagStatus Status, uint32_t Timeout) -{ +static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbus, uint32_t Flag, FlagStatus Status, uint32_t Timeout) +{ uint32_t tickstart = HAL_GetTick(); - + /* Wait until flag is set */ - if(Status == RESET) - { - while(__HAL_SMBUS_GET_FLAG(hsmbus, Flag) == RESET) + if (Status == RESET) + { + while (__HAL_SMBUS_GET_FLAG(hsmbus, Flag) == RESET) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if (Timeout != HAL_MAX_DELAY) { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) { hsmbus->PreviousState = hsmbus->State; - hsmbus->State= HAL_SMBUS_STATE_READY; - + hsmbus->State = HAL_SMBUS_STATE_READY; + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + return HAL_TIMEOUT; } } @@ -2037,25 +2054,25 @@ static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbu } else { - while(__HAL_SMBUS_GET_FLAG(hsmbus, Flag) != RESET) + while (__HAL_SMBUS_GET_FLAG(hsmbus, Flag) != RESET) { /* Check for the Timeout */ - if(Timeout != HAL_MAX_DELAY) + if (Timeout != HAL_MAX_DELAY) { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) { hsmbus->PreviousState = hsmbus->State; - hsmbus->State= HAL_SMBUS_STATE_READY; - + hsmbus->State = HAL_SMBUS_STATE_READY; + /* Process Unlocked */ __HAL_UNLOCK(hsmbus); - + return HAL_TIMEOUT; } } } } - return HAL_OK; + return HAL_OK; } /** @@ -2080,26 +2097,15 @@ static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbu */ static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t Size, uint32_t Mode, uint32_t Request) { - uint32_t tmpreg = 0U; - /* Check the parameters */ assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); assert_param(IS_SMBUS_TRANSFER_MODE(Mode)); assert_param(IS_SMBUS_TRANSFER_REQUEST(Request)); - - /* Get the CR2 register value */ - tmpreg = hsmbus->Instance->CR2; - - /* clear tmpreg specific bits */ - tmpreg &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP | I2C_CR2_PECBYTE)); - - /* update tmpreg */ - tmpreg |= (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << 16U ) & I2C_CR2_NBYTES) | \ - (uint32_t)Mode | (uint32_t)Request); - + /* update CR2 register */ - hsmbus->Instance->CR2 = tmpreg; -} + MODIFY_REG(hsmbus->Instance->CR2, ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | I2C_CR2_START | I2C_CR2_STOP | I2C_CR2_PECBYTE)), \ + (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | (uint32_t)Mode | (uint32_t)Request)); +} /** * @brief Convert SMBUSx OTHER_xxx XferOptions to functionnal XferOptions. @@ -2111,14 +2117,14 @@ static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus) /* if user set XferOptions to SMBUS_OTHER_FRAME_NO_PEC */ /* it request implicitly to generate a restart condition */ /* set XferOptions to SMBUS_FIRST_FRAME */ - if(hsmbus->XferOptions == SMBUS_OTHER_FRAME_NO_PEC) + if (hsmbus->XferOptions == SMBUS_OTHER_FRAME_NO_PEC) { hsmbus->XferOptions = SMBUS_FIRST_FRAME; } /* else if user set XferOptions to SMBUS_OTHER_FRAME_WITH_PEC */ /* it request implicitly to generate a restart condition */ /* set XferOptions to SMBUS_FIRST_FRAME | SMBUS_SENDPEC_MODE */ - else if(hsmbus->XferOptions == SMBUS_OTHER_FRAME_WITH_PEC) + else if (hsmbus->XferOptions == SMBUS_OTHER_FRAME_WITH_PEC) { hsmbus->XferOptions = SMBUS_FIRST_FRAME | SMBUS_SENDPEC_MODE; } @@ -2126,7 +2132,7 @@ static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus) /* it request implicitly to generate a restart condition */ /* then generate a stop condition at the end of transfer */ /* set XferOptions to SMBUS_FIRST_AND_LAST_FRAME_NO_PEC */ - else if(hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_NO_PEC) + else if (hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_NO_PEC) { hsmbus->XferOptions = SMBUS_FIRST_AND_LAST_FRAME_NO_PEC; } @@ -2134,7 +2140,7 @@ static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus) /* it request implicitly to generate a restart condition */ /* then generate a stop condition at the end of transfer */ /* set XferOptions to SMBUS_FIRST_AND_LAST_FRAME_WITH_PEC */ - else if(hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC) + else if (hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC) { hsmbus->XferOptions = SMBUS_FIRST_AND_LAST_FRAME_WITH_PEC; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.h index 9582dc5188..bc7dba982d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_smbus.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_smbus.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SMBUS HAL module. ****************************************************************************** * @attention @@ -40,11 +38,11 @@ #define __STM32L4xx_HAL_SMBUS_H #ifdef __cplusplus - extern "C" { +extern "C" { #endif /* Includes ------------------------------------------------------------------*/ -#include "stm32l4xx_hal_def.h" +#include "stm32l4xx_hal_def.h" /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -52,25 +50,25 @@ /** @addtogroup SMBUS * @{ - */ + */ -/* Exported types ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ /** @defgroup SMBUS_Exported_Types SMBUS Exported Types * @{ - */ - + */ + /** @defgroup SMBUS_Configuration_Structure_definition SMBUS Configuration Structure definition - * @brief SMBUS Configuration Structure definition + * @brief SMBUS Configuration Structure definition * @{ */ typedef struct { uint32_t Timing; /*!< Specifies the SMBUS_TIMINGR_register value. - This parameter calculated by referring to SMBUS initialization + This parameter calculated by referring to SMBUS initialization section in Reference manual */ uint32_t AnalogFilter; /*!< Specifies if Analog Filter is enable or not. This parameter can be a value of @ref SMBUS_Analog_Filter */ - + uint32_t OwnAddress1; /*!< Specifies the first device own address. This parameter can be a 7-bit or 10-bit address. */ @@ -99,51 +97,51 @@ typedef struct This parameter can be a value of @ref SMBUS_peripheral_mode */ uint32_t SMBusTimeout; /*!< Specifies the content of the 32 Bits SMBUS_TIMEOUT_register value. - (Enable bits and different timeout values) - This parameter calculated by referring to SMBUS initialization + (Enable bits and different timeout values) + This parameter calculated by referring to SMBUS initialization section in Reference manual */ } SMBUS_InitTypeDef; -/** +/** * @} */ /** @defgroup HAL_state_definition HAL state definition - * @brief HAL State definition + * @brief HAL State definition * @{ - */ + */ #define HAL_SMBUS_STATE_RESET (0x00000000U) /*!< SMBUS not yet initialized or disabled */ #define HAL_SMBUS_STATE_READY (0x00000001U) /*!< SMBUS initialized and ready for use */ #define HAL_SMBUS_STATE_BUSY (0x00000002U) /*!< SMBUS internal process is ongoing */ -#define HAL_SMBUS_STATE_MASTER_BUSY_TX (0x00000012U) /*!< Master Data Transmission process is ongoing */ +#define HAL_SMBUS_STATE_MASTER_BUSY_TX (0x00000012U) /*!< Master Data Transmission process is ongoing */ #define HAL_SMBUS_STATE_MASTER_BUSY_RX (0x00000022U) /*!< Master Data Reception process is ongoing */ -#define HAL_SMBUS_STATE_SLAVE_BUSY_TX (0x00000032U) /*!< Slave Data Transmission process is ongoing */ +#define HAL_SMBUS_STATE_SLAVE_BUSY_TX (0x00000032U) /*!< Slave Data Transmission process is ongoing */ #define HAL_SMBUS_STATE_SLAVE_BUSY_RX (0x00000042U) /*!< Slave Data Reception process is ongoing */ -#define HAL_SMBUS_STATE_TIMEOUT (0x00000003U) /*!< Timeout state */ -#define HAL_SMBUS_STATE_ERROR (0x00000004U) /*!< Reception process is ongoing */ +#define HAL_SMBUS_STATE_TIMEOUT (0x00000003U) /*!< Timeout state */ +#define HAL_SMBUS_STATE_ERROR (0x00000004U) /*!< Reception process is ongoing */ #define HAL_SMBUS_STATE_LISTEN (0x00000008U) /*!< Address Listen Mode is ongoing */ -/** +/** * @} */ /** @defgroup SMBUS_Error_Code_definition SMBUS Error Code definition - * @brief SMBUS Error Code definition + * @brief SMBUS Error Code definition * @{ - */ + */ #define HAL_SMBUS_ERROR_NONE (0x00000000U) /*!< No error */ #define HAL_SMBUS_ERROR_BERR (0x00000001U) /*!< BERR error */ -#define HAL_SMBUS_ERROR_ARLO (0x00000002U) /*!< ARLO error */ +#define HAL_SMBUS_ERROR_ARLO (0x00000002U) /*!< ARLO error */ #define HAL_SMBUS_ERROR_ACKF (0x00000004U) /*!< ACKF error */ #define HAL_SMBUS_ERROR_OVR (0x00000008U) /*!< OVR error */ #define HAL_SMBUS_ERROR_HALTIMEOUT (0x00000010U) /*!< Timeout error */ #define HAL_SMBUS_ERROR_BUSTIMEOUT (0x00000020U) /*!< Bus Timeout error */ #define HAL_SMBUS_ERROR_ALERT (0x00000040U) /*!< Alert error */ #define HAL_SMBUS_ERROR_PECERR (0x00000080U) /*!< PEC error */ -/** +/** * @} */ -/** @defgroup SMBUS_handle_Structure_definition SMBUS handle Structure definition - * @brief SMBUS handle Structure definition +/** @defgroup SMBUS_handle_Structure_definition SMBUS handle Structure definition + * @brief SMBUS handle Structure definition * @{ */ typedef struct @@ -168,11 +166,11 @@ typedef struct __IO uint32_t ErrorCode; /*!< SMBUS Error code */ -}SMBUS_HandleTypeDef; +} SMBUS_HandleTypeDef; /** * @} */ - + /** * @} */ @@ -281,9 +279,9 @@ typedef struct */ #define SMBUS_NO_STARTSTOP (0x00000000U) -#define SMBUS_GENERATE_STOP I2C_CR2_STOP -#define SMBUS_GENERATE_START_READ (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN) -#define SMBUS_GENERATE_START_WRITE I2C_CR2_START +#define SMBUS_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP) +#define SMBUS_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) +#define SMBUS_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) /** * @} */ @@ -298,7 +296,7 @@ typedef struct */ #define SMBUS_FIRST_FRAME SMBUS_SOFTEND_MODE #define SMBUS_NEXT_FRAME ((uint32_t)(SMBUS_RELOAD_MODE | SMBUS_SOFTEND_MODE)) -#define SMBUS_FIRST_AND_LAST_FRAME_NO_PEC SMBUS_AUTOEND_MODE +#define SMBUS_FIRST_AND_LAST_FRAME_NO_PEC SMBUS_AUTOEND_MODE #define SMBUS_LAST_FRAME_NO_PEC SMBUS_AUTOEND_MODE #define SMBUS_FIRST_AND_LAST_FRAME_WITH_PEC ((uint32_t)(SMBUS_AUTOEND_MODE | SMBUS_SENDPEC_MODE)) #define SMBUS_LAST_FRAME_WITH_PEC ((uint32_t)(SMBUS_AUTOEND_MODE | SMBUS_SENDPEC_MODE)) @@ -340,7 +338,7 @@ typedef struct * Elements values convention: 0xXXXXYYYY * - XXXXXXXX : Flag mask * @{ - */ + */ #define SMBUS_FLAG_TXE I2C_ISR_TXE #define SMBUS_FLAG_TXIS I2C_ISR_TXIS @@ -369,8 +367,8 @@ typedef struct /* Exported macros ------------------------------------------------------------*/ /** @defgroup SMBUS_Exported_Macros SMBUS Exported Macros * @{ - */ - + */ + /** @brief Reset SMBUS handle state. * @param __HANDLE__ specifies the SMBUS Handle. * @retval None @@ -388,7 +386,7 @@ typedef struct * @arg @ref SMBUS_IT_ADDRI Address match interrupt enable * @arg @ref SMBUS_IT_RXI RX interrupt enable * @arg @ref SMBUS_IT_TXI TX interrupt enable - * + * * @retval None */ #define __HAL_SMBUS_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__)) @@ -404,11 +402,11 @@ typedef struct * @arg @ref SMBUS_IT_ADDRI Address match interrupt enable * @arg @ref SMBUS_IT_RXI RX interrupt enable * @arg @ref SMBUS_IT_TXI TX interrupt enable - * + * * @retval None */ #define __HAL_SMBUS_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__))) - + /** @brief Check whether the specified SMBUS interrupt source is enabled or not. * @param __HANDLE__ specifies the SMBUS Handle. * @param __INTERRUPT__ specifies the SMBUS interrupt source to check. @@ -420,7 +418,7 @@ typedef struct * @arg @ref SMBUS_IT_ADDRI Address match interrupt enable * @arg @ref SMBUS_IT_RXI RX interrupt enable * @arg @ref SMBUS_IT_TXI TX interrupt enable - * + * * @retval The new state of __IT__ (TRUE or FALSE). */ #define __HAL_SMBUS_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) @@ -429,69 +427,69 @@ typedef struct * @param __HANDLE__ specifies the SMBUS Handle. * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: - * @arg @ref SMBUS_FLAG_TXE Transmit data register empty + * @arg @ref SMBUS_FLAG_TXE Transmit data register empty * @arg @ref SMBUS_FLAG_TXIS Transmit interrupt status * @arg @ref SMBUS_FLAG_RXNE Receive data register not empty * @arg @ref SMBUS_FLAG_ADDR Address matched (slave mode) - * @arg @ref SMBUS_FLAG_AF NACK received flag + * @arg @ref SMBUS_FLAG_AF NACK received flag * @arg @ref SMBUS_FLAG_STOPF STOP detection flag - * @arg @ref SMBUS_FLAG_TC Transfer complete (master mode) - * @arg @ref SMBUS_FLAG_TCR Transfer complete reload + * @arg @ref SMBUS_FLAG_TC Transfer complete (master mode) + * @arg @ref SMBUS_FLAG_TCR Transfer complete reload * @arg @ref SMBUS_FLAG_BERR Bus error * @arg @ref SMBUS_FLAG_ARLO Arbitration lost - * @arg @ref SMBUS_FLAG_OVR Overrun/Underrun + * @arg @ref SMBUS_FLAG_OVR Overrun/Underrun * @arg @ref SMBUS_FLAG_PECERR PEC error in reception - * @arg @ref SMBUS_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref SMBUS_FLAG_TIMEOUT Timeout or Tlow detection flag * @arg @ref SMBUS_FLAG_ALERT SMBus alert * @arg @ref SMBUS_FLAG_BUSY Bus busy * @arg @ref SMBUS_FLAG_DIR Transfer direction (slave mode) - * + * * @retval The new state of __FLAG__ (TRUE or FALSE). */ #define SMBUS_FLAG_MASK (0x0001FFFFU) #define __HAL_SMBUS_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & ((__FLAG__) & SMBUS_FLAG_MASK)) == ((__FLAG__) & SMBUS_FLAG_MASK))) - + /** @brief Clear the SMBUS pending flags which are cleared by writing 1 in a specific bit. * @param __HANDLE__ specifies the SMBUS Handle. * @param __FLAG__ specifies the flag to clear. * This parameter can be any combination of the following values: * @arg @ref SMBUS_FLAG_ADDR Address matched (slave mode) - * @arg @ref SMBUS_FLAG_AF NACK received flag + * @arg @ref SMBUS_FLAG_AF NACK received flag * @arg @ref SMBUS_FLAG_STOPF STOP detection flag * @arg @ref SMBUS_FLAG_BERR Bus error * @arg @ref SMBUS_FLAG_ARLO Arbitration lost - * @arg @ref SMBUS_FLAG_OVR Overrun/Underrun + * @arg @ref SMBUS_FLAG_OVR Overrun/Underrun * @arg @ref SMBUS_FLAG_PECERR PEC error in reception - * @arg @ref SMBUS_FLAG_TIMEOUT Timeout or Tlow detection flag + * @arg @ref SMBUS_FLAG_TIMEOUT Timeout or Tlow detection flag * @arg @ref SMBUS_FLAG_ALERT SMBus alert - * + * * @retval None */ #define __HAL_SMBUS_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) - + /** @brief Enable the specified SMBUS peripheral. - * @param __HANDLE__ specifies the SMBUS Handle. + * @param __HANDLE__ specifies the SMBUS Handle. * @retval None */ #define __HAL_SMBUS_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) /** @brief Disable the specified SMBUS peripheral. - * @param __HANDLE__ specifies the SMBUS Handle. + * @param __HANDLE__ specifies the SMBUS Handle. * @retval None */ #define __HAL_SMBUS_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE)) /** @brief Generate a Non-Acknowledge SMBUS peripheral in Slave mode. - * @param __HANDLE__ specifies the SMBUS Handle. + * @param __HANDLE__ specifies the SMBUS Handle. * @retval None */ #define __HAL_SMBUS_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK)) /** * @} - */ - - + */ + + /* Private constants ---------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/ @@ -517,7 +515,7 @@ typedef struct ((MASK) == SMBUS_OA2_MASK04) || \ ((MASK) == SMBUS_OA2_MASK05) || \ ((MASK) == SMBUS_OA2_MASK06) || \ - ((MASK) == SMBUS_OA2_MASK07)) + ((MASK) == SMBUS_OA2_MASK07)) #define IS_SMBUS_GENERAL_CALL(CALL) (((CALL) == SMBUS_GENERALCALL_DISABLE) || \ ((CALL) == SMBUS_GENERALCALL_ENABLE)) @@ -540,8 +538,8 @@ typedef struct ((MODE) == (SMBUS_AUTOEND_MODE | SMBUS_SENDPEC_MODE)) || \ ((MODE) == (SMBUS_AUTOEND_MODE | SMBUS_RELOAD_MODE)) || \ ((MODE) == (SMBUS_AUTOEND_MODE | SMBUS_SENDPEC_MODE | SMBUS_RELOAD_MODE ))) - - + + #define IS_SMBUS_TRANSFER_REQUEST(REQUEST) (((REQUEST) == SMBUS_GENERATE_STOP) || \ ((REQUEST) == SMBUS_GENERATE_START_READ) || \ ((REQUEST) == SMBUS_GENERATE_START_WRITE) || \ @@ -581,7 +579,7 @@ typedef struct /** * @} - */ + */ /* Exported functions --------------------------------------------------------*/ /** @addtogroup SMBUS_Exported_Functions SMBUS Exported Functions @@ -591,13 +589,13 @@ typedef struct /** @addtogroup SMBUS_Exported_Functions_Group1 Initialization and de-initialization functions * @{ */ - + /* Initialization and de-initialization functions **********************************/ HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus); -HAL_StatusTypeDef HAL_SMBUS_DeInit (SMBUS_HandleTypeDef *hsmbus); +HAL_StatusTypeDef HAL_SMBUS_DeInit(SMBUS_HandleTypeDef *hsmbus); void HAL_SMBUS_MspInit(SMBUS_HandleTypeDef *hsmbus); void HAL_SMBUS_MspDeInit(SMBUS_HandleTypeDef *hsmbus); -HAL_StatusTypeDef HAL_SMBUS_ConfigAnalogFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t AnalogFilter); +HAL_StatusTypeDef HAL_SMBUS_ConfigAnalogFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t AnalogFilter); HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t DigitalFilter); /** @@ -607,7 +605,7 @@ HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uin /** @addtogroup SMBUS_Exported_Functions_Group2 Input and Output operation functions * @{ */ - + /* IO operation functions *****************************************************/ /** @addtogroup Blocking_mode_Polling Blocking mode Polling * @{ @@ -654,7 +652,7 @@ void HAL_SMBUS_ErrorCallback(SMBUS_HandleTypeDef *hsmbus); * @} */ -/** @addtogroup SMBUS_Exported_Functions_Group3 Peripheral State and Errors functions +/** @addtogroup SMBUS_Exported_Functions_Group3 Peripheral State and Errors functions * @{ */ @@ -668,7 +666,7 @@ uint32_t HAL_SMBUS_GetError(SMBUS_HandleTypeDef *hsmbus); /** * @} - */ + */ /* Private Functions ---------------------------------------------------------*/ /** @defgroup SMBUS_Private_Functions SMBUS Private Functions @@ -677,19 +675,19 @@ uint32_t HAL_SMBUS_GetError(SMBUS_HandleTypeDef *hsmbus); /* Private functions are defined in stm32l4xx_hal_smbus.c file */ /** * @} - */ + */ /** * @} - */ + */ /** * @} - */ + */ /** * @} - */ + */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c index 95068ef614..46029adbbb 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_spi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SPI HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Serial Peripheral Interface (SPI) peripheral: @@ -35,7 +33,7 @@ (+++) Enable the DMAx clock (+++) Configure the DMA handle parameters (+++) Configure the DMA Tx or Rx Stream/Channel - (+++) Associate the initialized hdma_tx handle to the hspi DMA Tx or Rx handle + (+++) Associate the initialized hdma_tx(or _rx) handle to the hspi DMA Tx or Rx handle (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx or Rx Stream/Channel (#) Program the Mode, BidirectionalMode , Data size, Baudrate Prescaler, NSS @@ -54,17 +52,15 @@ the HAL_SPI_DMAPause()/ HAL_SPI_DMAStop() only under the SPI callbacks [..] Master Receive mode restriction: - (#) In Master unidirectional receive-only mode (MSTR =1, BIDIMODE=0, RXONLY=0) or + (#) In Master unidirectional receive-only mode (MSTR =1, BIDIMODE=0, RXONLY=1) or bidirectional receive mode (MSTR=1, BIDIMODE=1, BIDIOE=0), to ensure that the SPI does not initiate a new transfer the following procedure has to be respected: (##) HAL_SPI_DeInit() (##) HAL_SPI_Init() [..] - The HAL drivers do not allow reaching all supported SPI frequencies in the different SPI - modes. Refer to the source code (stm32xxxx_hal_spi.c header) to get a summary of the - maximum SPI frequency that can be reached with a data size of 8 or 16 bits, depending on - the APBx peripheral clock frequency (fPCLK) used by the SPI instance. - + Using the HAL it is not possible to reach all supported SPI frequency with the differents SPI Modes, + the following table resume the max SPI frequency reached with data size 8bits/16bits, + according to frequency of the APBx Peripheral Clock (fPCLK) used by the SPI instance. @endverbatim @@ -267,7 +263,7 @@ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_ /** * @brief Initialize the SPI according to the specified parameters * in the SPI_InitTypeDef and initialize the associated handle. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval HAL status */ @@ -366,7 +362,7 @@ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) } #endif /* USE_SPI_CRC */ - /* Configure : NSS management, TI Mode, NSS Pulse, Data size and Rx Fifo Threshold */ + /* Configure : NSS management, TI Mode, NSS Pulse, Data size and Rx Fifo threshold */ WRITE_REG(hspi->Instance->CR2, (((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE) | hspi->Init.TIMode | hspi->Init.NSSPMode | hspi->Init.DataSize) | frxth); @@ -392,7 +388,7 @@ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) /** * @brief De-Initialize the SPI peripheral. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval HAL status */ @@ -426,7 +422,7 @@ HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi) /** * @brief Initialize the SPI MSP. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -442,7 +438,7 @@ __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi) /** * @brief De-Initialize the SPI MSP. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -495,11 +491,11 @@ __weak void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi) /** * @brief Transmit an amount of data in blocking mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer - * @param Size: amount of data to be sent - * @param Timeout: Timeout duration + * @param pData pointer to data buffer + * @param Size amount of data to be sent + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) @@ -507,7 +503,6 @@ HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint uint32_t tickstart = 0U; HAL_StatusTypeDef errorcode = HAL_OK; - /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); @@ -679,11 +674,11 @@ error: /** * @brief Receive an amount of data in blocking mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer - * @param Size: amount of data to be received - * @param Timeout: Timeout duration + * @param pData pointer to data buffer + * @param Size amount of data to be received + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) @@ -693,7 +688,6 @@ HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint1 #endif /* USE_SPI_CRC */ uint32_t tickstart = 0U; HAL_StatusTypeDef errorcode = HAL_OK; - if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) { @@ -747,12 +741,12 @@ HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint1 /* Set the Rx Fifo threshold */ if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) { - /* set fiforxthresold according the reception data length: 16bit */ + /* Set RX Fifo threshold according the reception data length: 16bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } else { - /* set fiforxthresold according the reception data length: 8bit */ + /* Set RX Fifo threshold according the reception data length: 8bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } @@ -910,12 +904,12 @@ error : /** * @brief Transmit and Receive an amount of data in blocking mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pTxData: pointer to transmission data buffer - * @param pRxData: pointer to reception data buffer - * @param Size: amount of data to be sent and received - * @param Timeout: Timeout duration + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer + * @param Size amount of data to be sent and received + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, @@ -929,7 +923,6 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxD /* Variable used to alternate Rx and Tx during transfer */ uint32_t txallowed = 1U; HAL_StatusTypeDef errorcode = HAL_OK; - /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); @@ -986,12 +979,12 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxD /* Set the Rx Fifo threshold */ if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (hspi->RxXferCount > 1U)) { - /* set fiforxthreshold according the reception data length: 16bit */ + /* Set fiforxthreshold according the reception data length: 16bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } else { - /* set fiforxthreshold according the reception data length: 8bit */ + /* Set fiforxthreshold according the reception data length: 8bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } @@ -1071,7 +1064,7 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxD } while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) { - /* check TXE flag */ + /* Check TXE flag */ if (txallowed && (hspi->TxXferCount > 0U) && (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))) { if (hspi->TxXferCount > 1U) @@ -1112,7 +1105,7 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxD hspi->RxXferCount -= 2U; if (hspi->RxXferCount <= 1U) { - /* set fiforxthresold before to switch on 8 bit data size */ + /* Set RX Fifo threshold before to switch on 8 bit data size */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } } @@ -1186,13 +1179,9 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxD /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - { - hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - } - - if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) { errorcode = HAL_ERROR; + hspi->ErrorCode = HAL_SPI_ERROR_FLAG; } error : @@ -1203,16 +1192,15 @@ error : /** * @brief Transmit an amount of data in non-blocking mode with Interrupt. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer - * @param Size: amount of data to be sent + * @param pData pointer to data buffer + * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) { HAL_StatusTypeDef errorcode = HAL_OK; - /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); @@ -1287,16 +1275,15 @@ error : /** * @brief Receive an amount of data in non-blocking mode with Interrupt. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer - * @param Size: amount of data to be sent + * @param pData pointer to data buffer + * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) { HAL_StatusTypeDef errorcode = HAL_OK; - if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) { @@ -1336,13 +1323,13 @@ HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, ui /* Check the data size to adapt Rx threshold and the set the function for IT treatment */ if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) { - /* Set fiforxthresold according the reception data length: 16 bit */ + /* Set RX Fifo threshold according the reception data length: 16 bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); hspi->RxISR = SPI_RxISR_16BIT; } else { - /* Set fiforxthresold according the reception data length: 8 bit */ + /* Set RX Fifo threshold according the reception data length: 8 bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); hspi->RxISR = SPI_RxISR_8BIT; } @@ -1392,18 +1379,17 @@ error : /** * @brief Transmit and Receive an amount of data in non-blocking mode with Interrupt. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pTxData: pointer to transmission data buffer - * @param pRxData: pointer to reception data buffer - * @param Size: amount of data to be sent and received + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer + * @param Size amount of data to be sent and received * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size) { uint32_t tmp = 0U, tmp1 = 0U; HAL_StatusTypeDef errorcode = HAL_OK; - /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); @@ -1474,12 +1460,12 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *p /* Check if packing mode is enabled and if there is more than 2 data to receive */ if ((hspi->Init.DataSize > SPI_DATASIZE_8BIT) || (hspi->RxXferCount >= 2U)) { - /* Set fiforxthresold according the reception data length: 16 bit */ + /* Set RX Fifo threshold according the reception data length: 16 bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } else { - /* Set fiforxthresold according the reception data length: 8 bit */ + /* Set RX Fifo threshold according the reception data length: 8 bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } @@ -1501,17 +1487,17 @@ error : /** * @brief Transmit an amount of data in non-blocking mode with DMA. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer - * @param Size: amount of data to be sent + * @param pData pointer to data buffer + * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) { HAL_StatusTypeDef errorcode = HAL_OK; - - /* check tx dma handle */ + + /* Check tx dma handle */ assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); /* Check Direction parameter */ @@ -1614,25 +1600,25 @@ error : /** * @brief Receive an amount of data in non-blocking mode with DMA. * @note In case of MASTER mode and SPI_DIRECTION_2LINES direction, hdmatx shall be defined. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pData: pointer to data buffer + * @param pData pointer to data buffer * @note When the CRC feature is enabled the pData Length must be Size + 1. - * @param Size: amount of data to be sent + * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) { HAL_StatusTypeDef errorcode = HAL_OK; - - /* check rx dma handle */ + + /* Check rx dma handle */ assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER)) { hspi->State = HAL_SPI_STATE_BUSY_RX; - - /* check tx dma handle */ + + /* Check tx dma handle */ assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ @@ -1685,17 +1671,17 @@ HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, u CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMARX); if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) { - /* Set fiforxthresold according the reception data length: 16bit */ + /* Set RX Fifo threshold according the reception data length: 16bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } else { - /* Set fiforxthresold according the reception data length: 8bit */ + /* Set RX Fifo threshold according the reception data length: 8bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) { - /* set fiforxthresold according the reception data length: 16bit */ + /* Set RX Fifo threshold according the reception data length: 16bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); if ((hspi->RxXferCount & 0x1U) == 0x0U) @@ -1747,12 +1733,12 @@ error: /** * @brief Transmit and Receive an amount of data in non-blocking mode with DMA. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param pTxData: pointer to transmission data buffer - * @param pRxData: pointer to reception data buffer + * @param pTxData pointer to transmission data buffer + * @param pRxData pointer to reception data buffer * @note When the CRC feature is enabled the pRxData Length must be Size + 1 - * @param Size: amount of data to be sent + * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, @@ -1760,8 +1746,8 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t * { uint32_t tmp = 0U, tmp1 = 0U; HAL_StatusTypeDef errorcode = HAL_OK; - - /* check rx & tx dma handles */ + + /* Check rx & tx dma handles */ assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx)); assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx)); @@ -1813,8 +1799,6 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t * } #endif /* USE_SPI_CRC */ - - /* Reset the threshold bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_CR2_LDMATX | SPI_CR2_LDMARX); @@ -1826,7 +1810,7 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t * } else { - /* Set fiforxthresold according the reception data length: 8bit */ + /* Set RX Fifo threshold according the reception data length: 8bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); if (hspi->hdmatx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) @@ -1845,7 +1829,7 @@ HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t * if (hspi->hdmarx->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD) { - /* Set fiforxthresold according the reception data length: 16bit */ + /* Set RX Fifo threshold according the reception data length: 16bit */ CLEAR_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); if ((hspi->RxXferCount & 0x1U) == 0x0U) @@ -2268,7 +2252,7 @@ HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi) /** * @brief Pause the DMA Transfer. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval HAL status */ @@ -2288,7 +2272,7 @@ HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi) /** * @brief Resume the DMA Transfer. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval HAL status */ @@ -2307,8 +2291,8 @@ HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi) } /** - * @brief Stop the DMA Transfer. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Stop the DMA Transfer. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval HAL status */ @@ -2339,7 +2323,7 @@ HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi) /** * @brief Handle SPI interrupt request. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval None */ @@ -2434,8 +2418,8 @@ void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) } /** - * @brief Tx Transfer completed callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Tx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2450,8 +2434,8 @@ __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief Rx Transfer completed callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Rx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2466,8 +2450,8 @@ __weak void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief Tx and Rx Transfer completed callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Tx and Rx Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2482,8 +2466,8 @@ __weak void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief Tx Half Transfer completed callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Tx Half Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2498,8 +2482,8 @@ __weak void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief Rx Half Transfer completed callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Rx Half Transfer completed callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2514,8 +2498,8 @@ __weak void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief Tx and Rx Half Transfer callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Tx and Rx Half Transfer callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2530,8 +2514,8 @@ __weak void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi) } /** - * @brief SPI error callback. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief SPI error callback. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -2584,7 +2568,7 @@ __weak void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) /** * @brief Return the SPI handle state. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval SPI state */ @@ -2596,7 +2580,7 @@ HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi) /** * @brief Return the SPI error code. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval SPI error code in bitmap format */ @@ -2620,8 +2604,8 @@ uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi) */ /** - * @brief DMA SPI transmit process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @brief DMA SPI transmit process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2667,8 +2651,8 @@ static void SPI_DMATransmitCplt(DMA_HandleTypeDef *hdma) } /** - * @brief DMA SPI receive process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @brief DMA SPI receive process complete callback. + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2759,7 +2743,7 @@ static void SPI_DMAReceiveCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SPI transmit receive process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2844,7 +2828,7 @@ static void SPI_DMATransmitReceiveCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SPI half transmit process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2857,7 +2841,7 @@ static void SPI_DMAHalfTransmitCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SPI half receive process complete callback - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2870,7 +2854,7 @@ static void SPI_DMAHalfReceiveCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SPI half transmit receive process complete callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -2883,7 +2867,7 @@ static void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA SPI communication error callback. - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA module. * @retval None */ @@ -3041,7 +3025,7 @@ static void SPI_DMARxAbortCallback(DMA_HandleTypeDef *hdma) /** * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3055,7 +3039,7 @@ static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) hspi->RxXferCount -= 2U; if (hspi->RxXferCount == 1U) { - /* set fiforxthresold according the reception data length: 8bit */ + /* Set RX Fifo threshold according the reception data length: 8bit */ SET_BIT(hspi->Instance->CR2, SPI_RXFIFO_THRESHOLD); } } @@ -3066,7 +3050,7 @@ static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) hspi->RxXferCount--; } - /* check end of the reception */ + /* Check end of the reception */ if (hspi->RxXferCount == 0U) { #if (USE_SPI_CRC != 0U) @@ -3091,7 +3075,7 @@ static void SPI_2linesRxISR_8BIT(struct __SPI_HandleTypeDef *hspi) #if (USE_SPI_CRC != 0U) /** * @brief Rx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3107,7 +3091,7 @@ static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) hspi->CRCSize--; - /* check end of the reception */ + /* Check end of the reception */ if (hspi->CRCSize == 0U) { /* Disable RXNE and ERR interrupt */ @@ -3123,7 +3107,7 @@ static void SPI_2linesRxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) /** * @brief Tx 8-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3143,7 +3127,7 @@ static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) hspi->TxXferCount--; } - /* check the end of the transmission */ + /* Check the end of the transmission */ if (hspi->TxXferCount == 0U) { #if (USE_SPI_CRC != 0U) @@ -3169,7 +3153,7 @@ static void SPI_2linesTxISR_8BIT(struct __SPI_HandleTypeDef *hspi) /** * @brief Rx 16-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3203,7 +3187,7 @@ static void SPI_2linesRxISR_16BIT(struct __SPI_HandleTypeDef *hspi) #if (USE_SPI_CRC != 0U) /** * @brief Manage the CRC 16-bit receive for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3227,7 +3211,7 @@ static void SPI_2linesRxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) /** * @brief Tx 16-bit handler for Transmit and Receive in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3265,7 +3249,7 @@ static void SPI_2linesTxISR_16BIT(struct __SPI_HandleTypeDef *hspi) #if (USE_SPI_CRC != 0U) /** * @brief Manage the CRC 8-bit receive in Interrupt context. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3290,7 +3274,7 @@ static void SPI_RxISR_8BITCRC(struct __SPI_HandleTypeDef *hspi) /** * @brief Manage the receive 8-bit in Interrupt context. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3323,7 +3307,7 @@ static void SPI_RxISR_8BIT(struct __SPI_HandleTypeDef *hspi) #if (USE_SPI_CRC != 0U) /** * @brief Manage the CRC 16-bit receive in Interrupt context. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3346,7 +3330,7 @@ static void SPI_RxISR_16BITCRC(struct __SPI_HandleTypeDef *hspi) /** * @brief Manage the 16-bit receive in Interrupt context. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3379,7 +3363,7 @@ static void SPI_RxISR_16BIT(struct __SPI_HandleTypeDef *hspi) /** * @brief Handle the data 8-bit transmit in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3403,7 +3387,7 @@ static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) /** * @brief Handle the data 16-bit transmit in Interrupt mode. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3428,13 +3412,13 @@ static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) } /** - * @brief Handle SPI Communication Timeout. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Handle SPI Communication Timeout. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param Flag: SPI flag to check - * @param State: flag state to check - * @param Timeout: Timeout duration - * @param Tickstart: tick start value + * @param Flag SPI flag to check + * @param State flag state to check + * @param Timeout Timeout duration + * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, uint32_t State, @@ -3480,13 +3464,13 @@ static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, } /** - * @brief Handle SPI FIFO Communication Timeout. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Handle SPI FIFO Communication Timeout. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param Fifo: Fifo to check - * @param State: Fifo state to check - * @param Timeout: Timeout duration - * @param Tickstart: tick start value + * @param Fifo Fifo to check + * @param State Fifo state to check + * @param Timeout Timeout duration + * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Fifo, uint32_t State, @@ -3542,10 +3526,10 @@ static HAL_StatusTypeDef SPI_WaitFifoStateUntilTimeout(SPI_HandleTypeDef *hspi, /** * @brief Handle the check of the RX transaction complete. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. - * @param Timeout: Timeout duration - * @param Tickstart: tick start value + * @param Timeout Timeout duration + * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) @@ -3579,9 +3563,9 @@ static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t /** * @brief Handle the check of the RXTX or TX transaction complete. - * @param hspi: SPI handle - * @param Timeout: Timeout duration - * @param Tickstart: tick start value + * @param hspi SPI handle + * @param Timeout Timeout duration + * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) @@ -3592,6 +3576,7 @@ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_ SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); return HAL_TIMEOUT; } + /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) { @@ -3605,12 +3590,13 @@ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_ SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); return HAL_TIMEOUT; } + return HAL_OK; } /** * @brief Handle the end of the RXTX transaction. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3667,7 +3653,7 @@ static void SPI_CloseRxTx_ISR(SPI_HandleTypeDef *hspi) /** * @brief Handle the end of the RX transaction. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3709,7 +3695,7 @@ static void SPI_CloseRx_ISR(SPI_HandleTypeDef *hspi) /** * @brief Handle the end of the TX transaction. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ @@ -3748,22 +3734,22 @@ static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) /** * @brief Handle abort a Rx transaction. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) { __IO uint32_t count; - + /* Disable SPI Peripheral */ __HAL_SPI_DISABLE(hspi); - + count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */ CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE)); - + /* Check RXNEIE is disabled */ do { @@ -3792,19 +3778,19 @@ static void SPI_AbortRx_ISR(SPI_HandleTypeDef *hspi) /** * @brief Handle abort a Tx or Rx/Tx transaction. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ static void SPI_AbortTx_ISR(SPI_HandleTypeDef *hspi) { __IO uint32_t count; - + count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); - + /* Disable TXEIE, RXNEIE and ERRIE(mode fault event, overrun error, TI frame error) interrupts */ CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXEIE | SPI_CR2_RXNEIE | SPI_CR2_ERRIE)); - + /* Check TXEIE is disabled */ do { diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.h index 0be73f9243..3aa540374e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_spi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SPI HAL module. ****************************************************************************** * @attention @@ -398,16 +396,16 @@ typedef struct __SPI_HandleTypeDef */ /** @brief Reset SPI handle state. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET) /** @brief Enable the specified SPI interrupts. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__: specifies the interrupt source to enable. + * @param __INTERRUPT__ specifies the interrupt source to enable. * This parameter can be one of the following values: * @arg SPI_IT_TXE: Tx buffer empty interrupt enable * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable @@ -417,9 +415,9 @@ typedef struct __SPI_HandleTypeDef #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) /** @brief Disable the specified SPI interrupts. - * @param __HANDLE__: specifies the SPI handle. + * @param __HANDLE__ specifies the SPI handle. * This parameter can be SPIx where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__: specifies the interrupt source to disable. + * @param __INTERRUPT__ specifies the interrupt source to disable. * This parameter can be one of the following values: * @arg SPI_IT_TXE: Tx buffer empty interrupt enable * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable @@ -429,9 +427,9 @@ typedef struct __SPI_HandleTypeDef #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__)) /** @brief Check whether the specified SPI interrupt source is enabled or not. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __INTERRUPT__: specifies the SPI interrupt source to check. + * @param __INTERRUPT__ specifies the SPI interrupt source to check. * This parameter can be one of the following values: * @arg SPI_IT_TXE: Tx buffer empty interrupt enable * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable @@ -441,9 +439,9 @@ typedef struct __SPI_HandleTypeDef #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) /** @brief Check whether the specified SPI flag is set or not. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. - * @param __FLAG__: specifies the flag to check. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: * @arg SPI_FLAG_RXNE: Receive buffer not empty flag * @arg SPI_FLAG_TXE: Transmit buffer empty flag @@ -459,14 +457,14 @@ typedef struct __SPI_HandleTypeDef #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) /** @brief Clear the SPI CRCERR pending flag. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR)) /** @brief Clear the SPI MODF pending flag. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ @@ -479,7 +477,7 @@ typedef struct __SPI_HandleTypeDef } while(0U) /** @brief Clear the SPI OVR pending flag. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ @@ -492,7 +490,7 @@ typedef struct __SPI_HandleTypeDef } while(0U) /** @brief Clear the SPI FRE pending flag. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ @@ -504,14 +502,14 @@ typedef struct __SPI_HandleTypeDef }while(0U) /** @brief Enable the SPI peripheral. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE) /** @brief Disable the SPI peripheral. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ @@ -527,92 +525,168 @@ typedef struct __SPI_HandleTypeDef */ /** @brief Set the SPI transmit-only mode. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) /** @brief Set the SPI receive-only mode. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) /** @brief Reset the CRC calculation of the SPI. - * @param __HANDLE__: specifies the SPI Handle. + * @param __HANDLE__ specifies the SPI Handle. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. * @retval None */ #define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\ SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0U) -#define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \ - ((MODE) == SPI_MODE_MASTER)) +/** @brief Checks if SPI Mode parameter is in allowed range. + * @param __MODE__ specifies the SPI Mode. + * This parameter can be a value of @ref SPI_Mode + * @retval None + */ +#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || \ + ((__MODE__) == SPI_MODE_MASTER)) -#define IS_SPI_DIRECTION(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ - ((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \ - ((MODE) == SPI_DIRECTION_1LINE)) +/** @brief Checks if SPI Direction Mode parameter is in allowed range. + * @param __MODE__ specifies the SPI Direction Mode. + * This parameter can be a value of @ref SPI_Direction + * @retval None + */ +#define IS_SPI_DIRECTION(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ + ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \ + ((__MODE__) == SPI_DIRECTION_1LINE)) -#define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES) +/** @brief Checks if SPI Direction Mode parameter is 2 lines. + * @param __MODE__ specifies the SPI Direction Mode. + * @retval None + */ +#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES) -#define IS_SPI_DIRECTION_2LINES_OR_1LINE(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ - ((MODE) == SPI_DIRECTION_1LINE)) +/** @brief Checks if SPI Direction Mode parameter is 1 or 2 lines. + * @param __MODE__ specifies the SPI Direction Mode. + * @retval None + */ +#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES) || \ + ((__MODE__) == SPI_DIRECTION_1LINE)) -#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \ - ((DATASIZE) == SPI_DATASIZE_15BIT) || \ - ((DATASIZE) == SPI_DATASIZE_14BIT) || \ - ((DATASIZE) == SPI_DATASIZE_13BIT) || \ - ((DATASIZE) == SPI_DATASIZE_12BIT) || \ - ((DATASIZE) == SPI_DATASIZE_11BIT) || \ - ((DATASIZE) == SPI_DATASIZE_10BIT) || \ - ((DATASIZE) == SPI_DATASIZE_9BIT) || \ - ((DATASIZE) == SPI_DATASIZE_8BIT) || \ - ((DATASIZE) == SPI_DATASIZE_7BIT) || \ - ((DATASIZE) == SPI_DATASIZE_6BIT) || \ - ((DATASIZE) == SPI_DATASIZE_5BIT) || \ - ((DATASIZE) == SPI_DATASIZE_4BIT)) +/** @brief Checks if SPI Data Size parameter is in allowed range. + * @param __DATASIZE__ specifies the SPI Data Size. + * This parameter can be a value of @ref SPI_Data_Size + * @retval None + */ +#define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_15BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_14BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_13BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_12BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_11BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_10BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_9BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_8BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_7BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_6BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_5BIT) || \ + ((__DATASIZE__) == SPI_DATASIZE_4BIT)) -#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \ - ((CPOL) == SPI_POLARITY_HIGH)) +/** @brief Checks if SPI Serial clock steady state parameter is in allowed range. + * @param __CPOL__ specifies the SPI serial clock steady state. + * This parameter can be a value of @ref SPI_Clock_Polarity + * @retval None + */ +#define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \ + ((__CPOL__) == SPI_POLARITY_HIGH)) -#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \ - ((CPHA) == SPI_PHASE_2EDGE)) +/** @brief Checks if SPI Clock Phase parameter is in allowed range. + * @param __CPHA__ specifies the SPI Clock Phase. + * This parameter can be a value of @ref SPI_Clock_Phase + * @retval None + */ +#define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \ + ((__CPHA__) == SPI_PHASE_2EDGE)) -#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \ - ((NSS) == SPI_NSS_HARD_INPUT) || \ - ((NSS) == SPI_NSS_HARD_OUTPUT)) +/** @brief Checks if SPI Slave Select parameter is in allowed range. + * @param __NSS__ specifies the SPI Slave Slelect management parameter. + * This parameter can be a value of @ref SPI_Slave_Select_management + * @retval None + */ +#define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT) || \ + ((__NSS__) == SPI_NSS_HARD_INPUT) || \ + ((__NSS__) == SPI_NSS_HARD_OUTPUT)) -#define IS_SPI_NSSP(NSSP) (((NSSP) == SPI_NSS_PULSE_ENABLE) || \ - ((NSSP) == SPI_NSS_PULSE_DISABLE)) +/** @brief Checks if SPI NSS Pulse parameter is in allowed range. + * @param __NSSP__ specifies the SPI NSS Pulse Mode parameter. + * This parameter can be a value of @ref SPI_NSSP_Mode + * @retval None + */ +#define IS_SPI_NSSP(__NSSP__) (((__NSSP__) == SPI_NSS_PULSE_ENABLE) || \ + ((__NSSP__) == SPI_NSS_PULSE_DISABLE)) -#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \ - ((PRESCALER) == SPI_BAUDRATEPRESCALER_256)) +/** @brief Checks if SPI Baudrate prescaler parameter is in allowed range. + * @param __PRESCALER__ specifies the SPI Baudrate prescaler. + * This parameter can be a value of @ref SPI_BaudRate_Prescaler + * @retval None + */ +#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \ + ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256)) -#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \ - ((BIT) == SPI_FIRSTBIT_LSB)) +/** @brief Checks if SPI MSB LSB transmission parameter is in allowed range. + * @param __BIT__ specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit). + * This parameter can be a value of @ref SPI_MSB_LSB_transmission + * @retval None + */ +#define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \ + ((__BIT__) == SPI_FIRSTBIT_LSB)) -#define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLE) || \ - ((MODE) == SPI_TIMODE_ENABLE)) +/** @brief Checks if SPI TI mode parameter is in allowed range. + * @param __MODE__ specifies the SPI TI mode. + * This parameter can be a value of @ref SPI_TI_mode + * @retval None + */ +#define IS_SPI_TIMODE(__MODE__) (((__MODE__) == SPI_TIMODE_DISABLE) || \ + ((__MODE__) == SPI_TIMODE_ENABLE)) -#define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \ - ((CALCULATION) == SPI_CRCCALCULATION_ENABLE)) +/** @brief Checks if SPI CRC calculation enabled state is in allowed range. + * @param __CALCULATION__ specifies the SPI CRC calculation enable state. + * This parameter can be a value of @ref SPI_CRC_Calculation + * @retval None + */ +#define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \ + ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE)) -#define IS_SPI_CRC_LENGTH(LENGTH) (((LENGTH) == SPI_CRC_LENGTH_DATASIZE) ||\ - ((LENGTH) == SPI_CRC_LENGTH_8BIT) || \ - ((LENGTH) == SPI_CRC_LENGTH_16BIT)) +/** @brief Checks if SPI CRC length is in allowed range. + * @param __LENGTH__ specifies the SPI CRC length. + * This parameter can be a value of @ref SPI_CRC_length + * @retval None + */ +#define IS_SPI_CRC_LENGTH(__LENGTH__) (((__LENGTH__) == SPI_CRC_LENGTH_DATASIZE) ||\ + ((__LENGTH__) == SPI_CRC_LENGTH_8BIT) || \ + ((__LENGTH__) == SPI_CRC_LENGTH_16BIT)) -#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (((POLYNOMIAL) >= 0x1U) && ((POLYNOMIAL) <= 0xFFFFU) && (((POLYNOMIAL)&0x1U) != 0U)) - -#define IS_SPI_DMA_HANDLE(HANDLE) ((HANDLE) != NULL) +/** @brief Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range. + * @param __POLYNOMIAL__ specifies the SPI polynomial value to be used for the CRC calculation. + * This parameter must be a number between Min_Data = 0 and Max_Data = 65535 + * @retval None + */ +#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1U) && ((__POLYNOMIAL__) <= 0xFFFFU) && (((__POLYNOMIAL__)&0x1U) != 0U)) +/** @brief Checks if DMA handle is valid. + * @param __HANDLE__ specifies a DMA Handle. + * @retval None + */ +#define IS_SPI_DMA_HANDLE(__HANDLE__) ((__HANDLE__) != NULL) /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.c index 543a289eb7..813a8ff429 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_spi_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended SPI HAL module driver. * This file provides firmware functions to manage the following * SPI peripheral extended functionalities : @@ -65,7 +63,7 @@ /* Private macros ------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ -/* Exported functions ---------------------------------------------------------*/ +/* Exported functions --------------------------------------------------------*/ /** @defgroup SPIEx_Exported_Functions SPIEx Exported Functions * @{ @@ -90,8 +88,8 @@ */ /** - * @brief Flush the RX fifo. - * @param hspi: pointer to a SPI_HandleTypeDef structure that contains + * @brief Flush the RX fifo. + * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval HAL status */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.h index 1835b59de3..99261d60be 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_spi_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SPI HAL Extended module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.c index caec73775b..69aa39213e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sram.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SRAM HAL module driver. * This file provides a generic firmware to drive SRAM memories * mounted as external device. @@ -95,7 +93,8 @@ #include "stm32l4xx_hal.h" #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_HAL_Driver * @{ @@ -695,5 +694,6 @@ HAL_SRAM_StateTypeDef HAL_SRAM_GetState(SRAM_HandleTypeDef *hsram) #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.h index 4c3cb948f3..9eea5ab71b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_sram.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_sram.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SRAM HAL module. ****************************************************************************** * @attention @@ -44,7 +42,8 @@ #endif #if defined(STM32L471xx) || defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_fmc.h" @@ -192,6 +191,7 @@ HAL_SRAM_StateTypeDef HAL_SRAM_GetState(SRAM_HandleTypeDef *hsram); #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.c index 19e029ec23..68b1309688 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_swpmi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SWPMI HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Single Wire Protocol Master Interface (SWPMI). diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.h index 1f78f9d82e..2df60ff9ac 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_swpmi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_swpmi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SWPMI HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.c index 3b2fd25ce5..f60505f99c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tim.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief TIM HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Timer (TIM) peripheral: @@ -192,7 +190,11 @@ static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, /** * @brief Initializes the TIM Time base Unit according to the specified * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @param htim: TIM Base handle + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() + * @param htim TIM Base handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) @@ -207,6 +209,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) assert_param(IS_TIM_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if(htim->State == HAL_TIM_STATE_RESET) { @@ -231,7 +234,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) /** * @brief DeInitialize the TIM Base peripheral - * @param htim: TIM Base handle + * @param htim TIM Base handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) @@ -258,7 +261,7 @@ HAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Base MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) @@ -273,7 +276,7 @@ __weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM Base MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) @@ -289,7 +292,7 @@ __weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Base generation. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) @@ -312,7 +315,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) /** * @brief Stops the TIM Base generation. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) @@ -335,7 +338,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Base generation in interrupt mode. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) @@ -355,7 +358,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) /** * @brief Stops the TIM Base generation in interrupt mode. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) @@ -374,9 +377,9 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Base generation in DMA mode. - * @param htim : TIM handle - * @param pData: The source Buffer address. - * @param Length: The length of data to be transferred from memory to peripheral. + * @param htim TIM handle + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to peripheral. * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) @@ -420,7 +423,7 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat /** * @brief Stops the TIM Base generation in DMA mode. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) @@ -469,7 +472,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Output Compare according to the specified * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @param htim: TIM Output Compare handle + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() + * @param htim TIM Output Compare handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef* htim) @@ -484,6 +491,7 @@ HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef* htim) assert_param(IS_TIM_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if(htim->State == HAL_TIM_STATE_RESET) { @@ -508,7 +516,7 @@ HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef* htim) /** * @brief DeInitialize the TIM peripheral - * @param htim: TIM Output Compare handle + * @param htim TIM Output Compare handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) @@ -535,7 +543,7 @@ HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Output Compare MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) @@ -550,7 +558,7 @@ __weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM Output Compare MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) @@ -565,8 +573,8 @@ __weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Output Compare signal generation. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -599,8 +607,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Stops the TIM Output Compare signal generation. - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -633,8 +641,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the TIM Output Compare signal generation in interrupt mode. - * @param htim : TIM OC handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM OC handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -701,8 +709,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Stops the TIM Output Compare signal generation in interrupt mode. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -769,8 +777,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the TIM Output Compare signal generation in DMA mode. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -778,8 +786,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @arg TIM_CHANNEL_5: TIM Channel 5 selected * @arg TIM_CHANNEL_6: TIM Channel 6 selected - * @param pData: The source Buffer address. - * @param Length: The length of data to be transferred from memory to TIM peripheral + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) @@ -890,8 +898,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Stops the TIM Output Compare signal generation in DMA mode. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -987,7 +995,11 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Initializes the TIM PWM Time Base according to the specified * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @param htim: TIM handle + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) @@ -1002,6 +1014,7 @@ HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) assert_param(IS_TIM_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if(htim->State == HAL_TIM_STATE_RESET) { @@ -1026,7 +1039,7 @@ HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) /** * @brief DeInitialize the TIM peripheral - * @param htim: TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) @@ -1053,7 +1066,7 @@ HAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM PWM MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) @@ -1068,7 +1081,7 @@ __weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM PWM MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) @@ -1083,8 +1096,8 @@ __weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the PWM signal generation. - * @param htim : TIM handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1117,8 +1130,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Stops the PWM signal generation. - * @param htim : TIM handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1154,8 +1167,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the PWM signal generation in interrupt mode. - * @param htim : TIM handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1220,8 +1233,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Stops the PWM signal generation in interrupt mode. - * @param htim : TIM handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1286,15 +1299,15 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Starts the TIM PWM signal generation in DMA mode. - * @param htim : TIM handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData: The source Buffer address. - * @param Length: The length of data to be transferred from memory to TIM peripheral + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) @@ -1405,8 +1418,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe /** * @brief Stops the TIM PWM signal generation in DMA mode. - * @param htim : TIM handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1500,7 +1513,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Initializes the TIM Input Capture Time base according to the specified * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @param htim: TIM Input Capture handle + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init() + * @param htim TIM Input Capture handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) @@ -1515,6 +1532,7 @@ HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) assert_param(IS_TIM_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if(htim->State == HAL_TIM_STATE_RESET) { @@ -1539,7 +1557,7 @@ HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) /** * @brief DeInitialize the TIM peripheral - * @param htim: TIM Input Capture handle + * @param htim TIM Input Capture handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) @@ -1566,7 +1584,7 @@ HAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM INput Capture MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) @@ -1581,7 +1599,7 @@ __weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM Input Capture MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) @@ -1596,8 +1614,8 @@ __weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Input Capture measurement. - * @param htim : TIM Input Capture handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1622,8 +1640,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Start (TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Stops the TIM Input Capture measurement. - * @param htim : TIM handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1648,8 +1666,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the TIM Input Capture measurement in interrupt mode. - * @param htim : TIM Input Capture handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1707,8 +1725,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_IT (TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Stops the TIM Input Capture measurement in interrupt mode. - * @param htim : TIM handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1767,15 +1785,15 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the TIM Input Capture measurement on in DMA mode. - * @param htim : TIM Input Capture handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData: The destination Buffer address. - * @param Length: The length of data to be transferred from TIM peripheral to memory. + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) @@ -1881,9 +1899,9 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel } /** - * @brief Stops the TIM Input Capture measurement on in DMA mode. - * @param htim : TIM Input Capture handle - * @param Channel : TIM Channels to be disabled + * @brief Stops the TIM Input Capture measurement in DMA mode. + * @param htim TIM Input Capture handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1971,8 +1989,12 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Initializes the TIM One Pulse Time Base according to the specified * parameters in the TIM_HandleTypeDef and initialize the associated handle. - * @param htim: TIM OnePulse handle - * @param OnePulseMode: Select the One pulse mode. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init() + * @param htim TIM OnePulse handle + * @param OnePulseMode Select the One pulse mode. * This parameter can be one of the following values: * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. @@ -1991,6 +2013,7 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePul assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); assert_param(IS_TIM_OPM_MODE(OnePulseMode)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if(htim->State == HAL_TIM_STATE_RESET) { @@ -2021,7 +2044,7 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePul /** * @brief DeInitialize the TIM One Pulse - * @param htim: TIM One Pulse handle + * @param htim TIM One Pulse handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) @@ -2048,7 +2071,7 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM One Pulse MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) @@ -2063,7 +2086,7 @@ __weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM One Pulse MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) @@ -2078,8 +2101,8 @@ __weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM One Pulse signal generation. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channels to be enabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2114,8 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t Outpu /** * @brief Stops the TIM One Pulse signal generation. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channels to be disable + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channels to be disable * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2150,8 +2173,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t Output /** * @brief Starts the TIM One Pulse signal generation in interrupt mode. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channels to be enabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2192,8 +2215,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t Ou /** * @brief Stops the TIM One Pulse signal generation in interrupt mode. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channels to be enabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2258,8 +2281,12 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out */ /** * @brief Initializes the TIM Encoder Interface and initialize the associated handle. - * @param htim: TIM Encoder Interface handle - * @param sConfig: TIM Encoder Interface configuration structure + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. + * Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init() + * @param htim TIM Encoder Interface handle + * @param sConfig TIM Encoder Interface configuration structure * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef* sConfig) @@ -2276,6 +2303,9 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini /* Check the parameters */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode)); assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection)); assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection)); @@ -2349,7 +2379,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini /** * @brief DeInitialize the TIM Encoder interface - * @param htim: TIM Encoder handle + * @param htim TIM Encoder handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) @@ -2376,7 +2406,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Encoder Interface MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) @@ -2391,7 +2421,7 @@ __weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM Encoder Interface MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) @@ -2406,8 +2436,8 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Encoder Interface. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2433,7 +2463,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); } break; - + default : { TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); @@ -2450,8 +2480,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe /** * @brief Stops the TIM Encoder Interface. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2461,9 +2491,9 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) { /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - /* Disable the Input Capture channels 1 and 2 + /* Disable the Input Capture channels 1 and 2 (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */ switch (Channel) { @@ -2472,13 +2502,13 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); } break; - + case TIM_CHANNEL_2: { TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE); } break; - + default : { TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); @@ -2496,8 +2526,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Starts the TIM Encoder Interface in interrupt mode. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2519,14 +2549,14 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); } break; - + case TIM_CHANNEL_2: { TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE); __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); } break; - + default : { TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); @@ -2546,8 +2576,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha /** * @brief Stops the TIM Encoder Interface in interrupt mode. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be disabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2597,15 +2627,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Starts the TIM Encoder Interface in DMA mode. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected - * @param pData1: The destination Buffer address for IC1. - * @param pData2: The destination Buffer address for IC2. - * @param Length: The length of data to be transferred from TIM peripheral to memory. + * @param pData1 The destination Buffer address for IC1. + * @param pData2 The destination Buffer address for IC2. + * @param Length The length of data to be transferred from TIM peripheral to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length) @@ -2717,8 +2747,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch /** * @brief Stops the TIM Encoder Interface in DMA mode. - * @param htim : TIM Encoder Interface handle - * @param Channel : TIM Channels to be enabled + * @param htim TIM Encoder Interface handle + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2784,7 +2814,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha */ /** * @brief This function handles TIM interrupts requests. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) @@ -2940,9 +2970,9 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Output Compare Channels according to the specified * parameters in the TIM_OC_InitTypeDef. - * @param htim: TIM Output Compare handle - * @param sConfig: TIM Output Compare configuration structure - * @param Channel : TIM Channels to configure + * @param htim TIM Output Compare handle + * @param sConfig TIM Output Compare configuration structure + * @param Channel TIM Channels to configure * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -2973,7 +3003,7 @@ HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, /* Check the parameters */ assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - /* Configure the TIM Channel 1 in Output Compare */ + /* Configure the TIM Channel 1 in Output Compare */ TIM_OC1_SetConfig(htim->Instance, sConfig); } break; @@ -2991,7 +3021,7 @@ HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, case TIM_CHANNEL_3: { /* Check the parameters */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); /* Configure the TIM Channel 3 in Output Compare */ TIM_OC3_SetConfig(htim->Instance, sConfig); @@ -3042,9 +3072,9 @@ HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, /** * @brief Initializes the TIM Input Capture Channels according to the specified * parameters in the TIM_IC_InitTypeDef. - * @param htim: TIM IC handle - * @param sConfig: TIM Input Capture configuration structure - * @param Channel : TIM Channels to be enabled + * @param htim TIM IC handle + * @param sConfig TIM Input Capture configuration structure + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -3139,9 +3169,9 @@ HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitT /** * @brief Initializes the TIM PWM channels according to the specified * parameters in the TIM_OC_InitTypeDef. - * @param htim: TIM PWM handle - * @param sConfig: TIM PWM configuration structure - * @param Channel : TIM Channels to be configured + * @param htim TIM PWM handle + * @param sConfig TIM PWM configuration structure + * @param Channel TIM Channels to be configured * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -3284,13 +3314,13 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, /** * @brief Initializes the TIM One Pulse Channels according to the specified * parameters in the TIM_OnePulse_InitTypeDef. - * @param htim: TIM One Pulse handle - * @param sConfig: TIM One Pulse configuration structure - * @param OutputChannel : TIM Channels to be enabled + * @param htim TIM One Pulse handle + * @param sConfig TIM One Pulse configuration structure + * @param OutputChannel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected - * @param InputChannel : TIM Channels to be enabled + * @param InputChannel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -3306,89 +3336,90 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_O if(OutputChannel != InputChannel) { - /* Process Locked */ - __HAL_LOCK(htim); + /* Process Locked */ + __HAL_LOCK(htim); - htim->State = HAL_TIM_STATE_BUSY; + htim->State = HAL_TIM_STATE_BUSY; - /* Extract the Ouput compare configuration from sConfig structure */ - temp1.OCMode = sConfig->OCMode; - temp1.Pulse = sConfig->Pulse; - temp1.OCPolarity = sConfig->OCPolarity; - temp1.OCNPolarity = sConfig->OCNPolarity; - temp1.OCIdleState = sConfig->OCIdleState; - temp1.OCNIdleState = sConfig->OCNIdleState; + /* Extract the Ouput compare configuration from sConfig structure */ + temp1.OCMode = sConfig->OCMode; + temp1.Pulse = sConfig->Pulse; + temp1.OCPolarity = sConfig->OCPolarity; + temp1.OCNPolarity = sConfig->OCNPolarity; + temp1.OCIdleState = sConfig->OCIdleState; + temp1.OCNIdleState = sConfig->OCNIdleState; switch (OutputChannel) - { - case TIM_CHANNEL_1: { + case TIM_CHANNEL_1: + { assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - TIM_OC1_SetConfig(htim->Instance, &temp1); - } - break; - case TIM_CHANNEL_2: - { + TIM_OC1_SetConfig(htim->Instance, &temp1); + } + break; + case TIM_CHANNEL_2: + { assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - TIM_OC2_SetConfig(htim->Instance, &temp1); + TIM_OC2_SetConfig(htim->Instance, &temp1); + } + break; + default: + break; } - break; - default: - break; - } + switch (InputChannel) - { - case TIM_CHANNEL_1: { + case TIM_CHANNEL_1: + { assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, - sConfig->ICSelection, sConfig->ICFilter); + TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); - /* Reset the IC1PSC Bits */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; + /* Reset the IC1PSC Bits */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC; - /* Select the Trigger source */ + /* Select the Trigger source */ htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= TIM_TS_TI1FP1; + htim->Instance->SMCR |= TIM_TS_TI1FP1; - /* Select the Slave Mode */ + /* Select the Slave Mode */ htim->Instance->SMCR &= ~TIM_SMCR_SMS; - htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; - } - break; - case TIM_CHANNEL_2: - { + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + } + break; + case TIM_CHANNEL_2: + { assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, - sConfig->ICSelection, sConfig->ICFilter); + TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, + sConfig->ICSelection, sConfig->ICFilter); - /* Reset the IC2PSC Bits */ + /* Reset the IC2PSC Bits */ htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC; - /* Select the Trigger source */ + /* Select the Trigger source */ htim->Instance->SMCR &= ~TIM_SMCR_TS; - htim->Instance->SMCR |= TIM_TS_TI2FP2; + htim->Instance->SMCR |= TIM_TS_TI2FP2; - /* Select the Slave Mode */ + /* Select the Slave Mode */ htim->Instance->SMCR &= ~TIM_SMCR_SMS; - htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER; + } + break; + + default: + break; } - break; - default: - break; + htim->State = HAL_TIM_STATE_READY; + + __HAL_UNLOCK(htim); + + return HAL_OK; } - - htim->State = HAL_TIM_STATE_READY; - - __HAL_UNLOCK(htim); - - return HAL_OK; -} else { return HAL_ERROR; @@ -3397,8 +3428,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_O /** * @brief Configure the DMA Burst to transfer Data from the memory to the TIM peripheral - * @param htim: TIM handle - * @param BurstBaseAddress: TIM Base address from when the DMA will starts the Data write + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from when the DMA will starts the Data write * This parameters can be on of the following values: * @arg TIM_DMABASE_CR1 * @arg TIM_DMABASE_CR2 @@ -3419,7 +3450,7 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_O * @arg TIM_DMABASE_CCR4 * @arg TIM_DMABASE_BDTR * @arg TIM_DMABASE_DCR - * @param BurstRequestSrc: TIM DMA Request sources + * @param BurstRequestSrc TIM DMA Request sources * This parameters can be on of the following values: * @arg TIM_DMA_UPDATE: TIM update Interrupt source * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source @@ -3428,8 +3459,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_O * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source * @arg TIM_DMA_COM: TIM Commutation DMA source * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer: The Buffer address. - * @param BurstLength: DMA Burst length. This parameter can be one value + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value * between: TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers. * @retval HAL status */ @@ -3560,8 +3591,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t /** * @brief Stops the TIM DMA Burst mode - * @param htim: TIM handle - * @param BurstRequestSrc: TIM DMA Request sources to disable + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) @@ -3620,8 +3651,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B /** * @brief Configure the DMA Burst to transfer Data from the TIM peripheral to the memory - * @param htim: TIM handle - * @param BurstBaseAddress: TIM Base address from when the DMA will starts the Data read + * @param htim TIM handle + * @param BurstBaseAddress TIM Base address from when the DMA will starts the Data read * This parameters can be on of the following values: * @arg TIM_DMABASE_CR1 * @arg TIM_DMABASE_CR2 @@ -3642,7 +3673,7 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B * @arg TIM_DMABASE_CCR4 * @arg TIM_DMABASE_BDTR * @arg TIM_DMABASE_DCR - * @param BurstRequestSrc: TIM DMA Request sources + * @param BurstRequestSrc TIM DMA Request sources * This parameters can be on of the following values: * @arg TIM_DMA_UPDATE: TIM update Interrupt source * @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source @@ -3651,8 +3682,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B * @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source * @arg TIM_DMA_COM: TIM Commutation DMA source * @arg TIM_DMA_TRIGGER: TIM Trigger DMA source - * @param BurstBuffer: The Buffer address. - * @param BurstLength: DMA Burst length. This parameter can be one value + * @param BurstBuffer The Buffer address. + * @param BurstLength DMA Burst length. This parameter can be one value * between: TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers. * @retval HAL status */ @@ -3784,8 +3815,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B /** * @brief Stop the DMA burst reading - * @param htim: TIM handle - * @param BurstRequestSrc: TIM DMA Request sources to disable. + * @param htim TIM handle + * @param BurstRequestSrc TIM DMA Request sources to disable. * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) @@ -3844,8 +3875,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t Bu /** * @brief Generate a software event - * @param htim: TIM handle - * @param EventSource: specifies the event source. + * @param htim TIM handle + * @param EventSource specifies the event source. * This parameter can be one of the following values: * @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source * @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source @@ -3856,7 +3887,7 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t Bu * @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source * @arg TIM_EVENTSOURCE_BREAK: Timer Break event source * @arg TIM_EVENTSOURCE_BREAK2: Timer Break2 event source - * @retval None + * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) @@ -3885,10 +3916,10 @@ HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventS /** * @brief Configures the OCRef clear feature - * @param htim: TIM handle - * @param sClearInputConfig: pointer to a TIM_ClearInputConfigTypeDef structure that + * @param htim TIM handle + * @param sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that * contains the OCREF clear feature and parameters for the TIM peripheral. - * @param Channel: specifies the TIM Channel + * @param Channel specifies the TIM Channel * This parameter can be one of the following values: * @arg TIM_Channel_1: TIM Channel 1 * @arg TIM_Channel_2: TIM Channel 2 @@ -3917,7 +3948,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, { /* Get the TIMx SMCR register value */ tmpsmcr = htim->Instance->SMCR; - + /* Clear the OCREF clear selection bit */ tmpsmcr &= ~TIM_SMCR_OCCS; @@ -3952,7 +3983,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, htim->Instance->SMCR |= TIM_SMCR_OCCS; } break; - + default: break; } @@ -4054,8 +4085,8 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, /** * @brief Configures the clock source to be used - * @param htim: TIM handle - * @param sClockSourceConfig: pointer to a TIM_ClockConfigTypeDef structure that + * @param htim TIM handle + * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that * contains the clock source information for the TIM peripheral. * @retval HAL status */ @@ -4096,7 +4127,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - + /* Configure the ETR Clock source */ TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, @@ -4122,7 +4153,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - + /* Configure the ETR Clock source */ TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, @@ -4141,20 +4172,20 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo /* Check TI1 input conditioning related parameters */ assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - + TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter); TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); } break; - + case TIM_CLOCKSOURCE_TI2: { /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/ assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance)); - /* Check TI2 input conditioning related parameters */ + /* Check TI2 input conditioning related parameters */ assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); @@ -4180,7 +4211,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); } break; - + case TIM_CLOCKSOURCE_ITR0: { /* Check whether or not the timer instance supports internal trigger input */ @@ -4189,7 +4220,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR0); } break; - + case TIM_CLOCKSOURCE_ITR1: { /* Check whether or not the timer instance supports internal trigger input */ @@ -4198,7 +4229,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR1); } break; - + case TIM_CLOCKSOURCE_ITR2: { /* Check whether or not the timer instance supports internal trigger input */ @@ -4207,7 +4238,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_ITR2); } break; - + case TIM_CLOCKSOURCE_ITR3: { /* Check whether or not the timer instance supports internal trigger input */ @@ -4230,8 +4261,8 @@ HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockCo /** * @brief Selects the signal connected to the TI1 input: direct from CH1_input * or a XOR combination between CH1_input, CH2_input & CH3_input - * @param htim: TIM handle. - * @param TI1_Selection: Indicate whether or not channel 1 is connected to the + * @param htim TIM handle. + * @param TI1_Selection Indicate whether or not channel 1 is connected to the * output of a XOR gate. * This parameter can be one of the following values: * @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input @@ -4264,8 +4295,8 @@ HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_S /** * @brief Configures the TIM in Slave mode - * @param htim: TIM handle. - * @param sSlaveConfig: pointer to a TIM_SlaveConfigTypeDef structure that + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that * contains the selected trigger (internal trigger input, filtered * timer input or external trigger input) and the ) and the Slave * mode (Disable, Reset, Gated, Trigger, External clock mode 1). @@ -4283,7 +4314,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TI htim->State = HAL_TIM_STATE_BUSY; TIM_SlaveTimer_SetConfig(htim, sSlaveConfig); - + /* Disable Trigger Interrupt */ __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER); @@ -4292,28 +4323,28 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization(TIM_HandleTypeDef *htim, TI htim->State = HAL_TIM_STATE_READY; - __HAL_UNLOCK(htim); + __HAL_UNLOCK(htim); return HAL_OK; } /** * @brief Configures the TIM in Slave mode in interrupt mode - * @param htim: TIM handle. - * @param sSlaveConfig: pointer to a TIM_SlaveConfigTypeDef structure that + * @param htim TIM handle. + * @param sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that * contains the selected trigger (internal trigger input, filtered - * timer input or external trigger input) and the ) and the Slave - * mode (Disable, Reset, Gated, Trigger, External clock mode 1). + * timer input or external trigger input) and the ) and the Slave + * mode (Disable, Reset, Gated, Trigger, External clock mode 1). * @retval HAL status */ -HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, +HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef * sSlaveConfig) { /* Check the parameters */ assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance)); assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode)); assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger)); - + __HAL_LOCK(htim); htim->State = HAL_TIM_STATE_BUSY; @@ -4328,15 +4359,15 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchronization_IT(TIM_HandleTypeDef *htim, htim->State = HAL_TIM_STATE_READY; - __HAL_UNLOCK(htim); + __HAL_UNLOCK(htim); return HAL_OK; } /** * @brief Read the captured value from Capture Compare unit - * @param htim: TIM handle. - * @param Channel : TIM Channels to be enabled + * @param htim TIM handle. + * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -4428,7 +4459,7 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Period elapsed callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) @@ -4443,7 +4474,7 @@ __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) } /** * @brief Output Compare callback in non-blocking mode - * @param htim : TIM OC handle + * @param htim TIM OC handle * @retval None */ __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) @@ -4457,7 +4488,7 @@ __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) } /** * @brief Input Capture callback in non-blocking mode - * @param htim : TIM IC handle + * @param htim TIM IC handle * @retval None */ __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) @@ -4472,7 +4503,7 @@ __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) /** * @brief PWM Pulse finished callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) @@ -4487,7 +4518,7 @@ __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) /** * @brief Hall Trigger detection callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) @@ -4502,7 +4533,7 @@ __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) /** * @brief Timer error callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) @@ -4536,7 +4567,7 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) /** * @brief Return the TIM Base handle state. - * @param htim: TIM Base handle + * @param htim TIM Base handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) @@ -4546,7 +4577,7 @@ HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) /** * @brief Return the TIM OC handle state. - * @param htim: TIM Ouput Compare handle + * @param htim TIM Ouput Compare handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) @@ -4556,7 +4587,7 @@ HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) /** * @brief Return the TIM PWM handle state. - * @param htim: TIM handle + * @param htim TIM handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) @@ -4566,7 +4597,7 @@ HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) /** * @brief Return the TIM Input Capture handle state. - * @param htim: TIM IC handle + * @param htim TIM IC handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) @@ -4576,7 +4607,7 @@ HAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) /** * @brief Return the TIM One Pulse Mode handle state. - * @param htim: TIM OPM handle + * @param htim TIM OPM handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) @@ -4586,7 +4617,7 @@ HAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) /** * @brief Return the TIM Encoder Mode handle state. - * @param htim: TIM Encoder handle + * @param htim TIM Encoder handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) @@ -4600,7 +4631,7 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) /** * @brief TIM DMA error callback - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void TIM_DMAError(DMA_HandleTypeDef *hdma) @@ -4614,7 +4645,7 @@ void TIM_DMAError(DMA_HandleTypeDef *hdma) /** * @brief TIM DMA Delay Pulse complete callback. - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) @@ -4646,7 +4677,7 @@ void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) } /** * @brief TIM DMA Capture complete callback. - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) @@ -4679,7 +4710,7 @@ void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) /** * @brief TIM DMA Period Elapse complete callback. - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) @@ -4693,7 +4724,7 @@ static void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) /** * @brief TIM DMA Trigger callback. - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) @@ -4707,8 +4738,8 @@ static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) /** * @brief Time Base configuration - * @param TIMx: TIM peripheral - * @param Structure: TIM Base configuration structure + * @param TIMx TIM peripheral + * @param Structure TIM Base configuration structure * @retval None */ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) @@ -4731,6 +4762,10 @@ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) tmpcr1 |= (uint32_t)Structure->ClockDivision; } + /* Set the auto-reload preload */ + tmpcr1 &= ~TIM_CR1_ARPE; + tmpcr1 |= (uint32_t)Structure->AutoReloadPreload; + TIMx->CR1 = tmpcr1; /* Set the Autoreload value */ @@ -4753,7 +4788,7 @@ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) /** * @brief Time Ouput Compare 1 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) @@ -4827,7 +4862,7 @@ static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) /** * @brief Time Ouput Compare 2 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) @@ -4903,7 +4938,7 @@ void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) /** * @brief Time Ouput Compare 3 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) @@ -4977,7 +5012,7 @@ static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) /** * @brief Time Ouput Compare 4 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) @@ -5035,7 +5070,7 @@ static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) /** * @brief Timer Ouput Compare 5 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx, @@ -5088,7 +5123,7 @@ static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx, /** * @brief Timer Ouput Compare 6 configuration * @param TIMx to select the TIM peripheral - * @param OC_Config: The ouput configuration structure + * @param OC_Config The ouput configuration structure * @retval None */ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx, @@ -5161,7 +5196,7 @@ static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, /* Write to TIMx SMCR */ htim->Instance->SMCR = tmpsmcr; - + /* Configure the trigger prescaler, filter, and polarity */ switch (sSlaveConfig->InputTrigger) { @@ -5173,91 +5208,91 @@ static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); /* Configure the ETR Trigger source */ - TIM_ETR_SetConfig(htim->Instance, - sSlaveConfig->TriggerPrescaler, - sSlaveConfig->TriggerPolarity, + TIM_ETR_SetConfig(htim->Instance, + sSlaveConfig->TriggerPrescaler, + sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter); } break; - + case TIM_TS_TI1F_ED: { /* Check the parameters */ assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - + /* Disable the Channel 1: Reset the CC1E Bit */ tmpccer = htim->Instance->CCER; htim->Instance->CCER &= ~TIM_CCER_CC1E; - tmpccmr1 = htim->Instance->CCMR1; - + tmpccmr1 = htim->Instance->CCMR1; + /* Set the filter */ tmpccmr1 &= ~TIM_CCMR1_IC1F; tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4); - + /* Write to TIMx CCMR1 and CCER registers */ htim->Instance->CCMR1 = tmpccmr1; - htim->Instance->CCER = tmpccer; - + htim->Instance->CCER = tmpccer; + } break; - + case TIM_TS_TI1FP1: { /* Check the parameters */ assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - + /* Configure TI1 Filter and Polarity */ TIM_TI1_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter); } break; - + case TIM_TS_TI2FP2: { /* Check the parameters */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity)); assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter)); - + /* Configure TI2 Filter and Polarity */ TIM_TI2_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter); } break; - + case TIM_TS_ITR0: { /* Check the parameter */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); } break; - + case TIM_TS_ITR1: { /* Check the parameter */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); } break; - + case TIM_TS_ITR2: { /* Check the parameter */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); } break; - + case TIM_TS_ITR3: { /* Check the parameter */ assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); } break; - + default: break; } @@ -5266,17 +5301,17 @@ static void TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, /** * @brief Configure the TI1 as Input. * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. + * @param TIM_ICSelection specifies the input to be used. * This parameter can be one of the following values: * @arg TIM_ICSelection_DirectTI: TIM Input 1 is selected to be connected to IC1. * @arg TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be connected to IC2. * @arg TIM_ICSelection_TRC: TIM Input 1 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @retval None * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1 @@ -5321,12 +5356,12 @@ void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ /** * @brief Configure the Polarity and Filter for TI1. * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @retval None */ @@ -5356,17 +5391,17 @@ static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, /** * @brief Configure the TI2 as Input. * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. + * @param TIM_ICSelection specifies the input to be used. * This parameter can be one of the following values: * @arg TIM_ICSelection_DirectTI: TIM Input 2 is selected to be connected to IC2. * @arg TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be connected to IC1. * @arg TIM_ICSelection_TRC: TIM Input 2 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @retval None * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2 @@ -5404,12 +5439,12 @@ static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32 /** * @brief Configure the Polarity and Filter for TI2. * @param TIMx to select the TIM peripheral. - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @retval None */ @@ -5439,17 +5474,17 @@ static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, /** * @brief Configure the TI3 as Input. * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. + * @param TIM_ICSelection specifies the input to be used. * This parameter can be one of the following values: * @arg TIM_ICSelection_DirectTI: TIM Input 3 is selected to be connected to IC3. * @arg TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be connected to IC4. * @arg TIM_ICSelection_TRC: TIM Input 3 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @retval None * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4 @@ -5487,17 +5522,17 @@ static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32 /** * @brief Configure the TI4 as Input. * @param TIMx to select the TIM peripheral - * @param TIM_ICPolarity : The Input Polarity. + * @param TIM_ICPolarity The Input Polarity. * This parameter can be one of the following values: * @arg TIM_ICPolarity_Rising * @arg TIM_ICPolarity_Falling * @arg TIM_ICPolarity_BothEdge - * @param TIM_ICSelection: specifies the input to be used. + * @param TIM_ICSelection specifies the input to be used. * This parameter can be one of the following values: * @arg TIM_ICSelection_DirectTI: TIM Input 4 is selected to be connected to IC4. * @arg TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be connected to IC3. * @arg TIM_ICSelection_TRC: TIM Input 4 is selected to be connected to TRC. - * @param TIM_ICFilter: Specifies the Input Capture Filter. + * @param TIM_ICFilter Specifies the Input Capture Filter. * This parameter must be a value between 0x00 and 0x0F. * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3 * (on channel1 path) is used as the input signal. Therefore CCMR2 must be @@ -5535,7 +5570,7 @@ static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32 /** * @brief Selects the Input Trigger source * @param TIMx to select the TIM peripheral - * @param InputTriggerSource: The Input Trigger source. + * @param InputTriggerSource The Input Trigger source. * This parameter can be one of the following values: * @arg TIM_TS_ITR0: Internal Trigger 0 * @arg TIM_TS_ITR1: Internal Trigger 1 @@ -5563,17 +5598,17 @@ static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint16_t InputTriggerSource) /** * @brief Configures the TIMx External Trigger (ETR). * @param TIMx to select the TIM peripheral - * @param TIM_ExtTRGPrescaler: The external Trigger Prescaler. + * @param TIM_ExtTRGPrescaler The external Trigger Prescaler. * This parameter can be one of the following values: * @arg TIM_ETRPRESCALER_DIV1 : ETRP Prescaler OFF. * @arg TIM_ETRPRESCALER_DIV2 : ETRP frequency divided by 2. * @arg TIM_ETRPRESCALER_DIV4 : ETRP frequency divided by 4. * @arg TIM_ETRPRESCALER_DIV8 : ETRP frequency divided by 8. - * @param TIM_ExtTRGPolarity: The external Trigger Polarity. + * @param TIM_ExtTRGPolarity The external Trigger Polarity. * This parameter can be one of the following values: * @arg TIM_ETRPOLARITY_INVERTED : active low or falling edge active. * @arg TIM_ETRPOLARITY_NONINVERTED : active high or rising edge active. - * @param ExtTRGFilter: External Trigger Filter. + * @param ExtTRGFilter External Trigger Filter. * This parameter must be a value between 0x00 and 0x0F * @retval None */ @@ -5597,7 +5632,7 @@ void TIM_ETR_SetConfig(TIM_TypeDef* TIMx, uint32_t TIM_ExtTRGPrescaler, /** * @brief Enables or disables the TIM Capture Compare Channel x. * @param TIMx to select the TIM peripheral - * @param Channel: specifies the TIM Channel + * @param Channel specifies the TIM Channel * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 * @arg TIM_CHANNEL_2: TIM Channel 2 diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.h index 368389fdd2..bfc0194b00 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tim.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of TIM HAL module. ****************************************************************************** * @attention @@ -85,6 +83,9 @@ typedef struct - the number of half PWM period in center-aligned mode This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. @note This parameter is valid only for TIM1 and TIM8. */ + + uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload. + This parameter can be a value of @ref TIM_AutoReloadPreload */ } TIM_Base_InitTypeDef; /** @@ -463,6 +464,15 @@ typedef struct * @} */ +/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload + * @{ + */ +#define TIM_AUTORELOAD_PRELOAD_DISABLE ((uint32_t)0x0000) /*!< TIMx_ARR register is not buffered */ +#define TIM_AUTORELOAD_PRELOAD_ENABLE (TIM_CR1_ARPE) /*!< TIMx_ARR register is buffered */ +/** + * @} + */ + /** @defgroup TIM_Output_Compare_State TIM Output Compare State * @{ */ @@ -472,15 +482,6 @@ typedef struct * @} */ -/** @defgroup TIM_Output_Fast_State TIM Output Fast State - * @{ - */ -#define TIM_OCFAST_DISABLE ((uint32_t)0x0000) -#define TIM_OCFAST_ENABLE (TIM_CCMR1_OC1FE) -/** - * @} - */ - /** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State * @{ */ @@ -490,6 +491,15 @@ typedef struct * @} */ +/** @defgroup TIM_Output_Fast_State TIM Output Fast State + * @{ + */ +#define TIM_OCFAST_DISABLE ((uint32_t)0x0000) +#define TIM_OCFAST_ENABLE (TIM_CCMR1_OC1FE) +/** + * @} + */ + /** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity * @{ */ @@ -593,9 +603,9 @@ typedef struct * @} */ -/** @defgroup TIM_Commutation_Source TIM Commutation Source +/** @defgroup TIM_Commutation_Source TIM Commutation Source * @{ - */ + */ #define TIM_COMMUTATION_TRGI (TIM_CR2_CCUS) #define TIM_COMMUTATION_SOFTWARE ((uint32_t)0x0000) /** @@ -656,16 +666,16 @@ typedef struct /** @defgroup TIM_Clock_Source TIM Clock Source * @{ */ -#define TIM_CLOCKSOURCE_ETRMODE2 (TIM_SMCR_ETPS_1) -#define TIM_CLOCKSOURCE_INTERNAL (TIM_SMCR_ETPS_0) -#define TIM_CLOCKSOURCE_ITR0 ((uint32_t)0x0000) -#define TIM_CLOCKSOURCE_ITR1 (TIM_SMCR_TS_0) -#define TIM_CLOCKSOURCE_ITR2 (TIM_SMCR_TS_1) -#define TIM_CLOCKSOURCE_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) -#define TIM_CLOCKSOURCE_TI1ED (TIM_SMCR_TS_2) -#define TIM_CLOCKSOURCE_TI1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) -#define TIM_CLOCKSOURCE_TI2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) -#define TIM_CLOCKSOURCE_ETRMODE1 (TIM_SMCR_TS) +#define TIM_CLOCKSOURCE_ETRMODE2 (TIM_SMCR_ETPS_1) +#define TIM_CLOCKSOURCE_INTERNAL (TIM_SMCR_ETPS_0) +#define TIM_CLOCKSOURCE_ITR0 ((uint32_t)0x0000) +#define TIM_CLOCKSOURCE_ITR1 (TIM_SMCR_TS_0) +#define TIM_CLOCKSOURCE_ITR2 (TIM_SMCR_TS_1) +#define TIM_CLOCKSOURCE_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) +#define TIM_CLOCKSOURCE_TI1ED (TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_TI1 (TIM_SMCR_TS_0 | TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_TI2 (TIM_SMCR_TS_1 | TIM_SMCR_TS_2) +#define TIM_CLOCKSOURCE_ETRMODE1 (TIM_SMCR_TS) /** * @} */ @@ -781,7 +791,7 @@ typedef struct * @{ */ #define TIM_AUTOMATICOUTPUT_ENABLE (TIM_BDTR_AOE) -#define TIM_AUTOMATICOUTPUT_DISABLE ((uint32_t)0x0000) +#define TIM_AUTOMATICOUTPUT_DISABLE ((uint32_t)0x0000) /** * @} */ @@ -800,14 +810,14 @@ typedef struct /** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection * @{ */ -#define TIM_TRGO_RESET ((uint32_t)0x0000) -#define TIM_TRGO_ENABLE (TIM_CR2_MMS_0) -#define TIM_TRGO_UPDATE (TIM_CR2_MMS_1) -#define TIM_TRGO_OC1 ((TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) -#define TIM_TRGO_OC1REF (TIM_CR2_MMS_2) -#define TIM_TRGO_OC2REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_0)) -#define TIM_TRGO_OC3REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1)) -#define TIM_TRGO_OC4REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) +#define TIM_TRGO_RESET ((uint32_t)0x0000) +#define TIM_TRGO_ENABLE (TIM_CR2_MMS_0) +#define TIM_TRGO_UPDATE (TIM_CR2_MMS_1) +#define TIM_TRGO_OC1 ((TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) +#define TIM_TRGO_OC1REF (TIM_CR2_MMS_2) +#define TIM_TRGO_OC2REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_0)) +#define TIM_TRGO_OC3REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1)) +#define TIM_TRGO_OC4REF ((TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0)) /** * @} */ @@ -815,22 +825,22 @@ typedef struct /** @defgroup TIM_Master_Mode_Selection_2 TIM Master Mode Selection 2 (TRGO2) * @{ */ -#define TIM_TRGO2_RESET ((uint32_t)0x00000000) -#define TIM_TRGO2_ENABLE ((uint32_t)(TIM_CR2_MMS2_0)) -#define TIM_TRGO2_UPDATE ((uint32_t)(TIM_CR2_MMS2_1)) -#define TIM_TRGO2_OC1 ((uint32_t)(TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC1REF ((uint32_t)(TIM_CR2_MMS2_2)) -#define TIM_TRGO2_OC2REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC3REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1)) -#define TIM_TRGO2_OC4REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC5REF ((uint32_t)(TIM_CR2_MMS2_3)) -#define TIM_TRGO2_OC6REF ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC4REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1)) -#define TIM_TRGO2_OC6REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC4REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2)) -#define TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0)) -#define TIM_TRGO2_OC5REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 |TIM_CR2_MMS2_1)) -#define TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_RESET ((uint32_t)0x00000000) +#define TIM_TRGO2_ENABLE ((uint32_t)(TIM_CR2_MMS2_0)) +#define TIM_TRGO2_UPDATE ((uint32_t)(TIM_CR2_MMS2_1)) +#define TIM_TRGO2_OC1 ((uint32_t)(TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC1REF ((uint32_t)(TIM_CR2_MMS2_2)) +#define TIM_TRGO2_OC2REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC3REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1)) +#define TIM_TRGO2_OC4REF ((uint32_t)(TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC5REF ((uint32_t)(TIM_CR2_MMS2_3)) +#define TIM_TRGO2_OC6REF ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC4REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1)) +#define TIM_TRGO2_OC6REF_RISINGFALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC4REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2)) +#define TIM_TRGO2_OC4REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_0)) +#define TIM_TRGO2_OC5REF_RISING_OC6REF_RISING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 |TIM_CR2_MMS2_1)) +#define TIM_TRGO2_OC5REF_RISING_OC6REF_FALLING ((uint32_t)(TIM_CR2_MMS2_3 | TIM_CR2_MMS2_2 | TIM_CR2_MMS2_1 | TIM_CR2_MMS2_0)) /** * @} */ @@ -999,28 +1009,28 @@ typedef struct */ /** @brief Reset TIM handle state. - * @param __HANDLE__: TIM handle. + * @param __HANDLE__ TIM handle. * @retval None */ #define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_TIM_STATE_RESET) /** * @brief Enable the TIM peripheral. - * @param __HANDLE__: TIM handle + * @param __HANDLE__ TIM handle * @retval None */ #define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN)) /** * @brief Enable the TIM main Output. - * @param __HANDLE__: TIM handle + * @param __HANDLE__ TIM handle * @retval None */ #define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR|=(TIM_BDTR_MOE)) /** * @brief Disable the TIM peripheral. - * @param __HANDLE__: TIM handle + * @param __HANDLE__ TIM handle * @retval None */ #define __HAL_TIM_DISABLE(__HANDLE__) \ @@ -1036,7 +1046,7 @@ typedef struct /** * @brief Disable the TIM main Output. - * @param __HANDLE__: TIM handle + * @param __HANDLE__ TIM handle * @retval None * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled */ @@ -1053,15 +1063,15 @@ typedef struct /** * @brief Disable the TIM main Output. - * @param __HANDLE__: TIM handle + * @param __HANDLE__ TIM handle * @retval None * @note The Main Output Enable of a timer instance is disabled unconditionally */ #define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE) /** @brief Enable the specified TIM interrupt. - * @param __HANDLE__: specifies the TIM Handle. - * @param __INTERRUPT__: specifies the TIM interrupt source to enable. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to enable. * This parameter can be one of the following values: * @arg TIM_IT_UPDATE: Update interrupt * @arg TIM_IT_CC1: Capture/Compare 1 interrupt @@ -1077,8 +1087,8 @@ typedef struct /** @brief Disable the specified TIM interrupt. - * @param __HANDLE__: specifies the TIM Handle. - * @param __INTERRUPT__: specifies the TIM interrupt source to disable. + * @param __HANDLE__ specifies the TIM Handle. + * @param __INTERRUPT__ specifies the TIM interrupt source to disable. * This parameter can be one of the following values: * @arg TIM_IT_UPDATE: Update interrupt * @arg TIM_IT_CC1: Capture/Compare 1 interrupt @@ -1093,8 +1103,8 @@ typedef struct #define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__)) /** @brief Enable the specified DMA request. - * @param __HANDLE__: specifies the TIM Handle. - * @param __DMA__: specifies the TIM DMA request to enable. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to enable. * This parameter can be one of the following values: * @arg TIM_DMA_UPDATE: Update DMA request * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request @@ -1103,14 +1113,13 @@ typedef struct * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request * @arg TIM_DMA_COM: Commutation DMA request * @arg TIM_DMA_TRIGGER: Trigger DMA request - * @arg TIM_DMA_BREAK: Break DMA request * @retval None */ #define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__)) /** @brief Disable the specified DMA request. - * @param __HANDLE__: specifies the TIM Handle. - * @param __DMA__: specifies the TIM DMA request to disable. + * @param __HANDLE__ specifies the TIM Handle. + * @param __DMA__ specifies the TIM DMA request to disable. * This parameter can be one of the following values: * @arg TIM_DMA_UPDATE: Update DMA request * @arg TIM_DMA_CC1: Capture/Compare 1 DMA request @@ -1119,14 +1128,13 @@ typedef struct * @arg TIM_DMA_CC4: Capture/Compare 4 DMA request * @arg TIM_DMA_COM: Commutation DMA request * @arg TIM_DMA_TRIGGER: Trigger DMA request - * @arg TIM_DMA_BREAK: Break DMA request * @retval None */ #define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__)) /** @brief Check whether the specified TIM interrupt flag is set or not. - * @param __HANDLE__: specifies the TIM Handle. - * @param __FLAG__: specifies the TIM interrupt flag to check. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to check. * This parameter can be one of the following values: * @arg TIM_FLAG_UPDATE: Update interrupt flag * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag @@ -1134,11 +1142,11 @@ typedef struct * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag * @arg TIM_FLAG_CC5: Compare 5 interrupt flag - * @arg TIM_FLAG_CC6: Compare 5 interrupt flag + * @arg TIM_FLAG_CC6: Compare 6 interrupt flag * @arg TIM_FLAG_COM: Commutation interrupt flag * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag - * @arg TIM_FLAG_BREAK: Break interrupt flag - * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag * @arg TIM_FLAG_SYSTEM_BREAK: System Break interrupt flag * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag @@ -1149,8 +1157,8 @@ typedef struct #define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR &(__FLAG__)) == (__FLAG__)) /** @brief Clear the specified TIM interrupt flag. - * @param __HANDLE__: specifies the TIM Handle. - * @param __FLAG__: specifies the TIM interrupt flag to clear. + * @param __HANDLE__ specifies the TIM Handle. + * @param __FLAG__ specifies the TIM interrupt flag to clear. * This parameter can be one of the following values: * @arg TIM_FLAG_UPDATE: Update interrupt flag * @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag @@ -1158,11 +1166,11 @@ typedef struct * @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag * @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag * @arg TIM_FLAG_CC5: Compare 5 interrupt flag - * @arg TIM_FLAG_CC6: Compare 5 interrupt flag + * @arg TIM_FLAG_CC6: Compare 6 interrupt flag * @arg TIM_FLAG_COM: Commutation interrupt flag * @arg TIM_FLAG_TRIGGER: Trigger interrupt flag - * @arg TIM_FLAG_BREAK: Break interrupt flag - * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag + * @arg TIM_FLAG_BREAK: Break interrupt flag + * @arg TIM_FLAG_BREAK2: Break 2 interrupt flag * @arg TIM_FLAG_SYSTEM_BREAK: System Break interrupt flag * @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag * @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag @@ -1174,8 +1182,8 @@ typedef struct /** * @brief Check whether the specified TIM interrupt source is enabled or not. - * @param __HANDLE__: TIM handle - * @param __INTERRUPT__: specifies the TIM interrupt source to check. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the TIM interrupt source to check. * This parameter can be one of the following values: * @arg TIM_IT_UPDATE: Update interrupt * @arg TIM_IT_CC1: Capture/Compare 1 interrupt @@ -1190,8 +1198,8 @@ typedef struct #define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) /** @brief Clear the TIM interrupt pending bits. - * @param __HANDLE__: TIM handle - * @param __INTERRUPT__: specifies the interrupt pending bit to clear. + * @param __HANDLE__ TIM handle + * @param __INTERRUPT__ specifies the interrupt pending bit to clear. * This parameter can be one of the following values: * @arg TIM_IT_UPDATE: Update interrupt * @arg TIM_IT_CC1: Capture/Compare 1 interrupt @@ -1207,7 +1215,7 @@ typedef struct /** * @brief Indicates whether or not the TIM Counter is used as downcounter. - * @param __HANDLE__: TIM handle. + * @param __HANDLE__ TIM handle. * @retval False (Counter used as upcounter) or True (Counter used as downcounter) * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode or Encoder mode. @@ -1217,32 +1225,32 @@ mode. /** * @brief Set the TIM Prescaler on runtime. - * @param __HANDLE__: TIM handle. - * @param __PRESC__: specifies the Prescaler new value. + * @param __HANDLE__ TIM handle. + * @param __PRESC__ specifies the Prescaler new value. * @retval None */ #define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__)) /** * @brief Set the TIM Counter Register value on runtime. - * @param __HANDLE__: TIM handle. - * @param __COUNTER__: specifies the Counter register new value. + * @param __HANDLE__ TIM handle. + * @param __COUNTER__ specifies the Counter register new value. * @retval None */ #define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__)) /** * @brief Get the TIM Counter Register value on runtime. - * @param __HANDLE__: TIM handle. - * @retval None + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT) */ #define __HAL_TIM_GET_COUNTER(__HANDLE__) \ ((__HANDLE__)->Instance->CNT) /** * @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function. - * @param __HANDLE__: TIM handle. - * @param __AUTORELOAD__: specifies the Counter register new value. + * @param __HANDLE__ TIM handle. + * @param __AUTORELOAD__ specifies the Counter register new value. * @retval None */ #define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \ @@ -1253,20 +1261,20 @@ mode. /** * @brief Get the TIM Autoreload Register value on runtime. - * @param __HANDLE__: TIM handle. - * @retval None + * @param __HANDLE__ TIM handle. + * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR) */ #define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \ ((__HANDLE__)->Instance->ARR) /** * @brief Set the TIM Clock Division value on runtime without calling another time any Init function. - * @param __HANDLE__: TIM handle. - * @param __CKD__: specifies the clock division value. + * @param __HANDLE__ TIM handle. + * @param __CKD__ specifies the clock division value. * This parameter can be one of the following value: - * @arg TIM_CLOCKDIVISION_DIV1 - * @arg TIM_CLOCKDIVISION_DIV2 - * @arg TIM_CLOCKDIVISION_DIV4 + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT * @retval None */ #define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \ @@ -1278,22 +1286,25 @@ mode. /** * @brief Get the TIM Clock Division value on runtime. - * @param __HANDLE__: TIM handle. - * @retval None + * @param __HANDLE__ TIM handle. + * @retval The clock division can be one of the following values: + * @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT + * @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT + * @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT */ #define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \ ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD) /** * @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function. - * @param __HANDLE__: TIM handle. - * @param __CHANNEL__: TIM Channels to be configured. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param __ICPSC__: specifies the Input Capture4 prescaler new value. + * @param __ICPSC__ specifies the Input Capture4 prescaler new value. * This parameter can be one of the following values: * @arg TIM_ICPSC_DIV1: no prescaler * @arg TIM_ICPSC_DIV2: capture is done once every 2 events @@ -1309,14 +1320,18 @@ mode. /** * @brief Get the TIM Input Capture prescaler on runtime. - * @param __HANDLE__: TIM handle. - * @param __CHANNEL__: TIM Channels to be configured. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: get input capture 1 prescaler value * @arg TIM_CHANNEL_2: get input capture 2 prescaler value * @arg TIM_CHANNEL_3: get input capture 3 prescaler value * @arg TIM_CHANNEL_4: get input capture 4 prescaler value - * @retval None + * @retval The input capture prescaler can be one of the following values: + * @arg TIM_ICPSC_DIV1: no prescaler + * @arg TIM_ICPSC_DIV2: capture is done once every 2 events + * @arg TIM_ICPSC_DIV4: capture is done once every 4 events + * @arg TIM_ICPSC_DIV8: capture is done once every 8 events */ #define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__) \ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC) :\ @@ -1326,8 +1341,8 @@ mode. /** * @brief Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function. - * @param __HANDLE__: TIM handle. - * @param __CHANNEL__: TIM Channels to be configured. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1335,7 +1350,7 @@ mode. * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @arg TIM_CHANNEL_5: TIM Channel 5 selected * @arg TIM_CHANNEL_6: TIM Channel 6 selected - * @param __COMPARE__: specifies the Capture Compare register new value. + * @param __COMPARE__ specifies the Capture Compare register new value. * @retval None */ #define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \ @@ -1348,8 +1363,8 @@ mode. /** * @brief Get the TIM Capture Compare Register value on runtime. - * @param __HANDLE__: TIM handle. - * @param __CHANNEL__: TIM Channel associated with the capture compare register + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channel associated with the capture compare register * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: get capture/compare 1 register value * @arg TIM_CHANNEL_2: get capture/compare 2 register value @@ -1357,7 +1372,7 @@ mode. * @arg TIM_CHANNEL_4: get capture/compare 4 register value * @arg TIM_CHANNEL_5: get capture/compare 5 register value * @arg TIM_CHANNEL_6: get capture/compare 6 register value - * @retval None + * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy) */ #define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\ @@ -1367,10 +1382,52 @@ mode. ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\ ((__HANDLE__)->Instance->CCR6)) +/** + * @brief Set the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected + * @arg TIM_CHANNEL_6: TIM Channel 6 selected + * @retval None + */ +#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\ + ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE)) + +/** + * @brief Reset the TIM Output compare preload. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. + * This parameter can be one of the following values: + * @arg TIM_CHANNEL_1: TIM Channel 1 selected + * @arg TIM_CHANNEL_2: TIM Channel 2 selected + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @arg TIM_CHANNEL_5: TIM Channel 5 selected + * @arg TIM_CHANNEL_6: TIM Channel 6 selected + * @retval None + */ +#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \ + (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\ + ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\ + ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE)) + /** * @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register. - * @param __HANDLE__: TIM handle. - * @note When the USR bit of the TIMx_CR1 register is set, only counter + * @param __HANDLE__ TIM handle. + * @note When the USR bit of the TIMx_CR1 register is set, only counter * overflow/underflow generates an update interrupt or DMA request (if * enabled) * @retval None @@ -1380,9 +1437,9 @@ mode. /** * @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register. - * @param __HANDLE__: TIM handle. - * @note When the USR bit of the TIMx_CR1 register is reset, any of the - * following events generate an update interrupt or DMA request (if + * @param __HANDLE__ TIM handle. + * @note When the USR bit of the TIMx_CR1 register is reset, any of the + * following events generate an update interrupt or DMA request (if * enabled): * _ Counter overflow underflow * _ Setting the UG bit @@ -1391,17 +1448,17 @@ mode. */ #define __HAL_TIM_URS_DISABLE(__HANDLE__) \ ((__HANDLE__)->Instance->CR1&=~(TIM_CR1_URS)) - + /** * @brief Set the TIM Capture x input polarity on runtime. - * @param __HANDLE__: TIM handle. - * @param __CHANNEL__: TIM Channels to be configured. + * @param __HANDLE__ TIM handle. + * @param __CHANNEL__ TIM Channels to be configured. * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param __POLARITY__: Polarity for TIx source + * @param __POLARITY__ Polarity for TIx source * @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge * @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge * @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge @@ -1412,7 +1469,7 @@ mode. TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \ }while(0) - + /** * @} */ @@ -1430,7 +1487,7 @@ mode. * @} */ /* End of private constants --------------------------------------------------*/ - + /* Private macros ------------------------------------------------------------*/ /** @defgroup TIM_Private_Macros TIM Private Macros * @{ @@ -1466,7 +1523,7 @@ mode. ((__BASE__) == TIM_DMABASE_OR3)) -#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFE00) == 0x00000000) && ((__SOURCE__) != 0x00000000)) +#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFFFE00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) #define IS_TIM_COUNTER_MODE(__MODE__) (((__MODE__) == TIM_COUNTERMODE_UP) || \ @@ -1479,6 +1536,9 @@ mode. ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \ ((__DIV__) == TIM_CLOCKDIVISION_DIV4)) +#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || \ + ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE)) + #define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || \ ((__STATE__) == TIM_OCFAST_ENABLE)) @@ -1514,7 +1574,7 @@ mode. ((__MODE__) == TIM_ENCODERMODE_TI2) || \ ((__MODE__) == TIM_ENCODERMODE_TI12)) -#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FF) == 0x00000000) && ((__SOURCE__) != 0x00000000)) +#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__) & 0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U)) #define IS_TIM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || \ ((__CHANNEL__) == TIM_CHANNEL_2) || \ @@ -1963,7 +2023,7 @@ void TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma); void TIM_CCxChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t ChannelState); /** * @} -*/ +*/ /* End of private functions --------------------------------------------------*/ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.c index 39039e4c42..754c1a7116 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tim_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief TIM HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Timer Extended peripheral: @@ -113,7 +111,7 @@ /* Private define ------------------------------------------------------------*/ #define BDTR_BKF_SHIFT (16) #define BDTR_BK2F_SHIFT (20) -#define TIMx_ETRSEL_MASK ((uint32_t)0x0001C000) +#define TIMx_ETRSEL_MASK ((uint32_t)0x0003C000) /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ @@ -150,8 +148,8 @@ static void TIM_CCxNChannelCmd(TIM_TypeDef* TIMx, uint32_t Channel, uint32_t Cha */ /** * @brief Initializes the TIM Hall Sensor Interface and initialize the associated handle. - * @param htim: TIM Encoder Interface handle - * @param sConfig: TIM Hall Sensor configuration structure + * @param htim TIM Encoder Interface handle + * @param sConfig TIM Hall Sensor configuration structure * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig) @@ -164,9 +162,10 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSen return HAL_ERROR; } - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity)); assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler)); assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter)); @@ -229,7 +228,7 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSen /** * @brief DeInitialize the TIM Hall Sensor interface - * @param htim: TIM Hall Sensor handle + * @param htim TIM Hall Sensor handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) @@ -256,7 +255,7 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) /** * @brief Initializes the TIM Hall Sensor MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) @@ -271,7 +270,7 @@ __weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) /** * @brief DeInitialize TIM Hall Sensor MSP. - * @param htim: TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) @@ -286,16 +285,16 @@ __weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Hall Sensor Interface. - * @param htim : TIM Hall Sensor handle + * @param htim TIM Hall Sensor handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - /* Enable the Input Capture channels 1 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); /* Enable the Peripheral */ @@ -307,16 +306,16 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) /** * @brief Stops the TIM Hall sensor Interface. - * @param htim : TIM Hall Sensor handle + * @param htim TIM Hall Sensor handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); /* Disable the Input Capture channels 1, 2 and 3 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); /* Disable the Peripheral */ @@ -328,19 +327,19 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Hall Sensor Interface in interrupt mode. - * @param htim : TIM Hall Sensor handle + * @param htim TIM Hall Sensor handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); /* Enable the capture compare Interrupts 1 event */ __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); - /* Enable the Input Capture channels 1 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); /* Enable the Peripheral */ @@ -352,16 +351,16 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) /** * @brief Stops the TIM Hall Sensor Interface in interrupt mode. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - /* Disable the Input Capture channels 1 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); /* Disable the capture compare Interrupts event */ @@ -376,15 +375,15 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Hall Sensor Interface in DMA mode. - * @param htim : TIM Hall Sensor handle - * @param pData: The destination Buffer address. - * @param Length: The length of data to be transferred from TIM peripheral to memory. + * @param htim TIM Hall Sensor handle + * @param pData The destination Buffer address. + * @param Length The length of data to be transferred from TIM peripheral to memory. * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); if((htim->State == HAL_TIM_STATE_BUSY)) { @@ -401,8 +400,8 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32 htim->State = HAL_TIM_STATE_BUSY; } } - /* Enable the Input Capture channels 1 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + /* Enable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE); /* Set the DMA Input Capture 1 Callback */ @@ -425,16 +424,16 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32 /** * @brief Stops the TIM Hall Sensor Interface in DMA mode. - * @param htim : TIM handle + * @param htim TIM handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) { /* Check the parameters */ - assert_param(IS_TIM_XOR_INSTANCE(htim->Instance)); + assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance)); - /* Disable the Input Capture channels 1 - (in the Hall Sensor Interface the Three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ + /* Disable the Input Capture channel 1 + (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */ TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE); @@ -475,13 +474,12 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) /** * @brief Starts the TIM Output Compare signal generation on the complementary * output. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -505,13 +503,12 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Stops the TIM Output Compare signal generation on the complementary * output. - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -535,13 +532,12 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the TIM Output Compare signal generation in interrupt mode * on the complementary output. - * @param htim : TIM OC handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM OC handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -585,7 +581,7 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Chann /* Enable the TIM Break interrupt */ __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK); - + /* Enable the Capture compare channel N */ TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE); @@ -602,13 +598,12 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Chann /** * @brief Stops the TIM Output Compare signal generation in interrupt mode * on the complementary output. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -675,15 +670,14 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channe /** * @brief Starts the TIM Output Compare signal generation in DMA mode * on the complementary output. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData: The source Buffer address. - * @param Length: The length of data to be transferred from memory to TIM peripheral + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) @@ -792,13 +786,12 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Stops the TIM Output Compare signal generation in DMA mode * on the complementary output. - * @param htim : TIM Output Compare handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM Output Compare handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -892,13 +885,12 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann /** * @brief Starts the PWM signal generation on the complementary output. - * @param htim : TIM handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -921,13 +913,12 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel /** * @brief Stops the PWM signal generation on the complementary output. - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -951,13 +942,12 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) /** * @brief Starts the PWM signal generation in interrupt mode on the * complementary output. - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -1018,13 +1008,12 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Stops the PWM signal generation in interrupt mode on the * complementary output. - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Channel) @@ -1071,7 +1060,7 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Chan /* Disable the complementary PWM output */ TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE); - + /* Disable the TIM Break interrupt (only if no more channel is active) */ tmpccer = htim->Instance->CCER; if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == RESET) @@ -1092,15 +1081,14 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT (TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Starts the TIM PWM signal generation in DMA mode on the * complementary output - * @param htim : TIM handle - * @param Channel : TIM Channel to be enabled + * @param htim TIM handle + * @param Channel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @param pData: The source Buffer address. - * @param Length: The length of data to be transferred from memory to TIM peripheral + * @param pData The source Buffer address. + * @param Length The length of data to be transferred from memory to TIM peripheral * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) @@ -1209,13 +1197,12 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha /** * @brief Stops the TIM PWM signal generation in DMA mode on the complementary * output - * @param htim : TIM handle - * @param Channel : TIM Channel to be disabled + * @param htim TIM handle + * @param Channel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) @@ -1298,8 +1285,8 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Starts the TIM One Pulse signal generation on the complementary * output. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channel to be enabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1323,8 +1310,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t Ou /** * @brief Stops the TIM One Pulse signal generation on the complementary * output. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channel to be disabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1352,8 +1339,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t Out /** * @brief Starts the TIM One Pulse signal generation in interrupt mode on the * complementary channel. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channel to be enabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channel to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1383,8 +1370,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t /** * @brief Stops the TIM One Pulse signal generation in interrupt mode on the * complementary channel. - * @param htim : TIM One Pulse handle - * @param OutputChannel : TIM Channel to be disabled + * @param htim TIM One Pulse handle + * @param OutputChannel TIM Channel to be disabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg TIM_CHANNEL_2: TIM Channel 2 selected @@ -1447,15 +1434,15 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t * configured in Hall sensor interface, this interface Timer will generate the * commutation at its TRGO output (connected to Timer used in this function) each time * the TI1 of the Interface Timer detect a commutation at its input TI1. - * @param htim: TIM handle - * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor * This parameter can be one of the following values: * @arg TIM_TS_ITR0: Internal trigger 0 selected * @arg TIM_TS_ITR1: Internal trigger 1 selected * @arg TIM_TS_ITR2: Internal trigger 2 selected * @arg TIM_TS_ITR3: Internal trigger 3 selected * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource : the Commutation Event source + * @param CommutationSource the Commutation Event source * This parameter can be one of the following values: * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit @@ -1496,15 +1483,15 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef *htim, uint * configured in Hall sensor interface, this interface Timer will generate the * commutation at its TRGO output (connected to Timer used in this function) each time * the TI1 of the Interface Timer detect a commutation at its input TI1. - * @param htim: TIM handle - * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor * This parameter can be one of the following values: * @arg TIM_TS_ITR0: Internal trigger 0 selected * @arg TIM_TS_ITR1: Internal trigger 1 selected * @arg TIM_TS_ITR2: Internal trigger 2 selected * @arg TIM_TS_ITR3: Internal trigger 3 selected * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource : the Commutation Event source + * @param CommutationSource the Commutation Event source * This parameter can be one of the following values: * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit @@ -1549,15 +1536,15 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef *htim, u * commutation at its TRGO output (connected to Timer used in this function) each time * the TI1 of the Interface Timer detect a commutation at its input TI1. * @note The user should configure the DMA in his own software, in This function only the COMDE bit is set - * @param htim: TIM handle - * @param InputTrigger : the Internal trigger corresponding to the Timer Interfacing with the Hall sensor + * @param htim TIM handle + * @param InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor * This parameter can be one of the following values: * @arg TIM_TS_ITR0: Internal trigger 0 selected * @arg TIM_TS_ITR1: Internal trigger 1 selected * @arg TIM_TS_ITR2: Internal trigger 2 selected * @arg TIM_TS_ITR3: Internal trigger 3 selected * @arg TIM_TS_NONE: No trigger is needed - * @param CommutationSource : the Commutation Event source + * @param CommutationSource the Commutation Event source * This parameter can be one of the following values: * @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer * @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit @@ -1601,8 +1588,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef *htim, /** * @brief Configures the TIM in master mode. - * @param htim: TIM handle. - * @param sMasterConfig: pointer to a TIM_MasterConfigTypeDef structure that + * @param htim TIM handle. + * @param sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that * contains the selected trigger output (TRGO) and the Master/Slave * mode. * @retval HAL status @@ -1663,8 +1650,8 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, /** * @brief Configures the Break feature, dead time, Lock level, OSSI/OSSR State * and the AOE(automatic output enable). - * @param htim: TIM handle - * @param sBreakDeadTimeConfig: pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that + * @param htim TIM handle + * @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that * contains the BDTR Register configuration information for the TIM peripheral. * @retval HAL status */ @@ -1672,7 +1659,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef * sBreakDeadTimeConfig) { uint32_t tmpbdtr = 0; - + /* Check the parameters */ assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance)); assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode)); @@ -1683,13 +1670,13 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity)); assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->BreakFilter)); assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput)); - + /* Check input state */ __HAL_LOCK(htim); - + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, - the OSSI State, the dead time value and the Automatic Output Enable Bit */ - + the OSSI State, the dead time value and the Automatic Output Enable Bit */ + /* Set the BDTR bits */ MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime); MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel); @@ -1700,22 +1687,23 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput); MODIFY_REG(tmpbdtr, TIM_BDTR_MOE, sBreakDeadTimeConfig->AutomaticOutput); MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << BDTR_BKF_SHIFT)); - + if (IS_TIM_BKIN2_INSTANCE(htim->Instance)) { + /* Check the parameters */ assert_param(IS_TIM_BREAK2_STATE(sBreakDeadTimeConfig->Break2State)); assert_param(IS_TIM_BREAK2_POLARITY(sBreakDeadTimeConfig->Break2Polarity)); assert_param(IS_TIM_BREAK_FILTER(sBreakDeadTimeConfig->Break2Filter)); - + /* Set the BREAK2 input related BDTR bits */ MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << BDTR_BK2F_SHIFT)); MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State); MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity); } - + /* Set TIMx_BDTR */ htim->Instance->BDTR = tmpbdtr; - + __HAL_UNLOCK(htim); return HAL_OK; @@ -1723,12 +1711,12 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, /** * @brief Configures the break input source. - * @param htim: TIM handle. - * @param BreakInput: Break input to configure + * @param htim TIM handle. + * @param BreakInput Break input to configure * This parameter can be one of the following values: * @arg TIM_BREAKINPUT_BRK: Timer break input * @arg TIM_BREAKINPUT_BRK2: Timer break 2 input - * @param sBreakInputConfig: Break input source configuration + * @param sBreakInputConfig Break input source configuration * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, @@ -1748,22 +1736,24 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, assert_param(IS_TIM_BREAKINPUTSOURCE(sBreakInputConfig->Source)); assert_param(IS_TIM_BREAKINPUTSOURCE_STATE(sBreakInputConfig->Enable)); -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L471xx) || \ - defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1) { assert_param(IS_TIM_BREAKINPUTSOURCE_POLARITY(sBreakInputConfig->Polarity)); } #else assert_param(IS_TIM_BREAKINPUTSOURCE_POLARITY(sBreakInputConfig->Polarity)); -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx */ - /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ - +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /* Check input state */ __HAL_LOCK(htim); - + switch(sBreakInputConfig->Source) { case TIM_BREAKINPUTSOURCE_BKIN: @@ -1791,81 +1781,87 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, } break; -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L471xx) || \ - defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) case TIM_BREAKINPUTSOURCE_DFSDM1: { bkin_enable_mask = TIM1_OR2_BKDF1BK0E; bkin_enable_bitpos = 8; } - break; -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx */ - /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ + break; +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ default: break; } - + switch(BreakInput) { case TIM_BREAKINPUT_BRK: { /* Get the TIMx_OR2 register value */ tmporx = htim->Instance->OR2; - + /* Enable the break input */ tmporx &= ~bkin_enable_mask; tmporx |= (sBreakInputConfig->Enable << bkin_enable_bitpos) & bkin_enable_mask; - + /* Set the break input polarity */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L471xx) || \ - defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx */ - /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ - /* STM32L496xx || STM32L4A6xx */ +#endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ { tmporx &= ~bkin_polarity_mask; tmporx |= (sBreakInputConfig->Polarity << bkin_polarity_bitpos) & bkin_polarity_mask; } - + /* Set TIMx_OR2 */ - htim->Instance->OR2 = tmporx; + htim->Instance->OR2 = tmporx; } break; case TIM_BREAKINPUT_BRK2: { /* Get the TIMx_OR3 register value */ tmporx = htim->Instance->OR3; - + /* Enable the break input */ tmporx &= ~bkin_enable_mask; tmporx |= (sBreakInputConfig->Enable << bkin_enable_bitpos) & bkin_enable_mask; - + /* Set the break input polarity */ -#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || defined (STM32L471xx) || \ - defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ + defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) if (sBreakInputConfig->Source != TIM_BREAKINPUTSOURCE_DFSDM1) -#endif /* STM32L451xx || STM32L452xx || STM32L462xx || STM32L471xx */ - /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx */ +#endif /* STM32L451xx || STM32L452xx || STM32L462xx */ + /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ { tmporx &= ~bkin_polarity_mask; tmporx |= (sBreakInputConfig->Polarity << bkin_polarity_bitpos) & bkin_polarity_mask; } - + /* Set TIMx_OR3 */ - htim->Instance->OR3 = tmporx; + htim->Instance->OR3 = tmporx; } - break; + break; default: break; } - + __HAL_UNLOCK(htim); return HAL_OK; @@ -1873,7 +1869,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, /** * @brief Configures the TIMx Remapping input capabilities. - * @param htim: TIM handle. + * @param htim TIM handle. * @param Remap: specifies the TIM remapping source. * @if STM32L486xx @@ -1898,7 +1894,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, * field4 can have the following values: * @arg TIM_TIM1_ETR_COMP1: TIM1_ETR is connected to COMP1 output * @arg TIM_TIM1_ETR_COMP2: TIM1_ETR is connected to COMP2 output - * @note When field4 is set to TIM_TIM1_ETR_COMP1 or TIM_TIM1_ETR_COMP2 field1 and field2 values are not significant + * @note When field4 is set to TIM_TIM1_ETR_COMP1 or TIM_TIM1_ETR_COMP2 field1 and field2 values are not significant @endif @if STM32L443xx * For TIM1, the parameter is a combination of 3 fields (field1 | field2 | field3): @@ -1917,7 +1913,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, * @arg TIM_TIM1_ETR_COMP1: TIM1_ETR is connected to COMP1 output * @arg TIM_TIM1_ETR_COMP2: TIM1_ETR is connected to COMP2 output * - * @note When field3 is set to TIM_TIM1_ETR_COMP1 or TIM_TIM1_ETR_COMP2 field1 values is not significant + * @note When field3 is set to TIM_TIM1_ETR_COMP1 or TIM_TIM1_ETR_COMP2 field1 values is not significant * @endif @if STM32L486xx @@ -1995,7 +1991,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, * field4 can have the following values: * @arg TIM_TIM8_ETR_COMP1: TIM8_ETR is connected to COMP1 output * @arg TIM_TIM8_ETR_COMP2: TIM8_ETR is connected to COMP2 output - * @note When field4 is set to TIM_TIM8_ETR_COMP1 or TIM_TIM8_ETR_COMP2 field1 and field2 values are not significant + * @note When field4 is set to TIM_TIM8_ETR_COMP1 or TIM_TIM8_ETR_COMP2 field1 and field2 values are not significant * @endif * For TIM15, the parameter is a combination of 3 fields (field1 | field2): @@ -2005,7 +2001,7 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, * @arg TIM_TIM15_TI1_LSE: TIM15 TI1 is connected to LSE * * field2 can have the following values: - * @arg TIM_TIM15_ENCODERMODE_NONE: No redirection + * @arg TIM_TIM15_ENCODERMODE_NONE: No redirection * @arg TIM_TIM15_ENCODERMODE_TIM2: TIM2 IC1 and TIM2 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively * @arg TIM_TIM15_ENCODERMODE_TIM3: TIM3 IC1 and TIM3 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively * @arg TIM_TIM15_ENCODERMODE_TIM4: TIM4 IC1 and TIM4 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively @@ -2042,34 +2038,31 @@ HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) { uint32_t tmpor1 = 0; uint32_t tmpor2 = 0; - + __HAL_LOCK(htim); /* Check parameters */ assert_param(IS_TIM_REMAP_INSTANCE(htim->Instance)); assert_param(IS_TIM_REMAP(Remap)); - + /* Set ETR_SEL bit field (if required) */ if (IS_TIM_ETRSEL_INSTANCE(htim->Instance)) { tmpor2 = htim->Instance->OR2; tmpor2 &= ~TIMx_ETRSEL_MASK; tmpor2 |= (Remap & TIMx_ETRSEL_MASK); - + /* Set TIMx_OR2 */ - htim->Instance->OR2 = tmpor2; + htim->Instance->OR2 = tmpor2; } - + /* Set other remapping capabilities */ tmpor1 = Remap; tmpor1 &= ~TIMx_ETRSEL_MASK; /* Set TIMx_OR1 */ - htim->Instance->OR1 = Remap; - - /* Set TIMx_OR1 */ - htim->Instance->OR1 = tmpor1; - + htim->Instance->OR1 = tmpor1; + htim->State = HAL_TIM_STATE_READY; __HAL_UNLOCK(htim); @@ -2079,8 +2072,8 @@ HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) /** * @brief Group channel 5 and channel 1, 2 or 3 - * @param htim: TIM handle. - * @param Channels: specifies the reference signal(s) the OC5REF is combined with. + * @param htim TIM handle. + * @param Channels specifies the reference signal(s) the OC5REF is combined with. * This parameter can be any combination of the following values: * TIM_GROUPCH5_NONE: No effect of OC5REF on OC1REFC, OC2REFC and OC3REFC * TIM_GROUPCH5_OC1REFC: OC1REFC is the logical AND of OC1REFC and OC5REF @@ -2134,7 +2127,7 @@ HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Chan /** * @brief Hall commutation changed callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim) @@ -2149,7 +2142,7 @@ __weak void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim) /** * @brief Hall Break detection callback in non-blocking mode - * @param htim : TIM handle + * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) @@ -2183,7 +2176,7 @@ __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) /** * @brief Return the TIM Hall Sensor interface handle state. - * @param htim: TIM Hall Sensor handle + * @param htim TIM Hall Sensor handle * @retval HAL state */ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) @@ -2197,7 +2190,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) /** * @brief TIM DMA Commutation callback. - * @param hdma : pointer to DMA handle. + * @param hdma pointer to DMA handle. * @retval None */ void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) @@ -2212,12 +2205,12 @@ void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) /** * @brief Enables or disables the TIM Capture Compare Channel xN. * @param TIMx to select the TIM peripheral - * @param Channel: specifies the TIM Channel + * @param Channel specifies the TIM Channel * This parameter can be one of the following values: * @arg TIM_Channel_1: TIM Channel 1 * @arg TIM_Channel_2: TIM Channel 2 * @arg TIM_Channel_3: TIM Channel 3 - * @param ChannelNState: specifies the TIM Channel CCxNE bit new state. + * @param ChannelNState specifies the TIM Channel CCxNE bit new state. * This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable. * @retval None */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.h index 61df2f10dd..eae1c9a328 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tim_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tim_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of TIM HAL Extended module. ****************************************************************************** * @attention @@ -59,28 +57,28 @@ * @{ */ -/** - * @brief TIM Hall sensor Configuration Structure definition +/** + * @brief TIM Hall sensor Configuration Structure definition */ typedef struct { - + uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal. This parameter can be a value of @ref TIM_Input_Capture_Polarity */ - + uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler. This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ - + uint32_t IC1Filter; /*!< Specifies the input capture filter. This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ - uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. + uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ } TIM_HallSensor_InitTypeDef; -/** - * @brief TIM Break/Break2 input configuration +/** + * @brief TIM Break/Break2 input configuration */ typedef struct { uint32_t Source; /*!< Specifies the source of the timer break input. @@ -119,15 +117,18 @@ typedef struct { /* STM32L496xx || STM32L4A6xx */ #define TIM_TIM1_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM1 TI1 is connected to GPIO */ #define TIM_TIM1_TI1_COMP1 (TIM1_OR1_TI1_RMP) /* !< TIM1 TI1 is connected to COMP1 */ +#define TIM_TIM1_ETR_GPIO ((uint32_t)(0x00000000)) /* !< TIM1_ETR is connected to GPIO */ #define TIM_TIM1_ETR_COMP1 (TIM1_OR2_ETRSEL_0) /* !< TIM1_ETR is connected to COMP1 output */ #define TIM_TIM1_ETR_COMP2 (TIM1_OR2_ETRSEL_1) /* !< TIM1_ETR is connected to COMP2 output */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_TIM2_ITR1_TIM8_TRGO ((uint32_t)(0x00000000)) /* !< TIM2_ITR1 is connected to TIM8_TRGO */ #define TIM_TIM2_ITR1_OTG_FS_SOF (TIM2_OR1_ITR1_RMP) /* !< TIM2_ITR1 is connected to OTG_FS SOF */ #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || \ defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define TIM_TIM2_ITR1_NONE ((uint32_t)(0x00000000)) /* !< No internal trigger on TIM2_ITR1 */ @@ -145,7 +146,8 @@ typedef struct { #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_TIM3_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM3 TI1 is connected to GPIO */ #define TIM_TIM3_TI1_COMP1 (TIM3_OR1_TI1_RMP_0) /* !< TIM3 TI1 is connected to COMP1 output */ #define TIM_TIM3_TI1_COMP2 (TIM3_OR1_TI1_RMP_1) /* !< TIM3 TI1 is connected to COMP2 output */ @@ -154,7 +156,8 @@ typedef struct { #define TIM_TIM3_ETR_COMP1 (TIM3_OR2_ETRSEL_0) /* !< TIM3_ETR is connected to COMP1 output */ #endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ defined (STM32L496xx) || defined (STM32L4A6xx) @@ -166,12 +169,19 @@ typedef struct { #define TIM_TIM8_ETR_ADC3_AWD1 (TIM8_OR1_ETR_ADC3_RMP_0) /* !< TIM8_ETR is connected to ADC3 AWD1 */ #define TIM_TIM8_ETR_ADC3_AWD2 (TIM8_OR1_ETR_ADC3_RMP_1) /* !< TIM8_ETR is connected to ADC3 AWD2 */ #define TIM_TIM8_ETR_ADC3_AWD3 (TIM8_OR1_ETR_ADC3_RMP_1 | TIM8_OR1_ETR_ADC3_RMP_0) /* !< TIM8_ETR is connected to ADC3 AWD3 */ -#define TIM_TIM8_ETR_COMP1 (TIM8_OR2_ETRSEL_0) /* !< TIM8_ETR is connected to COMP1 output */ -#define TIM_TIM8_ETR_COMP2 (TIM8_OR2_ETRSEL_1) /* !< TIM8_ETR is connected to COMP2 output */ -#define TIM_TIM8_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM8 TI1 is connected to GPIO */ -#define TIM_TIM8_TI1_COMP2 (TIM8_OR1_TI1_RMP) /* !< TIM8 TI1 is connected to COMP1 */ #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ /* STM32L496xx || STM32L4A6xx */ +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) +#define TIM_TIM8_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM8 TI1 is connected to GPIO */ +#define TIM_TIM8_TI1_COMP2 (TIM8_OR1_TI1_RMP) /* !< TIM8 TI1 is connected to COMP1 */ +#define TIM_TIM8_ETR_GPIO ((uint32_t)(0x00000000)) /* !< TIM8_ETR is connected to GPIO */ +#define TIM_TIM8_ETR_COMP1 (TIM8_OR2_ETRSEL_0) /* !< TIM8_ETR is connected to COMP1 output */ +#define TIM_TIM8_ETR_COMP2 (TIM8_OR2_ETRSEL_1) /* !< TIM8_ETR is connected to COMP2 output */ +#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define TIM_TIM15_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM15 TI1 is connected to GPIO */ #define TIM_TIM15_TI1_LSE (TIM15_OR1_TI1_RMP) /* !< TIM15 TI1 is connected to LSE */ @@ -179,16 +189,20 @@ typedef struct { #define TIM_TIM15_ENCODERMODE_TIM2 (TIM15_OR1_ENCODER_MODE_0) /* !< TIM2 IC1 and TIM2 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively */ #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_TIM15_ENCODERMODE_TIM3 (TIM15_OR1_ENCODER_MODE_1) /* !< TIM3 IC1 and TIM3 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively */ #endif /* STM32L451xx || STM32L452xx || STM32L462xx */ /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_TIM15_ENCODERMODE_TIM4 (TIM15_OR1_ENCODER_MODE_1 | TIM15_OR1_ENCODER_MODE_0) /* !< TIM4 IC1 and TIM4 IC2 are connected to TIM15 IC1 and TIM15 IC2 respectively */ #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define TIM_TIM16_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM16 TI1 is connected to GPIO */ #define TIM_TIM16_TI1_LSI (TIM16_OR1_TI1_RMP_0) /* !< TIM16 TI1 is connected to LSI */ @@ -205,13 +219,15 @@ typedef struct { /* STM32L496xx || STM32L4A6xx */ #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_TIM17_TI1_GPIO ((uint32_t)(0x00000000)) /* !< TIM17 TI1 is connected to GPIO */ #define TIM_TIM17_TI1_MSI (TIM17_OR1_TI1_RMP_0) /* !< TIM17 TI1 is connected to MSI */ #define TIM_TIM17_TI1_HSE_32 (TIM17_OR1_TI1_RMP_1) /* !< TIM17 TI1 is connected to HSE div 32 */ #define TIM_TIM17_TI1_MCO (TIM17_OR1_TI1_RMP_1 | TIM17_OR1_TI1_RMP_0) /* !< TIM17 TI1 is connected to MCO */ #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -233,11 +249,13 @@ typedef struct { #define TIM_BREAKINPUTSOURCE_COMP2 ((uint32_t)(0x00000004)) /* !< The COMP2 output is connected to the break input */ #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define TIM_BREAKINPUTSOURCE_DFSDM1 ((uint32_t)(0x00000008)) /* !< The analog watchdog output of the DFSDM1 peripheral is connected to the break input */ #endif /* STM32L451xx || STM32L452xx || STM32L462xx || */ /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -259,7 +277,7 @@ typedef struct { /** * @} */ - + /** * @} */ @@ -286,7 +304,8 @@ typedef struct { #if defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) || \ defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ - defined (STM32L496xx) || defined (STM32L4A6xx) + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define IS_TIM_BREAKINPUTSOURCE(__SOURCE__) (((__SOURCE__) == TIM_BREAKINPUTSOURCE_BKIN) || \ ((__SOURCE__) == TIM_BREAKINPUTSOURCE_COMP1) || \ ((__SOURCE__) == TIM_BREAKINPUTSOURCE_COMP2) || \ @@ -295,7 +314,9 @@ typedef struct { #define IS_TIM_BREAKINPUTSOURCE(__SOURCE__) (((__SOURCE__) == TIM_BREAKINPUTSOURCE_BKIN) || \ ((__SOURCE__) == TIM_BREAKINPUTSOURCE_COMP1) || \ ((__SOURCE__) == TIM_BREAKINPUTSOURCE_COMP2)) -#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || STM32L496xx || STM32L4A6xx */ +#endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define IS_TIM_BREAKINPUTSOURCE_STATE(__STATE__) (((__STATE__) == TIM_BREAKINPUTSOURCE_DISABLE) || \ ((__STATE__) == TIM_BREAKINPUTSOURCE_ENABLE)) @@ -312,7 +333,7 @@ typedef struct { * @{ */ -/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions +/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions * @brief Timer Hall Sensor functions * @{ */ @@ -409,7 +430,7 @@ HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) * @} */ -/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions +/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions * @brief Extended Callbacks functions * @{ */ @@ -420,7 +441,7 @@ void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim); * @} */ -/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions +/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions * @brief Extended Peripheral State functions * @{ */ @@ -452,7 +473,7 @@ void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); /** * @} */ - + #ifdef __cplusplus } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.c index d0aad5aba1..ffb54c8bb1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tsc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief This file provides firmware functions to manage the following * functionalities of the Touch Sensing Controller (TSC) peripheral: * + Initialization and De-initialization diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.h index f1c3386132..32f5bb622b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_tsc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_tsc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of TSC HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.c index 206c426c90..8aa955c859 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_uart.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief UART HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). @@ -31,8 +29,9 @@ (+++) Enable the NVIC USART IRQ handle. (++) UART interrupts handling: -@@- The specific UART interrupts (Transmission complete interrupt, - RXNE interrupt and Error Interrupts) are managed using the macros - __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit and receive processes. + RXNE interrupt, RX/TX FIFOs related interrupts and Error Interrupts) + are managed using the macros __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() + inside the transmit and receive processes. (++) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() and HAL_UART_Receive_DMA() APIs): (+++) Declare a DMA handle structure for the Tx/Rx channel. @@ -42,7 +41,7 @@ (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle. (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel. - (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware + (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Prescaler value , Hardware flow control and Mode (Receiver/Transmitter) in the huart handle Init structure. (#) If required, program UART advanced features (TX/RX pins swap, auto Baud rate detection,...) @@ -118,11 +117,28 @@ /** @defgroup UART_Private_Constants UART Private Constants * @{ */ -#define UART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ - USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8)) /*!< UART or USART CR1 fields of parameters set by UART_SetConfig API */ +#if defined(USART_CR1_FIFOEN) +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ + USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8| \ + USART_CR1_FIFOEN )) /*!< UART or USART CR1 fields of parameters set by UART_SetConfig API */ +#else +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ + USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8 )) /*!< UART or USART CR1 fields of parameters set by UART_SetConfig API */ +#endif + +#if defined(USART_CR1_FIFOEN) +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE | USART_CR3_ONEBIT| \ + USART_CR3_TXFTCFG | USART_CR3_RXFTCFG )) /*!< UART or USART CR3 fields of parameters set by UART_SetConfig API */ +#else +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE | USART_CR3_ONEBIT)) /*!< UART or USART CR3 fields of parameters set by UART_SetConfig API */ +#endif + +#define LPUART_BRR_MIN 0x00000300U /* LPUART BRR minimum authorized value */ +#define LPUART_BRR_MAX 0x000FFFFFU /* LPUART BRR maximum authorized value */ + +#define UART_BRR_MIN 0x10U /* UART BRR minimum authorized value */ +#define UART_BRR_MAX 0x0000FFFFU /* UART BRR maximum authorized value */ -#define UART_LPUART_BRR_MIN ((uint32_t)0x00000300) /* LPUART BRR minimum authorized value */ -#define UART_LPUART_BRR_MAX ((uint32_t)0x000FFFFF) /* LPUART BRR maximum authorized value */ /** * @} */ @@ -145,9 +161,20 @@ static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma); static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma); static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma); static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma); -static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart); -static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart); -static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart); +static void UART_TxISR_8BIT(UART_HandleTypeDef *huart); +static void UART_TxISR_16BIT(UART_HandleTypeDef *huart); +#if defined(USART_CR1_FIFOEN) +static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart); +static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart); +#endif +static void UART_EndTransmit_IT(UART_HandleTypeDef *huart); +static void UART_RxISR_8BIT(UART_HandleTypeDef *huart); +static void UART_RxISR_16BIT(UART_HandleTypeDef *huart); +#if defined(USART_CR1_FIFOEN) +static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart); +static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart); +#endif + /** * @} */ @@ -220,8 +247,8 @@ static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart); /** * @brief Initialize the UART mode according to the specified - * parameters in the UART_InitTypeDef and initialize the associated handle. - * @param huart: UART handle. + * parameters in the UART_InitTypeDef and initialize the associated handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) @@ -231,7 +258,7 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) { return HAL_ERROR; } - + if(huart->Init.HwFlowCtl != UART_HWCONTROL_NONE) { /* Check the parameters */ @@ -242,49 +269,49 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) /* Check the parameters */ assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance))); } - + if(huart->gState == HAL_UART_STATE_RESET) { /* Allocate lock resource and initialize it */ huart->Lock = HAL_UNLOCKED; - + /* Init the low level hardware : GPIO, CLOCK */ HAL_UART_MspInit(huart); } - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the UART Communication parameters */ if (UART_SetConfig(huart) == HAL_ERROR) { return HAL_ERROR; } - + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) { UART_AdvFeatureConfig(huart); } - + /* In asynchronous mode, the following bits must be kept cleared: - LINEN and CLKEN bits in the USART_CR2 register, - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ return (UART_CheckIdleState(huart)); } /** * @brief Initialize the half-duplex mode according to the specified - * parameters in the UART_InitTypeDef and creates the associated handle. - * @param huart: UART handle. + * parameters in the UART_InitTypeDef and creates the associated handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) @@ -294,47 +321,47 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) { return HAL_ERROR; } - + /* Check UART instance */ assert_param(IS_UART_HALFDUPLEX_INSTANCE(huart->Instance)); - + if(huart->gState == HAL_UART_STATE_RESET) { /* Allocate lock resource and initialize it */ huart->Lock = HAL_UNLOCKED; - + /* Init the low level hardware : GPIO, CLOCK */ HAL_UART_MspInit(huart); } - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the UART Communication parameters */ if (UART_SetConfig(huart) == HAL_ERROR) { return HAL_ERROR; } - + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) { UART_AdvFeatureConfig(huart); } - + /* In half-duplex mode, the following bits must be kept cleared: - LINEN and CLKEN bits in the USART_CR2 register, - SCEN and IREN bits in the USART_CR3 register.*/ CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); CLEAR_BIT(huart->Instance->CR3, (USART_CR3_IREN | USART_CR3_SCEN)); - + /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */ SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ return (UART_CheckIdleState(huart)); } @@ -342,9 +369,9 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart) /** * @brief Initialize the LIN mode according to the specified - * parameters in the UART_InitTypeDef and creates the associated handle . - * @param huart: UART handle. - * @param BreakDetectLength: specifies the LIN break detection length. + * parameters in the UART_InitTypeDef and creates the associated handle . + * @param huart UART handle. + * @param BreakDetectLength Specifies the LIN break detection length. * This parameter can be one of the following values: * @arg @ref UART_LINBREAKDETECTLENGTH_10B 10-bit break detection * @arg @ref UART_LINBREAKDETECTLENGTH_11B 11-bit break detection @@ -357,12 +384,12 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe { return HAL_ERROR; } - + /* Check the LIN UART instance */ assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); /* Check the Break detection length parameter */ assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength)); - + /* LIN mode limited to 16-bit oversampling only */ if(huart->Init.OverSampling == UART_OVERSAMPLING_8) { @@ -373,47 +400,47 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe { return HAL_ERROR; } - + if(huart->gState == HAL_UART_STATE_RESET) { /* Allocate lock resource and initialize it */ huart->Lock = HAL_UNLOCKED; - + /* Init the low level hardware : GPIO, CLOCK */ HAL_UART_MspInit(huart); } - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the UART Communication parameters */ if (UART_SetConfig(huart) == HAL_ERROR) { return HAL_ERROR; } - + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) { UART_AdvFeatureConfig(huart); } - + /* In LIN mode, the following bits must be kept cleared: - LINEN and CLKEN bits in the USART_CR2 register, - SCEN and IREN bits in the USART_CR3 register.*/ CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN); CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN)); - + /* Enable the LIN mode by setting the LINEN bit in the CR2 register */ SET_BIT(huart->Instance->CR2, USART_CR2_LINEN); - + /* Set the USART LIN Break detection length. */ MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ return (UART_CheckIdleState(huart)); } @@ -421,10 +448,10 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe /** * @brief Initialize the multiprocessor mode according to the specified - * parameters in the UART_InitTypeDef and initialize the associated handle. - * @param huart: UART handle. - * @param Address: UART node address (4-, 6-, 7- or 8-bit long). - * @param WakeUpMethod: specifies the UART wakeup method. + * parameters in the UART_InitTypeDef and initialize the associated handle. + * @param huart UART handle. + * @param Address UART node address (4-, 6-, 7- or 8-bit long). + * @param WakeUpMethod Specifies the UART wakeup method. * This parameter can be one of the following values: * @arg @ref UART_WAKEUPMETHOD_IDLELINE WakeUp by an idle line detection * @arg @ref UART_WAKEUPMETHOD_ADDRESSMARK WakeUp by an address mark @@ -444,53 +471,53 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add { return HAL_ERROR; } - + /* Check the wake up method parameter */ assert_param(IS_UART_WAKEUPMETHOD(WakeUpMethod)); - + if(huart->gState == HAL_UART_STATE_RESET) { /* Allocate lock resource and initialize it */ huart->Lock = HAL_UNLOCKED; - + /* Init the low level hardware : GPIO, CLOCK */ HAL_UART_MspInit(huart); } - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the UART Communication parameters */ if (UART_SetConfig(huart) == HAL_ERROR) { return HAL_ERROR; } - + if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) { UART_AdvFeatureConfig(huart); } - + /* In multiprocessor mode, the following bits must be kept cleared: - LINEN and CLKEN bits in the USART_CR2 register, - SCEN, HDSEL and IREN bits in the USART_CR3 register. */ CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); - + if (WakeUpMethod == UART_WAKEUPMETHOD_ADDRESSMARK) { /* If address mark wake up method is chosen, set the USART address node */ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)Address << UART_CR2_ADDRESS_LSB_POS)); } - + /* Set the wake up method by setting the WAKE bit in the CR1 register */ MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ return (UART_CheckIdleState(huart)); } @@ -498,7 +525,7 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add /** * @brief DeInitialize the UART peripheral. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart) @@ -508,42 +535,42 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart) { return HAL_ERROR; } - + /* Check the parameters */ assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance))); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - - huart->Instance->CR1 = 0x0; - huart->Instance->CR2 = 0x0; - huart->Instance->CR3 = 0x0; - + + huart->Instance->CR1 = 0x0U; + huart->Instance->CR2 = 0x0U; + huart->Instance->CR3 = 0x0U; + /* DeInit the low level hardware */ HAL_UART_MspDeInit(huart); - + huart->ErrorCode = HAL_UART_ERROR_NONE; - huart->gState = HAL_UART_STATE_RESET; - huart->RxState = HAL_UART_STATE_RESET; - + huart->gState = HAL_UART_STATE_RESET; + huart->RxState = HAL_UART_STATE_RESET; + /* Process Unlock */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Initialize the UART MSP. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_MspInit(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_UART_MspInit can be implemented in the user file */ @@ -551,14 +578,14 @@ __weak void HAL_UART_MspInit(UART_HandleTypeDef *huart) /** * @brief DeInitialize the UART MSP. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_UART_MspDeInit can be implemented in the user file */ @@ -647,39 +674,43 @@ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) /** * @brief Send an amount of data in blocking mode. - * @param huart: UART handle. - * @param pData: Pointer to data buffer. - * @param Size: Amount of data to be sent. - * @param Timeout: Timeout duration. + * @note When FIFO mode is enabled, writing a data in the TDR register adds one + * data to the TXFIFO. Write operations to the TDR register are performed + * when TXFNF flag is set. From hardware perspective, TXFNF flag and + * TXE are mapped on the same bit-field. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be sent. + * @param Timeout Timeout duration. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) { uint16_t* tmp; - uint32_t tickstart = 0; - + uint32_t tickstart = 0U; + /* Check that a Tx process is not already ongoing */ if(huart->gState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - - huart->TxXferSize = Size; + + huart->TxXferSize = Size; huart->TxXferCount = Size; - while(huart->TxXferCount > 0) + + while(huart->TxXferCount > 0U) { - huart->TxXferCount--; if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; @@ -687,25 +718,27 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) { tmp = (uint16_t*) pData; - huart->Instance->TDR = (*tmp & (uint16_t)0x01FF); - pData += 2; + huart->Instance->TDR = (*tmp & (uint16_t)0x01FFU); + pData += 2U; } else { - huart->Instance->TDR = (*pData++ & (uint8_t)0xFF); + huart->Instance->TDR = (*pData++ & (uint8_t)0xFFU); } + huart->TxXferCount--; } + if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } - + /* At end of Tx process, restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } else @@ -716,10 +749,14 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u /** * @brief Receive an amount of data in blocking mode. - * @param huart: UART handle. - * @param pData: pointer to data buffer. - * @param Size: amount of data to be received. - * @param Timeout: Timeout duration. + * @note When FIFO mode is enabled, the RXFNE flag is set as long as the RXFIFO + * is not empty. Read operations from the RDR register are performed when + * RXFNE flag is set. From hardware perspective, RXFNE flag and + * RXNE are mapped on the same bit-field. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. + * @param Timeout Timeout duration. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) @@ -727,35 +764,34 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui uint16_t* tmp; uint16_t uhMask; uint32_t tickstart = 0; - + /* Check that a Rx process is not already ongoing */ if(huart->RxState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->RxState = HAL_UART_STATE_BUSY_RX; - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - - huart->RxXferSize = Size; + + huart->RxXferSize = Size; huart->RxXferCount = Size; - + /* Computation of UART mask to apply to RDR register */ UART_MASK_COMPUTATION(huart); uhMask = huart->Mask; - + /* as long as data have to be received */ - while(huart->RxXferCount > 0) + while(huart->RxXferCount > 0U) { - huart->RxXferCount--; if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; @@ -764,20 +800,21 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui { tmp = (uint16_t*) pData ; *tmp = (uint16_t)(huart->Instance->RDR & uhMask); - pData +=2; + pData +=2U; } else { *pData++ = (uint8_t)(huart->Instance->RDR & (uint8_t)uhMask); } + huart->RxXferCount--; } - + /* At end of Rx process, restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } else @@ -788,9 +825,9 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui /** * @brief Send an amount of data in interrupt mode. - * @param huart: UART handle. - * @param pData: pointer to data buffer. - * @param Size: amount of data to be sent. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be sent. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) @@ -798,27 +835,66 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData /* Check that a Tx process is not already ongoing */ if(huart->gState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - - huart->pTxBuffPtr = pData; - huart->TxXferSize = Size; + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; huart->TxXferCount = Size; - + huart->TxISR = NULL; + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - - /* Enable the UART Transmit Data Register Empty Interrupt */ - SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE); - + +#if defined(USART_CR1_FIFOEN) + /* Configure Tx interrupt processing */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + /* Set the Tx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->TxISR = UART_TxISR_16BIT_FIFOEN; + } + else + { + huart->TxISR = UART_TxISR_8BIT_FIFOEN; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the TX FIFO threshold interrupt */ + SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE); + } + else +#endif + { + /* Set the Tx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->TxISR = UART_TxISR_16BIT; + } + else + { + huart->TxISR = UART_TxISR_8BIT; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the Transmit Data Register Empty interrupt */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else + SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE); +#endif + } + return HAL_OK; } else @@ -829,9 +905,9 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData /** * @brief Receive an amount of data in interrupt mode. - * @param huart: UART handle. - * @param pData: pointer to data buffer. - * @param Size: amount of data to be received. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) @@ -839,33 +915,73 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, /* Check that a Rx process is not already ongoing */ if(huart->RxState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - - huart->pRxBuffPtr = pData; - huart->RxXferSize = Size; + + huart->pRxBuffPtr = pData; + huart->RxXferSize = Size; huart->RxXferCount = Size; - + huart->RxISR = NULL; + /* Computation of UART mask to apply to RDR register */ UART_MASK_COMPUTATION(huart); - + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->RxState = HAL_UART_STATE_BUSY_RX; - - /* Process Unlocked */ - __HAL_UNLOCK(huart); - + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(huart->Instance->CR3, USART_CR3_EIE); - - /* Enable the UART Parity Error and Data Register not empty Interrupts */ - SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); - + +#if defined(USART_CR1_FIFOEN) + /* Configure Rx interrupt processing*/ + if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess)) + { + /* Set the Rx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->RxISR = UART_RxISR_16BIT_FIFOEN; + } + else + { + huart->RxISR = UART_RxISR_8BIT_FIFOEN; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); + SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE); + } + else +#endif + { + /* Set the Rx ISR function pointer according to the data word length */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + { + huart->RxISR = UART_RxISR_16BIT; + } + else + { + huart->RxISR = UART_RxISR_8BIT; + } + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE); +#else + SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); +#endif + } + return HAL_OK; } else @@ -876,9 +992,9 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, /** * @brief Send an amount of data in DMA mode. - * @param huart: UART handle. - * @param pData: pointer to data buffer. - * @param Size: amount of data to be sent. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be sent. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) @@ -886,46 +1002,46 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat /* Check that a Tx process is not already ongoing */ if(huart->gState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - - huart->pTxBuffPtr = pData; - huart->TxXferSize = Size; + + huart->pTxBuffPtr = pData; + huart->TxXferSize = Size; huart->TxXferCount = Size; - + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; - + /* Set the UART DMA transfer complete callback */ huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt; - + /* Set the UART DMA Half transfer complete callback */ huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt; - + /* Set the DMA error callback */ huart->hdmatx->XferErrorCallback = UART_DMAError; - + /* Set the DMA abort callback */ huart->hdmatx->XferAbortCallback = NULL; - + /* Enable the UART transmit DMA channel */ HAL_DMA_Start_IT(huart->hdmatx, (uint32_t)huart->pTxBuffPtr, (uint32_t)&huart->Instance->TDR, Size); - + /* Clear the TC flag in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF); - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + /* Enable the DMA transfer for transmit request by setting the DMAT bit - in the UART CR3 register */ + in the UART CR3 register */ SET_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + return HAL_OK; } else @@ -936,9 +1052,9 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat /** * @brief Receive an amount of data in DMA mode. - * @param huart: UART handle. - * @param pData: pointer to data buffer. - * @param Size: amount of data to be received. + * @param huart UART handle. + * @param pData Pointer to data buffer. + * @param Size Amount of data to be received. * @note When the UART parity is enabled (PCE = 1), the received data contain * the parity bit (MSB position). * @retval HAL status @@ -948,48 +1064,48 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData /* Check that a Rx process is not already ongoing */ if(huart->RxState == HAL_UART_STATE_READY) { - if((pData == NULL ) || (Size == 0)) + if((pData == NULL ) || (Size == 0U)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(huart); - + huart->pRxBuffPtr = pData; huart->RxXferSize = Size; - + huart->ErrorCode = HAL_UART_ERROR_NONE; huart->RxState = HAL_UART_STATE_BUSY_RX; - + /* Set the UART DMA transfer complete callback */ huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt; - + /* Set the UART DMA Half transfer complete callback */ huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt; - + /* Set the DMA error callback */ huart->hdmarx->XferErrorCallback = UART_DMAError; - + /* Set the DMA abort callback */ huart->hdmarx->XferAbortCallback = NULL; - + /* Enable the DMA channel */ HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->RDR, (uint32_t)huart->pRxBuffPtr, Size); - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + /* Enable the UART Parity Error Interrupt */ SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); - + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(huart->Instance->CR3, USART_CR3_EIE); - + /* Enable the DMA transfer for the receiver request by setting the DMAR bit - in the UART CR3 register */ + in the UART CR3 register */ SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + return HAL_OK; } else @@ -1000,14 +1116,14 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData /** * @brief Pause the DMA Transfer. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + if ((huart->gState == HAL_UART_STATE_BUSY_TX) && (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))) { @@ -1020,27 +1136,27 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart) /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - + /* Disable the UART DMA Rx request */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); } - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Resume the DMA Transfer. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + if(huart->gState == HAL_UART_STATE_BUSY_TX) { /* Enable the UART DMA Tx request */ @@ -1050,65 +1166,65 @@ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart) { /* Clear the Overrun flag before resuming the Rx transfer */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); - + /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */ SET_BIT(huart->Instance->CR1, USART_CR1_PEIE); SET_BIT(huart->Instance->CR3, USART_CR3_EIE); - + /* Enable the UART DMA Rx request */ SET_BIT(huart->Instance->CR3, USART_CR3_DMAR); } - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Stop the DMA Transfer. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) { /* The Lock is not implemented on this API to allow the user application - to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback() / - HAL_UART_TxHalfCpltCallback / HAL_UART_RxHalfCpltCallback: - indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete - interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of - the stream and the corresponding call back is executed. */ - + to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback() / + HAL_UART_TxHalfCpltCallback / HAL_UART_RxHalfCpltCallback: + indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete + interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of + the stream and the corresponding call back is executed. */ + /* Stop UART DMA Tx request if ongoing */ if ((huart->gState == HAL_UART_STATE_BUSY_TX) && (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT))) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Abort the UART DMA Tx channel */ if(huart->hdmatx != NULL) { HAL_DMA_Abort(huart->hdmatx); } - + UART_EndTxTransfer(huart); } - + /* Stop UART DMA Rx request if ongoing */ if ((huart->RxState == HAL_UART_STATE_BUSY_RX) && (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel */ if(huart->hdmarx != NULL) { HAL_DMA_Abort(huart->hdmarx); } - + UART_EndRxTransfer(huart); } - + return HAL_OK; } @@ -1127,55 +1243,70 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) { /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* Disable the UART DMA Tx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Abort the UART DMA Tx channel : use blocking DMA Abort API (no callback) */ if(huart->hdmatx != NULL) { /* Set the UART DMA Abort callback to Null. No call back execution at end of DMA abort procedure */ huart->hdmatx->XferAbortCallback = NULL; - + HAL_DMA_Abort(huart->hdmatx); } } - + /* Disable the UART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel : use blocking DMA Abort API (no callback) */ if(huart->hdmarx != NULL) { /* Set the UART DMA Abort callback to Null. No call back execution at end of DMA abort procedure */ huart->hdmarx->XferAbortCallback = NULL; - + HAL_DMA_Abort(huart->hdmarx); } } - + /* Reset Tx and Rx transfer counters */ - huart->TxXferCount = 0; - huart->RxXferCount = 0; - + huart->TxXferCount = 0U; + huart->RxXferCount = 0U; + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->gState and huart->RxState to Ready */ huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; - + /* Reset Handle ErrorCode to No Error */ huart->ErrorCode = HAL_UART_ERROR_NONE; - + return HAL_OK; } @@ -1194,30 +1325,42 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart) HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Disable the UART DMA Tx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Abort the UART DMA Tx channel : use blocking DMA Abort API (no callback) */ if(huart->hdmatx != NULL) { /* Set the UART DMA Abort callback to Null. No call back execution at end of DMA abort procedure */ huart->hdmatx->XferAbortCallback = NULL; - + HAL_DMA_Abort(huart->hdmatx); } } - + /* Reset Tx transfer counter */ - huart->TxXferCount = 0; - + huart->TxXferCount = 0U; + +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif + /* Restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + return HAL_OK; } @@ -1236,34 +1379,41 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart) HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* Disable the UART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel : use blocking DMA Abort API (no callback) */ if(huart->hdmarx != NULL) { /* Set the UART DMA Abort callback to Null. No call back execution at end of DMA abort procedure */ huart->hdmarx->XferAbortCallback = NULL; - + HAL_DMA_Abort(huart->hdmarx); } } - + /* Reset Rx transfer counter */ - huart->RxXferCount = 0; - + huart->RxXferCount = 0U; + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + return HAL_OK; } @@ -1283,10 +1433,14 @@ HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart) */ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) { - uint32_t abortcplt = 1; + uint32_t abortcplt = 1U; /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised @@ -1325,7 +1479,7 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) { /* Disable DMA Tx at UART level */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (callback) */ if(huart->hdmatx != NULL) { @@ -1339,16 +1493,16 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) } else { - abortcplt = 0; + abortcplt = 0U; } } } - + /* Disable the UART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (callback) */ if(huart->hdmarx != NULL) { @@ -1359,36 +1513,51 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) if(HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) { huart->hdmarx->XferAbortCallback = NULL; - abortcplt = 1; + abortcplt = 1U; } else { - abortcplt = 0; + abortcplt = 0U; } } } - + /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ - if (abortcplt == 1) + if (abortcplt == 1U) { /* Reset Tx and Rx transfer counters */ - huart->TxXferCount = 0; - huart->RxXferCount = 0; - + huart->TxXferCount = 0U; + huart->RxXferCount = 0U; + + /* Clear ISR function pointers */ + huart->RxISR = NULL; + huart->TxISR = NULL; + /* Reset errorCode */ huart->ErrorCode = HAL_UART_ERROR_NONE; - + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->gState and huart->RxState to Ready */ huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_UART_AbortCpltCallback(huart); } - + return HAL_OK; } @@ -1409,20 +1578,24 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* Disable the UART DMA Tx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (callback) */ if(huart->hdmatx != NULL) { /* Set the UART DMA Abort callback : will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ huart->hdmatx->XferAbortCallback = UART_DMATxOnlyAbortCallback; - + /* Abort DMA TX */ if(HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) { @@ -1433,11 +1606,14 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) else { /* Reset Tx transfer counter */ - huart->TxXferCount = 0; - + huart->TxXferCount = 0U; + + /* Clear TxISR function pointers */ + huart->TxISR = NULL; + /* Restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_UART_AbortTransmitCpltCallback(huart); } @@ -1445,15 +1621,26 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) else { /* Reset Tx transfer counter */ - huart->TxXferCount = 0; + huart->TxXferCount = 0U; + + /* Clear TxISR function pointers */ + huart->TxISR = NULL; +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif + /* Restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_UART_AbortTransmitCpltCallback(huart); } - + return HAL_OK; } @@ -1474,21 +1661,25 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart) HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* Disable the UART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (callback) */ if(huart->hdmarx != NULL) { /* Set the UART DMA Abort callback : will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ huart->hdmarx->XferAbortCallback = UART_DMARxOnlyAbortCallback; - + /* Abort DMA RX */ if(HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) { @@ -1499,14 +1690,20 @@ HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) else { /* Reset Rx transfer counter */ - huart->RxXferCount = 0; - + huart->RxXferCount = 0U; + + /* Clear RxISR function pointer */ + huart->pRxBuffPtr = NULL; + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_UART_AbortReceiveCpltCallback(huart); } @@ -1514,115 +1711,144 @@ HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart) else { /* Reset Rx transfer counter */ - huart->RxXferCount = 0; - + huart->RxXferCount = 0U; + + /* Clear RxISR function pointer */ + huart->pRxBuffPtr = NULL; + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + /* Restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + /* As no DMA to be aborted, call directly user Abort complete callback */ HAL_UART_AbortReceiveCpltCallback(huart); } - + return HAL_OK; } /** * @brief Handle UART interrupt request. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) { uint32_t isrflags = READ_REG(huart->Instance->ISR); uint32_t cr1its = READ_REG(huart->Instance->CR1); - uint32_t cr3its; + uint32_t cr3its = READ_REG(huart->Instance->CR3); uint32_t errorflags; - + /* If no error occurs */ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE)); if (errorflags == RESET) { /* UART in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { - UART_Receive_IT(huart); + if (huart->RxISR != NULL) {huart->RxISR(huart);} return; } } - + /* If some errors occur */ - cr3its = READ_REG(huart->Instance->CR3); +#if defined(USART_CR1_FIFOEN) + if( (errorflags != RESET) + && ( (((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != RESET) + || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != RESET))) ) +#else if( (errorflags != RESET) && ( ((cr3its & USART_CR3_EIE) != RESET) || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET)) ) +#endif { /* UART parity error interrupt occurred -------------------------------------*/ if(((isrflags & USART_ISR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) { - __HAL_UART_CLEAR_IT(huart, UART_CLEAR_PEF); - + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF); + huart->ErrorCode |= HAL_UART_ERROR_PE; } - + /* UART frame error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { - __HAL_UART_CLEAR_IT(huart, UART_CLEAR_FEF); - + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF); + huart->ErrorCode |= HAL_UART_ERROR_FE; } - + /* UART noise error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { - __HAL_UART_CLEAR_IT(huart, UART_CLEAR_NEF); - + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF); + huart->ErrorCode |= HAL_UART_ERROR_NE; } /* UART Over-Run interrupt occurred -----------------------------------------*/ - if(((isrflags & USART_ISR_ORE) != RESET) && - (((cr1its & USART_CR1_RXNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#if defined(USART_CR1_FIFOEN) + if( ((isrflags & USART_ISR_ORE) != RESET) + &&( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) || + ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != RESET))) +#else + if( ((isrflags & USART_ISR_ORE) != RESET) + &&( ((cr1its & USART_CR1_RXNEIE) != RESET) || + ((cr3its & USART_CR3_EIE) != RESET))) +#endif { - __HAL_UART_CLEAR_IT(huart, UART_CLEAR_OREF); - + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF); + huart->ErrorCode |= HAL_UART_ERROR_ORE; } - + /* Call UART Error Call back function if need be --------------------------*/ if(huart->ErrorCode != HAL_UART_ERROR_NONE) { /* UART in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { - UART_Receive_IT(huart); + if (huart->RxISR != NULL) {huart->RxISR(huart);} } - + /* If Overrun error occurs, or if any error occurs in DMA mode reception, - consider error as blocking */ + consider error as blocking */ if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))) - { + { /* Blocking error : transfer is aborted - Set the UART state ready to be able to start again the process, - Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ UART_EndRxTransfer(huart); - + /* Disable the UART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* Abort the UART DMA Rx channel */ if(huart->hdmarx != NULL) { /* Set the UART DMA Abort callback : - will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ + will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; - + /* Abort DMA RX */ if(HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) { @@ -1645,46 +1871,67 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) else { /* Non Blocking error : transfer could go on. - Error is notified to user through user error callback */ + Error is notified to user through user error callback */ HAL_UART_ErrorCallback(huart); huart->ErrorCode = HAL_UART_ERROR_NONE; } } return; - + } /* End if some error occurs */ - + /* UART wakeup from Stop mode interrupt occurred ---------------------------*/ - cr3its = READ_REG(huart->Instance->CR3); if(((isrflags & USART_ISR_WUF) != RESET) && ((cr3its & USART_CR3_WUFIE) != RESET)) { - __HAL_UART_CLEAR_IT(huart, UART_CLEAR_WUF); + __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF); /* Set the UART state ready to be able to start again the process */ huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; HAL_UARTEx_WakeupCallback(huart); return; } - + /* UART in mode Transmitter ------------------------------------------------*/ - if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_TXE_TXFNF) != RESET) + && ( ((cr1its & USART_CR1_TXEIE_TXFNFIE) != RESET) + || ((cr3its & USART_CR3_TXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_TXE) != RESET) + && ((cr1its & USART_CR1_TXEIE) != RESET)) +#endif { - UART_Transmit_IT(huart); + if (huart->TxISR != NULL) {huart->TxISR(huart);} return; } - + /* UART in mode Transmitter (transmission end) -----------------------------*/ if(((isrflags & USART_ISR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) { UART_EndTransmit_IT(huart); return; } - + +#if defined(USART_CR1_FIFOEN) + /* UART TX Fifo Empty occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_TXFE) != RESET) && ((cr1its & USART_CR1_TXFEIE) != RESET)) + { + HAL_UARTEx_TxFifoEmptyCallback(huart); + return; + } + + /* UART RX Fifo Full occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_RXFF) != RESET) && ((cr1its & USART_CR1_RXFFIE) != RESET)) + { + HAL_UARTEx_RxFifoFullCallback(huart); + return; + } +#endif } /** * @brief Tx Transfer completed callback. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) @@ -1699,14 +1946,14 @@ __weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) /** * @brief Tx Half Transfer completed callback. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); - + /* NOTE: This function should not be modified, when the callback is needed, the HAL_UART_TxHalfCpltCallback can be implemented in the user file. */ @@ -1714,14 +1961,14 @@ __weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) /** * @brief Rx Transfer completed callback. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_UART_RxCpltCallback can be implemented in the user file. */ @@ -1729,14 +1976,14 @@ __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) /** * @brief Rx Half Transfer completed callback. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); - + /* NOTE: This function should not be modified, when the callback is needed, the HAL_UART_RxHalfCpltCallback can be implemented in the user file. */ @@ -1744,7 +1991,7 @@ __weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) /** * @brief UART error callback. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) @@ -1818,9 +2065,11 @@ __weak void HAL_UART_AbortReceiveCpltCallback (UART_HandleTypeDef *huart) (+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode (+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode (+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode + (+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode (+) UART_SetConfig() API configures the UART peripheral (+) UART_AdvFeatureConfig() API optionally configures the UART advanced features (+) UART_CheckIdleState() API ensures that TEACK and/or REACK are set after initialization + (+) UART_Wakeup_AddressConfig() API configures the wake-up from stop mode parameters (+) HAL_HalfDuplex_EnableTransmitter() API disables receiver and enables transmitter (+) HAL_HalfDuplex_EnableReceiver() API disables transmitter and enables receiver (+) HAL_LIN_SendBreak() API transmits the break characters @@ -1831,49 +2080,49 @@ __weak void HAL_UART_AbortReceiveCpltCallback (UART_HandleTypeDef *huart) /** * @brief Enable UART in mute mode (does not mean UART enters mute mode; * to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called). - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Enable USART mute mode by setting the MME bit in the CR1 register */ SET_BIT(huart->Instance->CR1, USART_CR1_MME); - + huart->gState = HAL_UART_STATE_READY; - + return (UART_CheckIdleState(huart)); } /** - * @brief Disable UART mute mode (does not mean the UART actually exits mute mode - * as it may not have been in mute mode at this very moment). - * @param huart: UART handle. + * @brief Disable UART mute mode (does not mean the UART actually exits mute mode + * as it may not have been in mute mode at this very moment). + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - - /* Disable USART mute mode by clearing the MME bit in the CR1 register */ + + /* Disable USART mute mode by clearing the MME bit in the CR1 register */ CLEAR_BIT(huart->Instance->CR1, USART_CR1_MME); - + huart->gState = HAL_UART_STATE_READY; - + return (UART_CheckIdleState(huart)); } /** * @brief Enter UART mute mode (means UART actually enters mute mode). * @note To exit from mute mode, HAL_MultiProcessor_DisableMuteMode() API must be called. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) @@ -1883,7 +2132,7 @@ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart) /** * @brief Enable the UART transmitter and disable the UART receiver. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) @@ -1891,23 +2140,24 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart) /* Process Locked */ __HAL_LOCK(huart); huart->gState = HAL_UART_STATE_BUSY; - + /* Clear TE and RE bits */ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TE | USART_CR1_RE)); + /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */ SET_BIT(huart->Instance->CR1, USART_CR1_TE); - + huart->gState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Enable the UART receiver and disable the UART transmitter. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status. */ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) @@ -1915,47 +2165,48 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart) /* Process Locked */ __HAL_LOCK(huart); huart->gState = HAL_UART_STATE_BUSY; - + /* Clear TE and RE bits */ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TE | USART_CR1_RE)); + /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */ SET_BIT(huart->Instance->CR1, USART_CR1_RE); - + huart->gState = HAL_UART_STATE_READY; + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Transmit break characters. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) { /* Check the parameters */ assert_param(IS_UART_LIN_INSTANCE(huart->Instance)); - + /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Send break characters */ - huart->Instance->RQR |= UART_SENDBREAK_REQUEST; - + SET_BIT(huart->Instance->RQR, UART_SENDBREAK_REQUEST); + huart->gState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } - /** * @} */ @@ -1977,25 +2228,25 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart) */ /** - * @brief Return the UART handle state. + * @brief Return the UART handle state. * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART. + * the configuration information for the specified UART. * @retval HAL state */ HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart) { - uint32_t temp1= 0x00, temp2 = 0x00; + uint32_t temp1= 0x00U, temp2 = 0x00U; temp1 = huart->gState; temp2 = huart->RxState; - + return (HAL_UART_StateTypeDef)(temp1 | temp2); } /** - * @brief Return the UART handle error code. +* @brief Return the UART handle error code. * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART. - * @retval UART Error Code + * the configuration information for the specified UART. +* @retval UART Error Code */ uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart) { @@ -2015,99 +2266,126 @@ uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart) /** * @brief Configure the UART peripheral. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) { - uint32_t tmpreg = 0x00000000; + uint32_t tmpreg = 0x00000000U; UART_ClockSourceTypeDef clocksource = UART_CLOCKSOURCE_UNDEFINED; - uint16_t brrtemp = 0x0000; - uint16_t usartdiv = 0x0000; + uint16_t brrtemp = 0x0000U; + uint32_t usartdiv = 0x00000000U; HAL_StatusTypeDef ret = HAL_OK; - + uint32_t lpuart_ker_ck_pres = 0x00000000U; + /* Check the parameters */ assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate)); assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); if(UART_INSTANCE_LOWPOWER(huart)) { - assert_param(IS_LPUART_STOPBITS(huart->Init.StopBits)); + assert_param(IS_LPUART_STOPBITS(huart->Init.StopBits)); } else { assert_param(IS_UART_STOPBITS(huart->Init.StopBits)); assert_param(IS_UART_ONE_BIT_SAMPLE(huart->Init.OneBitSampling)); } - + assert_param(IS_UART_PARITY(huart->Init.Parity)); assert_param(IS_UART_MODE(huart->Init.Mode)); assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl)); assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); - - +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_UART_PRESCALER(huart->Init.ClockPrescaler)); +#endif + /*-------------------------- USART CR1 Configuration -----------------------*/ /* Clear M, PCE, PS, TE, RE and OVER8 bits and configure - * the UART Word Length, Parity, Mode and oversampling: - * set the M bits according to huart->Init.WordLength value - * set PCE and PS bits according to huart->Init.Parity value - * set TE and RE bits according to huart->Init.Mode value - * set OVER8 bit according to huart->Init.OverSampling value */ + * the UART Word Length, Parity, Mode and oversampling: + * set the M bits according to huart->Init.WordLength value + * set PCE and PS bits according to huart->Init.Parity value + * set TE and RE bits according to huart->Init.Mode value + * set OVER8 bit according to huart->Init.OverSampling value */ tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ; - MODIFY_REG(huart->Instance->CR1, UART_CR1_FIELDS, tmpreg); - + MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg); + /*-------------------------- USART CR2 Configuration -----------------------*/ /* Configure the UART Stop Bits: Set STOP[13:12] bits according - * to huart->Init.StopBits value */ + * to huart->Init.StopBits value */ MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); - + /*-------------------------- USART CR3 Configuration -----------------------*/ /* Configure - * - UART HardWare Flow Control: set CTSE and RTSE bits according - * to huart->Init.HwFlowCtl value - * - one-bit sampling method versus three samples' majority rule according - * to huart->Init.OneBitSampling (not applicable to LPUART) */ + * - UART HardWare Flow Control: set CTSE and RTSE bits according + * to huart->Init.HwFlowCtl value + * - one-bit sampling method versus three samples' majority rule according + * to huart->Init.OneBitSampling (not applicable to LPUART) + * - set TXFTCFG bit according to huart->Init.TxFifoThreshold value + * - set RXFTCFG bit according to huart->Init.RxFifoThreshold value */ tmpreg = (uint32_t)huart->Init.HwFlowCtl; + if (!(UART_INSTANCE_LOWPOWER(huart))) { tmpreg |= huart->Init.OneBitSampling; } - MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE | USART_CR3_ONEBIT), tmpreg); - + MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg); + +#if defined(USART_PRESC_PRESCALER) + /*-------------------------- USART PRESC Configuration -----------------------*/ + /* Configure + * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */ + MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler); +#endif + /*-------------------------- USART BRR Configuration -----------------------*/ UART_GETCLOCKSOURCE(huart, clocksource); - + /* Check LPUART instance */ if(UART_INSTANCE_LOWPOWER(huart)) { /* Retrieve frequency clock */ - tmpreg = 0; - switch (clocksource) { case UART_CLOCKSOURCE_PCLK1: - tmpreg = HAL_RCC_GetPCLK1Freq(); +#if defined(USART_PRESC_PRESCALER) + lpuart_ker_ck_pres = (HAL_RCC_GetPCLK1Freq()/UARTPrescTable[huart->Init.ClockPrescaler]); +#else + lpuart_ker_ck_pres = HAL_RCC_GetPCLK1Freq(); +#endif break; case UART_CLOCKSOURCE_HSI: - tmpreg = (uint32_t) HSI_VALUE; +#if defined(USART_PRESC_PRESCALER) + lpuart_ker_ck_pres = ((uint32_t)HSI_VALUE/UARTPrescTable[huart->Init.ClockPrescaler]); +#else + lpuart_ker_ck_pres = (uint32_t)HSI_VALUE; +#endif break; case UART_CLOCKSOURCE_SYSCLK: - tmpreg = HAL_RCC_GetSysClockFreq(); +#if defined(USART_PRESC_PRESCALER) + lpuart_ker_ck_pres = (HAL_RCC_GetSysClockFreq()/UARTPrescTable[huart->Init.ClockPrescaler]); +#else + lpuart_ker_ck_pres = HAL_RCC_GetSysClockFreq(); +#endif break; case UART_CLOCKSOURCE_LSE: - tmpreg = (uint32_t) LSE_VALUE; +#if defined(USART_PRESC_PRESCALER) + lpuart_ker_ck_pres = ((uint32_t)LSE_VALUE/UARTPrescTable[huart->Init.ClockPrescaler]); +#else + lpuart_ker_ck_pres = (uint32_t)LSE_VALUE; +#endif break; case UART_CLOCKSOURCE_UNDEFINED: default: - ret = HAL_ERROR; + ret = HAL_ERROR; break; } - + /* if proper clock source reported */ - if (tmpreg != 0) + if (lpuart_ker_ck_pres != 0U) { /* ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */ - if ( (tmpreg < (3 * huart->Init.BaudRate) ) || - (tmpreg > (4096 * huart->Init.BaudRate) )) + if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) || + (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) { ret = HAL_ERROR; } @@ -2116,26 +2394,43 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) switch (clocksource) { case UART_CLOCKSOURCE_PCLK1: - tmpreg = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_HSI: - tmpreg = (uint32_t)(UART_DIV_LPUART(HSI_VALUE, huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint32_t)(UART_DIV_LPUART(HSI_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint32_t)(UART_DIV_LPUART(HSI_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_SYSCLK: - tmpreg = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint32_t)(UART_DIV_LPUART(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_LSE: - tmpreg = (uint32_t)(UART_DIV_LPUART(LSE_VALUE, huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint32_t)(UART_DIV_LPUART(LSE_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint32_t)(UART_DIV_LPUART(LSE_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_UNDEFINED: default: ret = HAL_ERROR; break; } - - if ((tmpreg >= UART_LPUART_BRR_MIN) && (tmpreg <= UART_LPUART_BRR_MAX)) + + /* It is forbidden to write values lower than 0x300 in the LPUART_BRR register */ + if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX)) { - huart->Instance->BRR = tmpreg; + huart->Instance->BRR = usartdiv; } else { @@ -2150,112 +2445,179 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart) switch (clocksource) { case UART_CLOCKSOURCE_PCLK1: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_PCLK2: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_HSI: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_SYSCLK: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_LSE: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_UNDEFINED: default: - ret = HAL_ERROR; + ret = HAL_ERROR; break; } - - brrtemp = usartdiv & 0xFFF0; - brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000F) >> 1U); - huart->Instance->BRR = brrtemp; + + /* USARTDIV must be greater than or equal to 0d16 */ + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + { + brrtemp = usartdiv & 0xFFF0U; + brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); + huart->Instance->BRR = brrtemp; + } + else + { + ret = HAL_ERROR; + } } else { switch (clocksource) { case UART_CLOCKSOURCE_PCLK1: - huart->Instance->BRR = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_PCLK2: - huart->Instance->BRR = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_HSI: - huart->Instance->BRR = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_SYSCLK: - huart->Instance->BRR = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_LSE: - huart->Instance->BRR = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate)); +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate, huart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate)); +#endif break; case UART_CLOCKSOURCE_UNDEFINED: default: - ret = HAL_ERROR; + ret = HAL_ERROR; break; } + + /* USARTDIV must be greater than or equal to 0d16 */ + if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX)) + { + huart->Instance->BRR = usartdiv; + } + else + { + ret = HAL_ERROR; + } } - + +#if defined(USART_CR1_FIFOEN) + /* Initialize the number of data to process during RX/TX ISR execution */ + huart->NbTxDataToProcess = 1; + huart->NbRxDataToProcess = 1; +#endif + + /* Clear ISR function pointers */ + huart->RxISR = NULL; + huart->TxISR = NULL; + return ret; - } /** * @brief Configure the UART peripheral advanced features. - * @param huart: UART handle. + * @param huart UART handle. * @retval None */ void UART_AdvFeatureConfig(UART_HandleTypeDef *huart) { /* Check whether the set of advanced features to configure is properly set */ assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit)); - + /* if required, configure TX pin active level inversion */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT)) { assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert)); MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert); } - + /* if required, configure RX pin active level inversion */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT)) { assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert)); MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert); } - + /* if required, configure data inversion */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT)) { assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert)); MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert); } - + /* if required, configure RX/TX pins swap */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT)) { assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap)); MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap); } - + /* if required, configure RX overrun detection disabling */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT)) { assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable)); MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable); } - + /* if required, configure DMA disabling on reception error */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT)) { assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError)); MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError); } - + /* if required, configure auto Baud rate detection scheme */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT)) { @@ -2269,7 +2631,7 @@ void UART_AdvFeatureConfig(UART_HandleTypeDef *huart) MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode); } } - + /* if required, configure MSB first on communication line */ if(HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT)) { @@ -2285,14 +2647,14 @@ void UART_AdvFeatureConfig(UART_HandleTypeDef *huart) */ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart) { - uint32_t tickstart = 0; - + uint32_t tickstart = 0U; + /* Initialize the UART ErrorCode */ huart->ErrorCode = HAL_UART_ERROR_NONE; - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - + /* Check if the Transmitter is enabled */ if((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE) { @@ -2313,24 +2675,24 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart) return HAL_TIMEOUT; } } - + /* Initialize the UART State */ - huart->gState = HAL_UART_STATE_READY; - huart->RxState = HAL_UART_STATE_READY; - + huart->gState= HAL_UART_STATE_READY; + huart->RxState= HAL_UART_STATE_READY; + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Handle UART Communication Timeout. - * @param huart UART handle. - * @param Flag Specifies the UART flag to check - * @param Status Flag status (SET or RESET) - * @param Tickstart Tick start value - * @param Timeout Timeout duration + * @param huart UART handle. + * @param Flag Specifies the UART flag to check + * @param Status Flag status (SET or RESET) + * @param Tickstart Tick start value + * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout) @@ -2341,17 +2703,22 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_ /* Check for the Timeout */ if(Timeout != HAL_MAX_DELAY) { - if((Timeout == 0) || ((HAL_GetTick()-Tickstart) > Timeout)) + if((Timeout == 0U) || ((HAL_GetTick()-Tickstart) > Timeout)) { /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - - huart->gState = HAL_UART_STATE_READY; + + huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); + return HAL_TIMEOUT; } } @@ -2362,13 +2729,17 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_ /** * @brief End ongoing Tx transfer on UART peripheral (following error detection or Transmit completion). - * @param huart UART handle. + * @param huart UART handle. * @retval None */ static void UART_EndTxTransfer(UART_HandleTypeDef *huart) { /* Disable TXEIE and TCIE interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE)); +#endif /* At end of Tx process, restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; @@ -2377,17 +2748,24 @@ static void UART_EndTxTransfer(UART_HandleTypeDef *huart) /** * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). - * @param huart UART handle. + * @param huart UART handle. * @retval None */ static void UART_EndRxTransfer(UART_HandleTypeDef *huart) { /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); /* At end of Rx process, restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; + + /* Reset RxIsr function pointer */ + huart->RxISR = NULL; } @@ -2402,13 +2780,13 @@ static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) /* DMA Normal mode */ if ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) ) - { - huart->TxXferCount = 0; - + { + huart->TxXferCount = 0U; + /* Disable the DMA transfer for transmit request by resetting the DMAT bit - in the UART CR3 register */ + in the UART CR3 register */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - + /* Enable the UART Transmit Complete Interrupt */ SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); } @@ -2417,7 +2795,6 @@ static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) { HAL_UART_TxCpltCallback(huart); } - } /** @@ -2428,7 +2805,7 @@ static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma) static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - + HAL_UART_TxHalfCpltCallback(huart); } @@ -2440,24 +2817,24 @@ static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - + /* DMA Normal mode */ if ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) ) { - huart->RxXferCount = 0; - + huart->RxXferCount = 0U; + /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - + /* Disable the DMA transfer for the receiver request by resetting the DMAR bit in the UART CR3 register */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - + /* At end of Rx process, restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; } - + HAL_UART_RxCpltCallback(huart); } @@ -2469,7 +2846,7 @@ static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - + HAL_UART_RxHalfCpltCallback(huart); } @@ -2481,23 +2858,23 @@ static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) static void UART_DMAError(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - + /* Stop UART DMA Tx request if ongoing */ if ( (huart->gState == HAL_UART_STATE_BUSY_TX) &&(HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) ) { - huart->TxXferCount = 0; + huart->TxXferCount = 0U; UART_EndTxTransfer(huart); } - + /* Stop UART DMA Rx request if ongoing */ if ( (huart->RxState == HAL_UART_STATE_BUSY_RX) &&(HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ) { - huart->RxXferCount = 0; + huart->RxXferCount = 0U; UART_EndRxTransfer(huart); } - + huart->ErrorCode |= HAL_UART_ERROR_DMA; HAL_UART_ErrorCallback(huart); } @@ -2505,15 +2882,15 @@ static void UART_DMAError(DMA_HandleTypeDef *hdma) /** * @brief DMA UART communication abort callback, when initiated by HAL services on Error * (To be called at end of DMA Abort procedure following error occurrence). - * @param hdma DMA handle. + * @param hdma DMA handle. * @retval None */ static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - huart->RxXferCount = 0; - huart->TxXferCount = 0; - + huart->RxXferCount = 0U; + huart->TxXferCount = 0U; + HAL_UART_ErrorCallback(huart); } @@ -2530,7 +2907,7 @@ static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) UART_HandleTypeDef* huart = (UART_HandleTypeDef* )(hdma->Parent); huart->hdmatx->XferAbortCallback = NULL; - + /* Check if an Abort process is still ongoing */ if(huart->hdmarx != NULL) { @@ -2541,19 +2918,27 @@ static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) } /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0; - huart->RxXferCount = 0; - + huart->TxXferCount = 0U; + huart->RxXferCount = 0U; + /* Reset errorCode */ huart->ErrorCode = HAL_UART_ERROR_NONE; - + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); + +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif /* Restore huart->gState and huart->RxState to Ready */ huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; - + /* Call user Abort complete callback */ HAL_UART_AbortCpltCallback(huart); } @@ -2572,7 +2957,7 @@ static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) UART_HandleTypeDef* huart = (UART_HandleTypeDef* )(hdma->Parent); huart->hdmarx->XferAbortCallback = NULL; - + /* Check if an Abort process is still ongoing */ if(huart->hdmatx != NULL) { @@ -2583,19 +2968,22 @@ static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) } /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0; - huart->RxXferCount = 0; - + huart->TxXferCount = 0U; + huart->RxXferCount = 0U; + /* Reset errorCode */ huart->ErrorCode = HAL_UART_ERROR_NONE; - + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->gState and huart->RxState to Ready */ huart->gState = HAL_UART_STATE_READY; huart->RxState = HAL_UART_STATE_READY; - + /* Call user Abort complete callback */ HAL_UART_AbortCpltCallback(huart); } @@ -2612,12 +3000,20 @@ static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)(hdma->Parent); - - huart->TxXferCount = 0; - + + huart->TxXferCount = 0U; + +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (huart->FifoMode == UART_FIFOMODE_ENABLE) + { + __HAL_UART_SEND_REQ(huart, UART_TXDATA_FLUSH_REQUEST); + } +#endif + /* Restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + /* Call user Abort complete callback */ HAL_UART_AbortTransmitCpltCallback(huart); } @@ -2633,140 +3029,409 @@ static void UART_DMATxOnlyAbortCallback(DMA_HandleTypeDef *hdma) static void UART_DMARxOnlyAbortCallback(DMA_HandleTypeDef *hdma) { UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; - - huart->RxXferCount = 0; - + + huart->RxXferCount = 0U; + /* Clear the Error flags in the ICR register */ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF | UART_CLEAR_NEF | UART_CLEAR_PEF | UART_CLEAR_FEF); - + + /* Discard the received data */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + /* Restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + /* Call user Abort complete callback */ HAL_UART_AbortReceiveCpltCallback(huart); } /** - * @brief Send an amount of data in interrupt mode. + * @brief TX interrrupt handler for 7 or 8 bits data word length . * @note Function is called under interruption only, once * interruptions have been enabled by HAL_UART_Transmit_IT(). - * @param huart UART handle. - * @retval HAL status + * @param huart UART handle. + * @retval None */ -static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) +static void UART_TxISR_8BIT(UART_HandleTypeDef *huart) { - uint16_t* tmp; - /* Check that a Tx process is ongoing */ if (huart->gState == HAL_UART_STATE_BUSY_TX) { if(huart->TxXferCount == 0) { /* Disable the UART Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE); - +#endif + /* Enable the UART Transmit Complete Interrupt */ SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); - - return HAL_OK; } else { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - tmp = (uint16_t*) huart->pTxBuffPtr; - huart->Instance->TDR = (*tmp & (uint16_t)0x01FF); - huart->pTxBuffPtr += 2; - } - else - { - huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0xFF); - } + huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0xFF); huart->TxXferCount--; - - return HAL_OK; } } - else +} + +/** + * @brief TX interrrupt handler for 9 bits data word length. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Transmit_IT(). + * @param huart UART handle. + * @retval None + */ +static void UART_TxISR_16BIT(UART_HandleTypeDef *huart) +{ + uint16_t* tmp; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) { - return HAL_BUSY; + if(huart->TxXferCount == 0) + { + /* Disable the UART Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else + CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE); +#endif + + /* Enable the UART Transmit Complete Interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + } + else + { + tmp = (uint16_t*) huart->pTxBuffPtr; + huart->Instance->TDR = (*tmp & (uint16_t)0x01FF); + huart->pTxBuffPtr += 2; + huart->TxXferCount--; + } } } +#if defined(USART_CR1_FIFOEN) +/** + * @brief TX interrrupt handler for 7 or 8 bits data word length and FIFO mode is enabled. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Transmit_IT(). + * @param huart UART handle. + * @retval None + */ +static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart) +{ + uint8_t nb_tx_data; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + for(nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0 ; nb_tx_data--) + { + if(huart->TxXferCount == 0U) + { + /* Disable the TX FIFO threshold interrupt */ + CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE); + + /* Enable the UART Transmit Complete Interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + + break; /* force exit loop */ + } + else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != RESET) + { + huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0xFF); + huart->TxXferCount--; + } + } + } +} + +/** + * @brief TX interrrupt handler for 9 bits data word length and FIFO mode is enabled. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Transmit_IT(). + * @param huart UART handle. + * @retval None + */ +static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart) +{ + uint16_t* tmp; + uint8_t nb_tx_data; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + { + for(nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0 ; nb_tx_data--) + { + if(huart->TxXferCount == 0U) + { + /* Disable the TX FIFO threshold interrupt */ + CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE); + + /* Enable the UART Transmit Complete Interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_TCIE); + + break; /* force exit loop */ + } + else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != RESET) + { + tmp = (uint16_t*) huart->pTxBuffPtr; + huart->Instance->TDR = (*tmp & (uint16_t)0x01FFU); + huart->pTxBuffPtr += 2U; + huart->TxXferCount--; + } + } + } +} +#endif + /** * @brief Wrap up transmission in non-blocking mode. - * @param huart pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status + * @param huart pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None */ -static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) +static void UART_EndTransmit_IT(UART_HandleTypeDef *huart) { /* Disable the UART Transmit Complete Interrupt */ CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE); - + /* Tx process is ended, restore huart->gState to Ready */ huart->gState = HAL_UART_STATE_READY; - + + /* Cleat TxISR function pointer */ + huart->TxISR = NULL; + HAL_UART_TxCpltCallback(huart); - - return HAL_OK; } /** - * @brief Receive an amount of data in interrupt mode. - * @note Function is called under interruption only, once - * interruptions have been enabled by HAL_UART_Receive_IT() - * @param huart UART handle. - * @retval HAL status + * @brief RX interrrupt handler for 7 or 8 bits data word length . + * @param huart UART handle. + * @retval None */ -static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) +static void UART_RxISR_8BIT(UART_HandleTypeDef *huart) { - uint16_t* tmp; - uint16_t uhMask = huart->Mask; + uint16_t uhMask = huart->Mask; uint16_t uhdata; - + /* Check that a Rx process is ongoing */ if(huart->RxState == HAL_UART_STATE_BUSY_RX) { uhdata = (uint16_t) READ_REG(huart->Instance->RDR); - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - { - tmp = (uint16_t*) huart->pRxBuffPtr ; - *tmp = (uint16_t)(uhdata & uhMask); - huart->pRxBuffPtr +=2; - } - else - { - *huart->pRxBuffPtr++ = (uint8_t)(uhdata & (uint8_t)uhMask); - } - + *huart->pRxBuffPtr++ = (uint8_t)(uhdata & (uint8_t)uhMask); + if(--huart->RxXferCount == 0) { /* Disable the UART Parity Error Interrupt and RXNE interrupt*/ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - +#endif + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - + /* Rx process is completed, restore huart->RxState to Ready */ huart->RxState = HAL_UART_STATE_READY; - + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + HAL_UART_RxCpltCallback(huart); - - return HAL_OK; } - - return HAL_OK; } else { /* Clear RXNE interrupt flag */ __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); - - return HAL_BUSY; } } +/** + * @brief RX interrrupt handler for 9 bits data word length . + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Receive_IT() + * @param huart UART handle. + * @retval None + */ +static void UART_RxISR_16BIT(UART_HandleTypeDef *huart) +{ + uint16_t* tmp; + uint16_t uhMask = huart->Mask; + uint16_t uhdata; + + /* Check that a Rx process is ongoing */ + if(huart->RxState == HAL_UART_STATE_BUSY_RX) + { + uhdata = (uint16_t) READ_REG(huart->Instance->RDR); + tmp = (uint16_t*) huart->pRxBuffPtr ; + *tmp = (uint16_t)(uhdata & uhMask); + huart->pRxBuffPtr +=2; + + if(--huart->RxXferCount == 0) + { + /* Disable the UART Parity Error Interrupt and RXNE interrupt*/ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else + CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + HAL_UART_RxCpltCallback(huart); + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + } +} + +#if defined(USART_CR1_FIFOEN) +/** + * @brief RX interrrupt handler for 7 or 8 bits data word length and FIFO mode is enabled. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Receive_IT() + * @param huart UART handle. + * @retval None + */ +static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart) +{ + uint16_t uhMask = huart->Mask; + uint16_t uhdata; + uint8_t nb_rx_data; + + /* Check that a Rx process is ongoing */ + if(huart->RxState == HAL_UART_STATE_BUSY_RX) + { + for(nb_rx_data = huart->NbRxDataToProcess ; nb_rx_data > 0 ; nb_rx_data--) + { + uhdata = (uint16_t) READ_REG(huart->Instance->RDR); + *huart->pRxBuffPtr++ = (uint8_t)(uhdata & (uint8_t)uhMask); + huart->RxXferCount--; + + if(huart->RxXferCount == 0U) + { + /* Disable the UART Parity Error Interrupt and RXFT interrupt*/ + CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */ + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + HAL_UART_RxCpltCallback(huart); + } + } + + /* When remaining number of bytes to receive is less than the RX FIFO + threshold, next incoming frames are processed as if FIFO mode was + disabled (i.e. one interrupt per received frame). + */ + if (((huart->RxXferCount != 0U)) && (huart->RxXferCount < huart->NbRxDataToProcess)) + { + /* Disable the UART RXFT interrupt*/ + CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE); + + /* Update the RxISR function pointer */ + huart->RxISR = UART_RxISR_8BIT; + + /* Enable the UART Data Register Not Empty interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + } +} + +/** + * @brief RX interrrupt handler for 9 bits data word length and FIFO mode is enabled. + * @note Function is called under interruption only, once + * interruptions have been enabled by HAL_UART_Receive_IT() + * @param huart UART handle. + * @retval None + */ +static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart) +{ + uint16_t* tmp; + uint16_t uhMask = huart->Mask; + uint16_t uhdata; + uint8_t nb_rx_data; + + /* Check that a Rx process is ongoing */ + if(huart->RxState == HAL_UART_STATE_BUSY_RX) + { + for(nb_rx_data = huart->NbRxDataToProcess ; nb_rx_data > 0 ; nb_rx_data--) + { + uhdata = (uint16_t) READ_REG(huart->Instance->RDR); + tmp = (uint16_t*) huart->pRxBuffPtr ; + *tmp = (uint16_t)(uhdata & uhMask); + huart->pRxBuffPtr +=2; + huart->RxXferCount--; + + if(huart->RxXferCount == 0U) + { + /* Disable the UART Parity Error Interrupt and RXFT interrupt*/ + CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */ + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + + /* Clear RxISR function pointer */ + huart->RxISR = NULL; + + HAL_UART_RxCpltCallback(huart); + } + } + + /* When remaining number of bytes to receive is less than the RX FIFO + threshold, next incoming frames are processed as if FIFO mode was + disabled (i.e. one interrupt per received frame). + */ + if (((huart->RxXferCount != 0U)) && (huart->RxXferCount < huart->NbRxDataToProcess)) + { + /* Disable the UART RXFT interrupt*/ + CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE); + + /* Update the RxISR function pointer */ + huart->RxISR = UART_RxISR_16BIT; + + /* Enable the UART Data Register Not Empty interrupt */ + SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST); + } +} +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.h index d4b5cfa2b5..34e100955f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_uart.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of UART HAL module. ****************************************************************************** * @attention @@ -66,12 +64,19 @@ typedef struct { uint32_t BaudRate; /*!< This member configures the UART communication baud rate. The baud rate register is computed using the following formula: + UART: + ===== - If oversampling is 16 or in LIN mode, - Baud Rate Register = ((PCLKx) / ((huart->Init.BaudRate))) + Baud Rate Register = ((uart_ker_ckpres) / ((huart->Init.BaudRate))) - If oversampling is 8, - Baud Rate Register[15:4] = ((2 * PCLKx) / ((huart->Init.BaudRate)))[15:4] + Baud Rate Register[15:4] = ((2 * uart_ker_ckpres) / ((huart->Init.BaudRate)))[15:4] Baud Rate Register[3] = 0 - Baud Rate Register[2:0] = (((2 * PCLKx) / ((huart->Init.BaudRate)))[3:0]) >> 1 */ + Baud Rate Register[2:0] = (((2 * uart_ker_ckpres) / ((huart->Init.BaudRate)))[3:0]) >> 1 + LPUART: + ======= + Baud Rate Register = ((256 * lpuart_ker_ckpres) / ((huart->Init.BaudRate))) + + where (uart/lpuart)_ker_ck_pres is the UART input clock divided by a prescaler */ uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. This parameter can be a value of @ref UARTEx_Word_Length. */ @@ -99,6 +104,12 @@ typedef struct uint32_t OneBitSampling; /*!< Specifies whether a single sample or three samples' majority vote is selected. Selecting the single sample method increases the receiver tolerance to clock deviations. This parameter can be a value of @ref UART_OneBit_Sampling. */ + +#if defined(USART_PRESC_PRESCALER) + uint32_t ClockPrescaler; /*!< Specifies the prescaler value used to divide the UART clock source. + This parameter can be a value of @ref UART_ClockPrescaler. */ +#endif + }UART_InitTypeDef; /** @@ -207,13 +218,12 @@ typedef enum */ typedef enum { - HAL_UART_ERROR_NONE = 0x00, /*!< No error */ - HAL_UART_ERROR_PE = 0x01, /*!< Parity error */ - HAL_UART_ERROR_NE = 0x02, /*!< Noise error */ - HAL_UART_ERROR_FE = 0x04, /*!< frame error */ - HAL_UART_ERROR_ORE = 0x08, /*!< Overrun error */ - HAL_UART_ERROR_DMA = 0x10, /*!< DMA transfer error */ - HAL_UART_ERROR_BUSY = 0x20 /*!< Busy Error */ + HAL_UART_ERROR_NONE = 0x00U, /*!< No error */ + HAL_UART_ERROR_PE = 0x01U, /*!< Parity error */ + HAL_UART_ERROR_NE = 0x02U, /*!< Noise error */ + HAL_UART_ERROR_FE = 0x04U, /*!< frame error */ + HAL_UART_ERROR_ORE = 0x08U, /*!< Overrun error */ + HAL_UART_ERROR_DMA = 0x10U /*!< DMA transfer error */ }HAL_UART_ErrorTypeDef; /** @@ -221,53 +231,71 @@ typedef enum */ typedef enum { - UART_CLOCKSOURCE_PCLK1 = 0x00, /*!< PCLK1 clock source */ - UART_CLOCKSOURCE_PCLK2 = 0x01, /*!< PCLK2 clock source */ - UART_CLOCKSOURCE_HSI = 0x02, /*!< HSI clock source */ - UART_CLOCKSOURCE_SYSCLK = 0x04, /*!< SYSCLK clock source */ - UART_CLOCKSOURCE_LSE = 0x08, /*!< LSE clock source */ - UART_CLOCKSOURCE_UNDEFINED = 0x10 /*!< Undefined clock source */ + UART_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ + UART_CLOCKSOURCE_PCLK2 = 0x01U, /*!< PCLK2 clock source */ + UART_CLOCKSOURCE_HSI = 0x02U, /*!< HSI clock source */ + UART_CLOCKSOURCE_SYSCLK = 0x04U, /*!< SYSCLK clock source */ + UART_CLOCKSOURCE_LSE = 0x08U, /*!< LSE clock source */ + UART_CLOCKSOURCE_UNDEFINED = 0x10U /*!< Undefined clock source */ }UART_ClockSourceTypeDef; /** * @brief UART handle Structure definition */ -typedef struct +typedef struct __UART_HandleTypeDef { - USART_TypeDef *Instance; /*!< UART registers base address */ + USART_TypeDef *Instance; /*!< UART registers base address */ - UART_InitTypeDef Init; /*!< UART communication parameters */ + UART_InitTypeDef Init; /*!< UART communication parameters */ - UART_AdvFeatureInitTypeDef AdvancedInit; /*!< UART Advanced Features initialization parameters */ + UART_AdvFeatureInitTypeDef AdvancedInit; /*!< UART Advanced Features initialization parameters */ - uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ + uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ - uint16_t TxXferSize; /*!< UART Tx Transfer size */ + uint16_t TxXferSize; /*!< UART Tx Transfer size */ - __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ + __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ - uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ + uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ - uint16_t RxXferSize; /*!< UART Rx Transfer size */ + uint16_t RxXferSize; /*!< UART Rx Transfer size */ - __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ + __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ - uint16_t Mask; /*!< UART Rx RDR register mask */ + uint16_t Mask; /*!< UART Rx RDR register mask */ - DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ +#if defined(USART_CR1_FIFOEN) + uint16_t NbRxDataToProcess; /*!< Number of data to process during RX ISR execution */ - DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ + uint16_t NbTxDataToProcess; /*!< Number of data to process during TX ISR execution */ - HAL_LockTypeDef Lock; /*!< Locking object */ + uint32_t FifoMode; /*!< Specifies if the FIFO mode is being used. + This parameter can be a value of @ref UARTEx_FIFO_mode. */ +#endif - __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management - and also related to Tx operations. - This parameter can be a value of @ref HAL_UART_StateTypeDef */ +#if defined(USART_CR2_SLVEN) + uint32_t SlaveMode; /*!< Specifies if the UART SPI Slave mode is being used. + This parameter can be a value of @ref UARTEx_Slave_Mode. */ +#endif - __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. - This parameter can be a value of @ref HAL_UART_StateTypeDef */ + void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */ - __IO uint32_t ErrorCode; /*!< UART Error code */ + void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */ + + DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management + and also related to Tx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. + This parameter can be a value of @ref HAL_UART_StateTypeDef */ + + __IO uint32_t ErrorCode; /*!< UART Error code */ }UART_HandleTypeDef; @@ -284,7 +312,7 @@ typedef struct * @{ */ #define UART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< UART frame with 0.5 stop bit */ -#define UART_STOPBITS_1 ((uint32_t)0x00000000) /*!< UART frame with 1 stop bit */ +#define UART_STOPBITS_1 0x00000000U /*!< UART frame with 1 stop bit */ #define UART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< UART frame with 1.5 stop bits */ #define UART_STOPBITS_2 USART_CR2_STOP_1 /*!< UART frame with 2 stop bits */ /** @@ -294,9 +322,9 @@ typedef struct /** @defgroup UART_Parity UART Parity * @{ */ -#define UART_PARITY_NONE ((uint32_t)0x00000000) /*!< No parity */ -#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) /*!< Even parity */ -#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) /*!< Odd parity */ +#define UART_PARITY_NONE 0x00000000U /*!< No parity */ +#define UART_PARITY_EVEN USART_CR1_PCE /*!< Even parity */ +#define UART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Odd parity */ /** * @} */ @@ -304,10 +332,10 @@ typedef struct /** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control * @{ */ -#define UART_HWCONTROL_NONE ((uint32_t)0x00000000) /*!< No hardware control */ -#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) /*!< Request To Send */ -#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) /*!< Clear To Send */ -#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) /*!< Request and Clear To Send */ +#define UART_HWCONTROL_NONE 0x00000000U /*!< No hardware control */ +#define UART_HWCONTROL_RTS USART_CR3_RTSE /*!< Request To Send */ +#define UART_HWCONTROL_CTS USART_CR3_CTSE /*!< Clear To Send */ +#define UART_HWCONTROL_RTS_CTS (USART_CR3_RTSE | USART_CR3_CTSE) /*!< Request and Clear To Send */ /** * @} */ @@ -315,9 +343,9 @@ typedef struct /** @defgroup UART_Mode UART Transfer Mode * @{ */ -#define UART_MODE_RX ((uint32_t)USART_CR1_RE) /*!< RX mode */ -#define UART_MODE_TX ((uint32_t)USART_CR1_TE) /*!< TX mode */ -#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) /*!< RX and TX mode */ +#define UART_MODE_RX USART_CR1_RE /*!< RX mode */ +#define UART_MODE_TX USART_CR1_TE /*!< TX mode */ +#define UART_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< RX and TX mode */ /** * @} */ @@ -325,8 +353,8 @@ typedef struct /** @defgroup UART_State UART State * @{ */ -#define UART_STATE_DISABLE ((uint32_t)0x00000000) /*!< UART disabled */ -#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) /*!< UART enabled */ +#define UART_STATE_DISABLE 0x00000000U /*!< UART disabled */ +#define UART_STATE_ENABLE USART_CR1_UE /*!< UART enabled */ /** * @} */ @@ -334,8 +362,8 @@ typedef struct /** @defgroup UART_Over_Sampling UART Over Sampling * @{ */ -#define UART_OVERSAMPLING_16 ((uint32_t)0x00000000) /*!< Oversampling by 16 */ -#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) /*!< Oversampling by 8 */ +#define UART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ +#define UART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ /** * @} */ @@ -343,19 +371,40 @@ typedef struct /** @defgroup UART_OneBit_Sampling UART One Bit Sampling Method * @{ */ -#define UART_ONE_BIT_SAMPLE_DISABLE ((uint32_t)0x00000000) /*!< One-bit sampling disable */ -#define UART_ONE_BIT_SAMPLE_ENABLE ((uint32_t)USART_CR3_ONEBIT) /*!< One-bit sampling enable */ +#define UART_ONE_BIT_SAMPLE_DISABLE 0x00000000U /*!< One-bit sampling disable */ +#define UART_ONE_BIT_SAMPLE_ENABLE USART_CR3_ONEBIT /*!< One-bit sampling enable */ /** * @} */ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup UART_ClockPrescaler UART Clock Prescaler + * @{ + */ +#define UART_PRESCALER_DIV1 0x00000000U /*!< fclk_pres = fclk */ +#define UART_PRESCALER_DIV2 0x00000001U /*!< fclk_pres = fclk/2 */ +#define UART_PRESCALER_DIV4 0x00000002U /*!< fclk_pres = fclk/4 */ +#define UART_PRESCALER_DIV6 0x00000003U /*!< fclk_pres = fclk/6 */ +#define UART_PRESCALER_DIV8 0x00000004U /*!< fclk_pres = fclk/8 */ +#define UART_PRESCALER_DIV10 0x00000005U /*!< fclk_pres = fclk/10 */ +#define UART_PRESCALER_DIV12 0x00000006U /*!< fclk_pres = fclk/12 */ +#define UART_PRESCALER_DIV16 0x00000007U /*!< fclk_pres = fclk/16 */ +#define UART_PRESCALER_DIV32 0x00000008U /*!< fclk_pres = fclk/32 */ +#define UART_PRESCALER_DIV64 0x00000009U /*!< fclk_pres = fclk/64 */ +#define UART_PRESCALER_DIV128 0x0000000AU /*!< fclk_pres = fclk/128 */ +#define UART_PRESCALER_DIV256 0x0000000BU /*!< fclk_pres = fclk/256 */ +/** + * @} + */ +#endif + /** @defgroup UART_AutoBaud_Rate_Mode UART Advanced Feature AutoBaud Rate Mode * @{ */ -#define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT ((uint32_t)0x00000000) /*!< Auto Baud rate detection on start bit */ -#define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE ((uint32_t)USART_CR2_ABRMODE_0) /*!< Auto Baud rate detection on falling edge */ -#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME ((uint32_t)USART_CR2_ABRMODE_1) /*!< Auto Baud rate detection on 0x7F frame detection */ -#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME ((uint32_t)USART_CR2_ABRMODE) /*!< Auto Baud rate detection on 0x55 frame detection */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT 0x00000000U /*!< Auto Baud rate detection on start bit */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE USART_CR2_ABRMODE_0 /*!< Auto Baud rate detection on falling edge */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME USART_CR2_ABRMODE_1 /*!< Auto Baud rate detection on 0x7F frame detection */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME USART_CR2_ABRMODE /*!< Auto Baud rate detection on 0x55 frame detection */ /** * @} */ @@ -363,8 +412,8 @@ typedef struct /** @defgroup UART_Receiver_TimeOut UART Receiver TimeOut * @{ */ -#define UART_RECEIVER_TIMEOUT_DISABLE ((uint32_t)0x00000000) /*!< UART receiver timeout disable */ -#define UART_RECEIVER_TIMEOUT_ENABLE ((uint32_t)USART_CR2_RTOEN) /*!< UART receiver timeout enable */ +#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART receiver timeout disable */ +#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART receiver timeout enable */ /** * @} */ @@ -372,8 +421,8 @@ typedef struct /** @defgroup UART_LIN UART Local Interconnection Network mode * @{ */ -#define UART_LIN_DISABLE ((uint32_t)0x00000000) /*!< Local Interconnect Network disable */ -#define UART_LIN_ENABLE ((uint32_t)USART_CR2_LINEN) /*!< Local Interconnect Network enable */ +#define UART_LIN_DISABLE 0x00000000U /*!< Local Interconnect Network disable */ +#define UART_LIN_ENABLE USART_CR2_LINEN /*!< Local Interconnect Network enable */ /** * @} */ @@ -381,8 +430,8 @@ typedef struct /** @defgroup UART_LIN_Break_Detection UART LIN Break Detection * @{ */ -#define UART_LINBREAKDETECTLENGTH_10B ((uint32_t)0x00000000) /*!< LIN 10-bit break detection length */ -#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) /*!< LIN 11-bit break detection length */ +#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U /*!< LIN 10-bit break detection length */ +#define UART_LINBREAKDETECTLENGTH_11B USART_CR2_LBDL /*!< LIN 11-bit break detection length */ /** * @} */ @@ -390,8 +439,8 @@ typedef struct /** @defgroup UART_DMA_Tx UART DMA Tx * @{ */ -#define UART_DMA_TX_DISABLE ((uint32_t)0x00000000) /*!< UART DMA TX disabled */ -#define UART_DMA_TX_ENABLE ((uint32_t)USART_CR3_DMAT) /*!< UART DMA TX enabled */ +#define UART_DMA_TX_DISABLE 0x00000000U /*!< UART DMA TX disabled */ +#define UART_DMA_TX_ENABLE USART_CR3_DMAT /*!< UART DMA TX enabled */ /** * @} */ @@ -399,8 +448,8 @@ typedef struct /** @defgroup UART_DMA_Rx UART DMA Rx * @{ */ -#define UART_DMA_RX_DISABLE ((uint32_t)0x00000000) /*!< UART DMA RX disabled */ -#define UART_DMA_RX_ENABLE ((uint32_t)USART_CR3_DMAR) /*!< UART DMA RX enabled */ +#define UART_DMA_RX_DISABLE 0x00000000U /*!< UART DMA RX disabled */ +#define UART_DMA_RX_ENABLE USART_CR3_DMAR /*!< UART DMA RX enabled */ /** * @} */ @@ -408,8 +457,8 @@ typedef struct /** @defgroup UART_Half_Duplex_Selection UART Half Duplex Selection * @{ */ -#define UART_HALF_DUPLEX_DISABLE ((uint32_t)0x00000000) /*!< UART half-duplex disabled */ -#define UART_HALF_DUPLEX_ENABLE ((uint32_t)USART_CR3_HDSEL) /*!< UART half-duplex enabled */ +#define UART_HALF_DUPLEX_DISABLE 0x00000000U /*!< UART half-duplex disabled */ +#define UART_HALF_DUPLEX_ENABLE USART_CR3_HDSEL /*!< UART half-duplex enabled */ /** * @} */ @@ -417,8 +466,8 @@ typedef struct /** @defgroup UART_WakeUp_Methods UART WakeUp Methods * @{ */ -#define UART_WAKEUPMETHOD_IDLELINE ((uint32_t)0x00000000) /*!< UART wake-up on idle line */ -#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE) /*!< UART wake-up on address mark */ +#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U /*!< UART wake-up on idle line */ +#define UART_WAKEUPMETHOD_ADDRESSMARK USART_CR1_WAKE /*!< UART wake-up on address mark */ /** * @} */ @@ -426,11 +475,11 @@ typedef struct /** @defgroup UART_Request_Parameters UART Request Parameters * @{ */ -#define UART_AUTOBAUD_REQUEST ((uint32_t)USART_RQR_ABRRQ) /*!< Auto-Baud Rate Request */ -#define UART_SENDBREAK_REQUEST ((uint32_t)USART_RQR_SBKRQ) /*!< Send Break Request */ -#define UART_MUTE_MODE_REQUEST ((uint32_t)USART_RQR_MMRQ) /*!< Mute Mode Request */ -#define UART_RXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_RXFRQ) /*!< Receive Data flush Request */ -#define UART_TXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_TXFRQ) /*!< Transmit data flush Request */ +#define UART_AUTOBAUD_REQUEST USART_RQR_ABRRQ /*!< Auto-Baud Rate Request */ +#define UART_SENDBREAK_REQUEST USART_RQR_SBKRQ /*!< Send Break Request */ +#define UART_MUTE_MODE_REQUEST USART_RQR_MMRQ /*!< Mute Mode Request */ +#define UART_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive Data flush Request */ +#define UART_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush Request */ /** * @} */ @@ -438,15 +487,15 @@ typedef struct /** @defgroup UART_Advanced_Features_Initialization_Type UART Advanced Feature Initialization Type * @{ */ -#define UART_ADVFEATURE_NO_INIT ((uint32_t)0x00000000) /*!< No advanced feature initialization */ -#define UART_ADVFEATURE_TXINVERT_INIT ((uint32_t)0x00000001) /*!< TX pin active level inversion */ -#define UART_ADVFEATURE_RXINVERT_INIT ((uint32_t)0x00000002) /*!< RX pin active level inversion */ -#define UART_ADVFEATURE_DATAINVERT_INIT ((uint32_t)0x00000004) /*!< Binary data inversion */ -#define UART_ADVFEATURE_SWAP_INIT ((uint32_t)0x00000008) /*!< TX/RX pins swap */ -#define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT ((uint32_t)0x00000010) /*!< RX overrun disable */ -#define UART_ADVFEATURE_DMADISABLEONERROR_INIT ((uint32_t)0x00000020) /*!< DMA disable on Reception Error */ -#define UART_ADVFEATURE_AUTOBAUDRATE_INIT ((uint32_t)0x00000040) /*!< Auto Baud rate detection initialization */ -#define UART_ADVFEATURE_MSBFIRST_INIT ((uint32_t)0x00000080) /*!< Most significant bit sent/received first */ +#define UART_ADVFEATURE_NO_INIT 0x00000000U /*!< No advanced feature initialization */ +#define UART_ADVFEATURE_TXINVERT_INIT 0x00000001U /*!< TX pin active level inversion */ +#define UART_ADVFEATURE_RXINVERT_INIT 0x00000002U /*!< RX pin active level inversion */ +#define UART_ADVFEATURE_DATAINVERT_INIT 0x00000004U /*!< Binary data inversion */ +#define UART_ADVFEATURE_SWAP_INIT 0x00000008U /*!< TX/RX pins swap */ +#define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT 0x00000010U /*!< RX overrun disable */ +#define UART_ADVFEATURE_DMADISABLEONERROR_INIT 0x00000020U /*!< DMA disable on Reception Error */ +#define UART_ADVFEATURE_AUTOBAUDRATE_INIT 0x00000040U /*!< Auto Baud rate detection initialization */ +#define UART_ADVFEATURE_MSBFIRST_INIT 0x00000080U /*!< Most significant bit sent/received first */ /** * @} */ @@ -454,8 +503,8 @@ typedef struct /** @defgroup UART_Tx_Inv UART Advanced Feature TX Pin Active Level Inversion * @{ */ -#define UART_ADVFEATURE_TXINV_DISABLE ((uint32_t)0x00000000) /*!< TX pin active level inversion disable */ -#define UART_ADVFEATURE_TXINV_ENABLE ((uint32_t)USART_CR2_TXINV) /*!< TX pin active level inversion enable */ +#define UART_ADVFEATURE_TXINV_DISABLE 0x00000000U /*!< TX pin active level inversion disable */ +#define UART_ADVFEATURE_TXINV_ENABLE USART_CR2_TXINV /*!< TX pin active level inversion enable */ /** * @} */ @@ -463,8 +512,8 @@ typedef struct /** @defgroup UART_Rx_Inv UART Advanced Feature RX Pin Active Level Inversion * @{ */ -#define UART_ADVFEATURE_RXINV_DISABLE ((uint32_t)0x00000000) /*!< RX pin active level inversion disable */ -#define UART_ADVFEATURE_RXINV_ENABLE ((uint32_t)USART_CR2_RXINV) /*!< RX pin active level inversion enable */ +#define UART_ADVFEATURE_RXINV_DISABLE 0x00000000U /*!< RX pin active level inversion disable */ +#define UART_ADVFEATURE_RXINV_ENABLE USART_CR2_RXINV /*!< RX pin active level inversion enable */ /** * @} */ @@ -472,8 +521,8 @@ typedef struct /** @defgroup UART_Data_Inv UART Advanced Feature Binary Data Inversion * @{ */ -#define UART_ADVFEATURE_DATAINV_DISABLE ((uint32_t)0x00000000) /*!< Binary data inversion disable */ -#define UART_ADVFEATURE_DATAINV_ENABLE ((uint32_t)USART_CR2_DATAINV) /*!< Binary data inversion enable */ +#define UART_ADVFEATURE_DATAINV_DISABLE 0x00000000U /*!< Binary data inversion disable */ +#define UART_ADVFEATURE_DATAINV_ENABLE USART_CR2_DATAINV /*!< Binary data inversion enable */ /** * @} */ @@ -481,8 +530,8 @@ typedef struct /** @defgroup UART_Rx_Tx_Swap UART Advanced Feature RX TX Pins Swap * @{ */ -#define UART_ADVFEATURE_SWAP_DISABLE ((uint32_t)0x00000000) /*!< TX/RX pins swap disable */ -#define UART_ADVFEATURE_SWAP_ENABLE ((uint32_t)USART_CR2_SWAP) /*!< TX/RX pins swap enable */ +#define UART_ADVFEATURE_SWAP_DISABLE 0x00000000U /*!< TX/RX pins swap disable */ +#define UART_ADVFEATURE_SWAP_ENABLE USART_CR2_SWAP /*!< TX/RX pins swap enable */ /** * @} */ @@ -490,8 +539,8 @@ typedef struct /** @defgroup UART_Overrun_Disable UART Advanced Feature Overrun Disable * @{ */ -#define UART_ADVFEATURE_OVERRUN_ENABLE ((uint32_t)0x00000000) /*!< RX overrun enable */ -#define UART_ADVFEATURE_OVERRUN_DISABLE ((uint32_t)USART_CR3_OVRDIS) /*!< RX overrun disable */ +#define UART_ADVFEATURE_OVERRUN_ENABLE 0x00000000U /*!< RX overrun enable */ +#define UART_ADVFEATURE_OVERRUN_DISABLE USART_CR3_OVRDIS /*!< RX overrun disable */ /** * @} */ @@ -499,8 +548,8 @@ typedef struct /** @defgroup UART_AutoBaudRate_Enable UART Advanced Feature Auto BaudRate Enable * @{ */ -#define UART_ADVFEATURE_AUTOBAUDRATE_DISABLE ((uint32_t)0x00000000) /*!< RX Auto Baud rate detection enable */ -#define UART_ADVFEATURE_AUTOBAUDRATE_ENABLE ((uint32_t)USART_CR2_ABREN) /*!< RX Auto Baud rate detection disable */ +#define UART_ADVFEATURE_AUTOBAUDRATE_DISABLE 0x00000000U /*!< RX Auto Baud rate detection enable */ +#define UART_ADVFEATURE_AUTOBAUDRATE_ENABLE USART_CR2_ABREN /*!< RX Auto Baud rate detection disable */ /** * @} */ @@ -508,8 +557,8 @@ typedef struct /** @defgroup UART_DMA_Disable_on_Rx_Error UART Advanced Feature DMA Disable On Rx Error * @{ */ -#define UART_ADVFEATURE_DMA_ENABLEONRXERROR ((uint32_t)0x00000000) /*!< DMA enable on Reception Error */ -#define UART_ADVFEATURE_DMA_DISABLEONRXERROR ((uint32_t)USART_CR3_DDRE) /*!< DMA disable on Reception Error */ +#define UART_ADVFEATURE_DMA_ENABLEONRXERROR 0x00000000U /*!< DMA enable on Reception Error */ +#define UART_ADVFEATURE_DMA_DISABLEONRXERROR USART_CR3_DDRE /*!< DMA disable on Reception Error */ /** * @} */ @@ -517,8 +566,8 @@ typedef struct /** @defgroup UART_MSB_First UART Advanced Feature MSB First * @{ */ -#define UART_ADVFEATURE_MSBFIRST_DISABLE ((uint32_t)0x00000000) /*!< Most significant bit sent/received first disable */ -#define UART_ADVFEATURE_MSBFIRST_ENABLE ((uint32_t)USART_CR2_MSBFIRST) /*!< Most significant bit sent/received first enable */ +#define UART_ADVFEATURE_MSBFIRST_DISABLE 0x00000000U /*!< Most significant bit sent/received first disable */ +#define UART_ADVFEATURE_MSBFIRST_ENABLE USART_CR2_MSBFIRST /*!< Most significant bit sent/received first enable */ /** * @} */ @@ -526,8 +575,8 @@ typedef struct /** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable * @{ */ -#define UART_ADVFEATURE_STOPMODE_DISABLE ((uint32_t)0x00000000) /*!< UART stop mode disable */ -#define UART_ADVFEATURE_STOPMODE_ENABLE ((uint32_t)USART_CR1_UESM) /*!< UART stop mode enable */ +#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */ +#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */ /** * @} */ @@ -535,8 +584,8 @@ typedef struct /** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable * @{ */ -#define UART_ADVFEATURE_MUTEMODE_DISABLE ((uint32_t)0x00000000) /*!< UART mute mode disable */ -#define UART_ADVFEATURE_MUTEMODE_ENABLE ((uint32_t)USART_CR1_MME) /*!< UART mute mode enable */ +#define UART_ADVFEATURE_MUTEMODE_DISABLE 0x00000000U /*!< UART mute mode disable */ +#define UART_ADVFEATURE_MUTEMODE_ENABLE USART_CR1_MME /*!< UART mute mode enable */ /** * @} */ @@ -544,7 +593,7 @@ typedef struct /** @defgroup UART_CR2_ADDRESS_LSB_POS UART Address-matching LSB Position In CR2 Register * @{ */ -#define UART_CR2_ADDRESS_LSB_POS ((uint32_t) 24) /*!< UART address-matching LSB position in CR2 register */ +#define UART_CR2_ADDRESS_LSB_POS 24U /*!< UART address-matching LSB position in CR2 register */ /** * @} */ @@ -552,9 +601,9 @@ typedef struct /** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection * @{ */ -#define UART_WAKEUP_ON_ADDRESS ((uint32_t)0x00000000) /*!< UART wake-up on address */ -#define UART_WAKEUP_ON_STARTBIT ((uint32_t)USART_CR3_WUS_1) /*!< UART wake-up on start bit */ -#define UART_WAKEUP_ON_READDATA_NONEMPTY ((uint32_t)USART_CR3_WUS) /*!< UART wake-up on receive data register not empty */ +#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */ +#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */ +#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register not empty or RXFIFO is not empty */ /** * @} */ @@ -562,8 +611,8 @@ typedef struct /** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity * @{ */ -#define UART_DE_POLARITY_HIGH ((uint32_t)0x00000000) /*!< Driver enable signal is active high */ -#define UART_DE_POLARITY_LOW ((uint32_t)USART_CR3_DEP) /*!< Driver enable signal is active low */ +#define UART_DE_POLARITY_HIGH 0x00000000U /*!< Driver enable signal is active high */ +#define UART_DE_POLARITY_LOW USART_CR3_DEP /*!< Driver enable signal is active low */ /** * @} */ @@ -571,7 +620,7 @@ typedef struct /** @defgroup UART_CR1_DEAT_ADDRESS_LSB_POS UART Driver Enable Assertion Time LSB Position In CR1 Register * @{ */ -#define UART_CR1_DEAT_ADDRESS_LSB_POS ((uint32_t) 21) /*!< UART Driver Enable assertion time LSB position in CR1 register */ +#define UART_CR1_DEAT_ADDRESS_LSB_POS 21U /*!< UART Driver Enable assertion time LSB position in CR1 register */ /** * @} */ @@ -579,7 +628,7 @@ typedef struct /** @defgroup UART_CR1_DEDT_ADDRESS_LSB_POS UART Driver Enable DeAssertion Time LSB Position In CR1 Register * @{ */ -#define UART_CR1_DEDT_ADDRESS_LSB_POS ((uint32_t) 16) /*!< UART Driver Enable de-assertion time LSB position in CR1 register */ +#define UART_CR1_DEDT_ADDRESS_LSB_POS 16U /*!< UART Driver Enable de-assertion time LSB position in CR1 register */ /** * @} */ @@ -587,7 +636,7 @@ typedef struct /** @defgroup UART_Interruption_Mask UART Interruptions Flag Mask * @{ */ -#define UART_IT_MASK ((uint32_t)0x001F) /*!< UART interruptions flags mask */ +#define UART_IT_MASK 0x001FU /*!< UART interruptions flags mask */ /** * @} */ @@ -595,7 +644,7 @@ typedef struct /** @defgroup UART_TimeOut_Value UART polling-based communications time-out value * @{ */ -#define HAL_UART_TIMEOUT_VALUE 0x1FFFFFF /*!< UART polling-based communications time-out value */ +#define HAL_UART_TIMEOUT_VALUE 0x1FFFFFFU /*!< UART polling-based communications time-out value */ /** * @} */ @@ -605,28 +654,40 @@ typedef struct * - 0xXXXX : Flag mask in the ISR register * @{ */ -#define UART_FLAG_REACK ((uint32_t)0x00400000) /*!< UART receive enable acknowledge flag */ -#define UART_FLAG_TEACK ((uint32_t)0x00200000) /*!< UART transmit enable acknowledge flag */ -#define UART_FLAG_WUF ((uint32_t)0x00100000) /*!< UART wake-up from stop mode flag */ -#define UART_FLAG_RWU ((uint32_t)0x00080000) /*!< UART receiver wake-up from mute mode flag */ -#define UART_FLAG_SBKF ((uint32_t)0x00040000) /*!< UART send break flag */ -#define UART_FLAG_CMF ((uint32_t)0x00020000) /*!< UART character match flag */ -#define UART_FLAG_BUSY ((uint32_t)0x00010000) /*!< UART busy flag */ -#define UART_FLAG_ABRF ((uint32_t)0x00008000) /*!< UART auto Baud rate flag */ -#define UART_FLAG_ABRE ((uint32_t)0x00004000) /*!< UART auto Baud rate error */ -#define UART_FLAG_EOBF ((uint32_t)0x00001000) /*!< UART end of block flag */ -#define UART_FLAG_RTOF ((uint32_t)0x00000800) /*!< UART receiver timeout flag */ -#define UART_FLAG_CTS ((uint32_t)0x00000400) /*!< UART clear to send flag */ -#define UART_FLAG_CTSIF ((uint32_t)0x00000200) /*!< UART clear to send interrupt flag */ -#define UART_FLAG_LBDF ((uint32_t)0x00000100) /*!< UART LIN break detection flag */ -#define UART_FLAG_TXE ((uint32_t)0x00000080) /*!< UART transmit data register empty */ -#define UART_FLAG_TC ((uint32_t)0x00000040) /*!< UART transmission complete */ -#define UART_FLAG_RXNE ((uint32_t)0x00000020) /*!< UART read data register not empty */ -#define UART_FLAG_IDLE ((uint32_t)0x00000010) /*!< UART idle flag */ -#define UART_FLAG_ORE ((uint32_t)0x00000008) /*!< UART overrun error */ -#define UART_FLAG_NE ((uint32_t)0x00000004) /*!< UART noise error */ -#define UART_FLAG_FE ((uint32_t)0x00000002) /*!< UART frame error */ -#define UART_FLAG_PE ((uint32_t)0x00000001) /*!< UART parity error */ +#define UART_FLAG_TXFT USART_ISR_TXFT /*!< UART TXFIFO threshold flag */ +#define UART_FLAG_RXFT USART_ISR_RXFT /*!< UART RXFIFO threshold flag */ +#define UART_FLAG_RXFF USART_ISR_RXFF /*!< UART RXFIFO Full flag */ +#define UART_FLAG_TXFE USART_ISR_TXFE /*!< UART TXFIFO Empty flag */ +#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */ +#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */ +#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */ +#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */ +#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */ +#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */ +#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */ +#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */ +#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */ +#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */ +#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */ +#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */ +#if defined(USART_CR1_FIFOEN) +#define UART_FLAG_TXE USART_ISR_TXE_TXFNF /*!< UART transmit data register empty */ +#define UART_FLAG_TXFNF USART_ISR_TXE_TXFNF /*!< UART TXFIFO not full */ +#else +#define UART_FLAG_TXE USART_ISR_TXE /*!< UART transmit data register empty */ +#endif +#define UART_FLAG_TC USART_ISR_TC /*!< UART transmission complete */ +#if defined(USART_CR1_FIFOEN) +#define UART_FLAG_RXNE USART_ISR_RXNE_RXFNE /*!< UART read data register not empty */ +#define UART_FLAG_RXFNE USART_ISR_RXNE_RXFNE /*!< UART RXFIFO not empty */ +#else +#define UART_FLAG_RXNE USART_ISR_RXNE /*!< UART read data register not empty */ +#endif +#define UART_FLAG_IDLE USART_ISR_IDLE /*!< UART idle flag */ +#define UART_FLAG_ORE USART_ISR_ORE /*!< UART overrun error */ +#define UART_FLAG_NE USART_ISR_NE /*!< UART noise error */ +#define UART_FLAG_FE USART_ISR_FE /*!< UART frame error */ +#define UART_FLAG_PE USART_ISR_PE /*!< UART parity error */ /** * @} */ @@ -641,19 +702,41 @@ typedef struct * - ZZZZZ : Flag position in the ISR register(5bits) * @{ */ -#define UART_IT_PE ((uint32_t)0x0028) /*!< UART parity error interruption */ -#define UART_IT_TXE ((uint32_t)0x0727) /*!< UART transmit data register empty interruption */ -#define UART_IT_TC ((uint32_t)0x0626) /*!< UART transmission complete interruption */ -#define UART_IT_RXNE ((uint32_t)0x0525) /*!< UART read data register not empty interruption */ -#define UART_IT_IDLE ((uint32_t)0x0424) /*!< UART idle interruption */ -#define UART_IT_LBD ((uint32_t)0x0846) /*!< UART LIN break detection interruption */ -#define UART_IT_CTS ((uint32_t)0x096A) /*!< UART CTS interruption */ -#define UART_IT_CM ((uint32_t)0x112E) /*!< UART character match interruption */ -#define UART_IT_WUF ((uint32_t)0x1476) /*!< UART wake-up from stop mode interruption */ -#define UART_IT_ERR ((uint32_t)0x0060) /*!< UART error interruption */ -#define UART_IT_ORE ((uint32_t)0x0300) /*!< UART overrun error interruption */ -#define UART_IT_NE ((uint32_t)0x0200) /*!< UART noise error interruption */ -#define UART_IT_FE ((uint32_t)0x0100) /*!< UART frame error interruption */ +#define UART_IT_PE 0x0028U /*!< UART parity error interruption */ +#define UART_IT_TXE 0x0727U /*!< UART transmit data register empty interruption */ +#if defined(USART_CR1_FIFOEN) +#define UART_IT_TXFNF 0x0727U /*!< UART TX FIFO not full interruption */ +#endif +#define UART_IT_TC 0x0626U /*!< UART transmission complete interruption */ +#define UART_IT_RXNE 0x0525U /*!< UART read data register not empty interruption */ +#if defined(USART_CR1_FIFOEN) +#define UART_IT_RXFNE 0x0525U /*!< UART RXFIFO not empty interruption */ +#endif +#define UART_IT_IDLE 0x0424U /*!< UART idle interruption */ +#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */ +#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */ +#define UART_IT_CM 0x112EU /*!< UART character match interruption */ +#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */ +#if defined(USART_CR1_FIFOEN) +#define UART_IT_RXFF 0x183FU /*!< UART RXFIFO full interruption */ +#define UART_IT_TXFE 0x173EU /*!< UART TXFIFO empty interruption */ +#define UART_IT_RXFT 0x1A7CU /*!< UART RXFIFO threshold reached interruption */ +#define UART_IT_TXFT 0x1B77U /*!< UART TXFIFO threshold reached interruption */ +#endif + +/* Elements values convention: 000000000XXYYYYYb + - YYYYY : Interrupt source position in the XX register (5bits) + - XX : Interrupt source register (2bits) + - 01: CR1 register + - 10: CR2 register + - 11: CR3 register */ +#define UART_IT_ERR 0x0060U /*!< UART error interruption */ + +/* Elements values convention: 0000ZZZZ00000000b + - ZZZZ : Flag position in the ISR register(4bits) */ +#define UART_IT_ORE 0x0300U /*!< UART overrun error interruption */ +#define UART_IT_NE 0x0200U /*!< UART noise error interruption */ +#define UART_IT_FE 0x0100U /*!< UART frame error interruption */ /** * @} */ @@ -666,11 +749,12 @@ typedef struct #define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise detected Clear Flag */ #define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */ #define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */ +#if defined(USART_CR1_FIFOEN) +#define UART_CLEAR_TXFECF USART_ICR_TXFECF /*!< TXFIFO empty clear flag */ +#endif #define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */ #define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */ #define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */ -#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< Receiver Time Out Clear Flag */ -#define UART_CLEAR_EOBF USART_ICR_EOBCF /*!< End Of Block Clear Flag */ #define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */ #define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */ /** @@ -688,7 +772,7 @@ typedef struct */ /** @brief Reset UART handle states. - * @param __HANDLE__: UART handle. + * @param __HANDLE__ UART handle. * @retval None */ #define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ @@ -696,8 +780,8 @@ typedef struct (__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ } while(0) /** @brief Flush the UART Data registers. - * @param __HANDLE__: specifies the UART Handle. - * @retval None + * @param __HANDLE__ specifies the UART Handle. + * @retval None */ #define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \ do{ \ @@ -706,19 +790,18 @@ typedef struct } while(0) /** @brief Clear the specified UART pending flag. - * @param __HANDLE__: specifies the UART Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the UART Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be any combination of the following values: * @arg @ref UART_CLEAR_PEF Parity Error Clear Flag * @arg @ref UART_CLEAR_FEF Framing Error Clear Flag * @arg @ref UART_CLEAR_NEF Noise detected Clear Flag * @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag * @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref UART_CLEAR_TXFECF TXFIFO empty clear Flag * @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag * @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag * @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag - * @arg @ref UART_CLEAR_RTOF Receiver Time Out Clear Flag - * @arg @ref UART_CLEAR_EOBF End Of Block Clear Flag * @arg @ref UART_CLEAR_CMF Character Match Clear Flag * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag * @retval None @@ -726,39 +809,51 @@ typedef struct #define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) /** @brief Clear the UART PE pending flag. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_PEF) /** @brief Clear the UART FE pending flag. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_FEF) /** @brief Clear the UART NE pending flag. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_NEF) /** @brief Clear the UART ORE pending flag. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_OREF) /** @brief Clear the UART IDLE pending flag. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_IDLEF) +#if defined(USART_CR1_FIFOEN) +/** @brief Clear the UART TX FIFO empty clear flag. + * @param __HANDLE__ specifies the UART Handle. + * @retval None + */ +#define __HAL_UART_CLEAR_TXFECF(__HANDLE__) __HAL_UART_CLEAR_FLAG((__HANDLE__), UART_CLEAR_TXFECF) +#endif + /** @brief Check whether the specified UART flag is set or not. - * @param __HANDLE__: specifies the UART Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the UART Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: + * @arg @ref UART_FLAG_TXFT TXFIFO threshold flag + * @arg @ref UART_FLAG_RXFT RXFIFO threshold flag + * @arg @ref UART_FLAG_RXFF RXFIFO Full flag + * @arg @ref UART_FLAG_TXFE TXFIFO Empty flag * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag * @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag * @arg @ref UART_FLAG_WUF Wake up from stop mode flag @@ -768,13 +863,13 @@ typedef struct * @arg @ref UART_FLAG_BUSY Busy flag * @arg @ref UART_FLAG_ABRF Auto Baud rate detection flag * @arg @ref UART_FLAG_ABRE Auto Baud rate detection error flag - * @arg @ref UART_FLAG_EOBF End of block flag - * @arg @ref UART_FLAG_RTOF Receiver timeout flag * @arg @ref UART_FLAG_CTS CTS Change flag * @arg @ref UART_FLAG_LBDF LIN Break detection flag * @arg @ref UART_FLAG_TXE Transmit data register empty flag + * @arg @ref UART_FLAG_TXFNF UART TXFIFO not full flag * @arg @ref UART_FLAG_TC Transmission Complete flag * @arg @ref UART_FLAG_RXNE Receive data register not empty flag + * @arg @ref UART_FLAG_RXFNE UART RXFIFO not empty flag * @arg @ref UART_FLAG_IDLE Idle Line detection flag * @arg @ref UART_FLAG_ORE Overrun Error flag * @arg @ref UART_FLAG_NE Noise Error flag @@ -785,109 +880,131 @@ typedef struct #define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) /** @brief Enable the specified UART interrupt. - * @param __HANDLE__: specifies the UART Handle. - * @param __INTERRUPT__: specifies the UART interrupt source to enable. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to enable. * This parameter can be one of the following values: - * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt - * @arg @ref UART_IT_CM Character match interrupt - * @arg @ref UART_IT_CTS CTS change interrupt - * @arg @ref UART_IT_LBD LIN Break detection interrupt - * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref UART_IT_TC Transmission complete interrupt - * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref UART_IT_IDLE Idle line detection interrupt - * @arg @ref UART_IT_PE Parity Error interrupt - * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @arg @ref UART_IT_RXFF RXFIFO Full interrupt + * @arg @ref UART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref UART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref UART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) * @retval None */ -#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ - ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ +#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & UART_IT_MASK)))) /** @brief Disable the specified UART interrupt. - * @param __HANDLE__: specifies the UART Handle. - * @param __INTERRUPT__: specifies the UART interrupt source to disable. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to disable. * This parameter can be one of the following values: - * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt - * @arg @ref UART_IT_CM Character match interrupt - * @arg @ref UART_IT_CTS CTS change interrupt - * @arg @ref UART_IT_LBD LIN Break detection interrupt - * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref UART_IT_TC Transmission complete interrupt - * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref UART_IT_IDLE Idle line detection interrupt - * @arg @ref UART_IT_PE Parity Error interrupt - * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @arg @ref UART_IT_RXFF RXFIFO Full interrupt + * @arg @ref UART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref UART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref UART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) * @retval None */ -#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ - ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ +#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & UART_IT_MASK))): \ ((__HANDLE__)->Instance->CR3 &= ~ (1U << ((__INTERRUPT__) & UART_IT_MASK)))) /** @brief Check whether the specified UART interrupt has occurred or not. - * @param __HANDLE__: specifies the UART Handle. - * @param __IT__: specifies the UART interrupt to check. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt to check. * This parameter can be one of the following values: - * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt - * @arg @ref UART_IT_CM Character match interrupt - * @arg @ref UART_IT_CTS CTS change interrupt - * @arg @ref UART_IT_LBD LIN Break detection interrupt - * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref UART_IT_TC Transmission complete interrupt - * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref UART_IT_IDLE Idle line detection interrupt - * @arg @ref UART_IT_ORE Overrun Error interrupt - * @arg @ref UART_IT_NE Noise Error interrupt - * @arg @ref UART_IT_FE Framing Error interrupt - * @arg @ref UART_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref UART_IT_RXFF RXFIFO Full interrupt + * @arg @ref UART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref UART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref UART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_UART_GET_IT(__HANDLE__, __IT__) ((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__IT__)>> 0x08))) +#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET) /** @brief Check whether the specified UART interrupt source is enabled or not. - * @param __HANDLE__: specifies the UART Handle. - * @param __IT__: specifies the UART interrupt source to check. + * @param __HANDLE__ specifies the UART Handle. + * @param __INTERRUPT__ specifies the UART interrupt source to check. * This parameter can be one of the following values: - * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt - * @arg @ref UART_IT_CM Character match interrupt - * @arg @ref UART_IT_CTS CTS change interrupt - * @arg @ref UART_IT_LBD LIN Break detection interrupt - * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref UART_IT_TC Transmission complete interrupt - * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref UART_IT_IDLE Idle line detection interrupt - * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) - * @arg @ref UART_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref UART_IT_RXFF RXFIFO Full interrupt + * @arg @ref UART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref UART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref UART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt + * @arg @ref UART_IT_CM Character match interrupt + * @arg @ref UART_IT_CTS CTS change interrupt + * @arg @ref UART_IT_LBD LIN Break detection interrupt + * @arg @ref UART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref UART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref UART_IT_TC Transmission complete interrupt + * @arg @ref UART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref UART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref UART_IT_IDLE Idle line detection interrupt + * @arg @ref UART_IT_PE Parity Error interrupt + * @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error) + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) ((((((uint8_t)(__IT__)) >> 5U) == 1)? (__HANDLE__)->Instance->CR1:(((((uint8_t)(__IT__)) >> 5U) == 2)? \ - (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & ((uint32_t)1 << (((uint16_t)(__IT__)) & UART_IT_MASK))) +#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ? (__HANDLE__)->Instance->CR1 : \ + (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \ + (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET) /** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag. - * @param __HANDLE__: specifies the UART Handle. - * @param __IT_CLEAR__: specifies the interrupt clear register flag that needs to be set + * @param __HANDLE__ specifies the UART Handle. + * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set * to clear the corresponding interrupt * This parameter can be one of the following values: - * @arg @ref UART_CLEAR_PEF Parity Error Clear Flag - * @arg @ref UART_CLEAR_FEF Framing Error Clear Flag - * @arg @ref UART_CLEAR_NEF Noise detected Clear Flag - * @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag - * @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag - * @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag - * @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag - * @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag - * @arg @ref UART_CLEAR_RTOF Receiver Time Out Clear Flag - * @arg @ref UART_CLEAR_EOBF End Of Block Clear Flag - * @arg @ref UART_CLEAR_CMF Character Match Clear Flag - * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag + * @arg @ref UART_CLEAR_PEF Parity Error Clear Flag + * @arg @ref UART_CLEAR_FEF Framing Error Clear Flag + * @arg @ref UART_CLEAR_NEF Noise detected Clear Flag + * @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag + * @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref UART_CLEAR_TXFECF TXFIFO empty Clear Flag + * @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag + * @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag + * @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag + * @arg @ref UART_CLEAR_CMF Character Match Clear Flag + * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag * @retval None */ #define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__)) /** @brief Set a specific UART request flag. - * @param __HANDLE__: specifies the UART Handle. - * @param __REQ__: specifies the request flag to set + * @param __HANDLE__ specifies the UART Handle. + * @param __REQ__ specifies the request flag to set * This parameter can be one of the following values: * @arg @ref UART_AUTOBAUD_REQUEST Auto-Baud Rate Request * @arg @ref UART_SENDBREAK_REQUEST Send Break Request @@ -896,31 +1013,31 @@ typedef struct * @arg @ref UART_TXDATA_FLUSH_REQUEST Transmit data flush Request * @retval None */ -#define __HAL_UART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint32_t)(__REQ__)) +#define __HAL_UART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (__REQ__)) /** @brief Enable the UART one bit sample method. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) /** @brief Disable the UART one bit sample method. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ -#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT)) +#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~USART_CR3_ONEBIT) /** @brief Enable UART. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ -#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) +#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) /** @brief Disable UART. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ -#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) +#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) /** @brief Enable CTS flow control. * @note This macro allows to enable CTS hardware flow control for a given UART instance, @@ -931,7 +1048,7 @@ typedef struct * - UART instance should have already been initialised (through call of HAL_UART_Init() ) * - macro could only be called when corresponding UART instance is disabled (i.e. __HAL_UART_DISABLE(__HANDLE__)) * and should be followed by an Enable macro (i.e. __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \ @@ -949,7 +1066,7 @@ typedef struct * - UART instance should have already been initialised (through call of HAL_UART_Init() ) * - macro could only be called when corresponding UART instance is disabled (i.e. __HAL_UART_DISABLE(__HANDLE__)) * and should be followed by an Enable macro (i.e. __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \ @@ -967,7 +1084,7 @@ typedef struct * - UART instance should have already been initialised (through call of HAL_UART_Init() ) * - macro could only be called when corresponding UART instance is disabled (i.e. __HAL_UART_DISABLE(__HANDLE__)) * and should be followed by an Enable macro (i.e. __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \ @@ -985,7 +1102,7 @@ typedef struct * - UART instance should have already been initialised (through call of HAL_UART_Init() ) * - macro could only be called when corresponding UART instance is disabled (i.e. __HAL_UART_DISABLE(__HANDLE__)) * and should be followed by an Enable macro (i.e. __HAL_UART_ENABLE(__HANDLE__)). - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval None */ #define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \ @@ -993,65 +1110,105 @@ typedef struct CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\ (__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ } while(0) - /** * @} */ +/* Private variables -----------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup UART_Private_Variables UART Private Variables + * @{ + */ +static const uint16_t UARTPrescTable[12] = {1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256}; +/** + * @} + */ +#endif + /* Private macros --------------------------------------------------------*/ /** @defgroup UART_Private_Macros UART Private Macros * @{ */ +#if defined(USART_PRESC_PRESCALER) + /** @brief BRR division operation to set BRR register with LPUART. - * @param __PCLK__: LPUART clock. - * @param __BAUD__: Baud rate set by the user. + * @param __PCLK__ LPUART clock. + * @param __BAUD__ Baud rate set by the user. + * @param __CLOCKPRESCALER__ UART prescaler value. * @retval Division result */ -#define UART_DIV_LPUART(__PCLK__, __BAUD__) ((((uint64_t)(__PCLK__)*256) + ((__BAUD__)/2)) / (__BAUD__)) +#define UART_DIV_LPUART(__PCLK__, __BAUD__, __CLOCKPRESCALER__) ((((((uint64_t)(__PCLK__)/UARTPrescTable[(__CLOCKPRESCALER__)])*256)) + ((__BAUD__)/2)) / (__BAUD__)) /** @brief BRR division operation to set BRR register in 8-bit oversampling mode. - * @param __PCLK__: UART clock. - * @param __BAUD__: Baud rate set by the user. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. + * @param __CLOCKPRESCALER__ UART prescaler value. + * @retval Division result + */ +#define UART_DIV_SAMPLING8(__PCLK__, __BAUD__, __CLOCKPRESCALER__) (((((__PCLK__)/UARTPrescTable[(__CLOCKPRESCALER__)])*2) + ((__BAUD__)/2)) / (__BAUD__)) + +/** @brief BRR division operation to set BRR register in 16-bit oversampling mode. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. + * @param __CLOCKPRESCALER__ UART prescaler value. + * @retval Division result + */ +#define UART_DIV_SAMPLING16(__PCLK__, __BAUD__, __CLOCKPRESCALER__) ((((__PCLK__)/UARTPrescTable[(__CLOCKPRESCALER__)]) + ((__BAUD__)/2)) / (__BAUD__)) + +#else + +/** @brief BRR division operation to set BRR register with LPUART. + * @param __PCLK__ LPUART clock. + * @param __BAUD__ Baud rate set by the user. + * @retval Division result + */ +#define UART_DIV_LPUART(__PCLK__, __BAUD__) (((((uint64_t)(__PCLK__)*256)) + ((__BAUD__)/2)) / (__BAUD__)) + +/** @brief BRR division operation to set BRR register in 8-bit oversampling mode. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. * @retval Division result */ #define UART_DIV_SAMPLING8(__PCLK__, __BAUD__) ((((__PCLK__)*2) + ((__BAUD__)/2)) / (__BAUD__)) /** @brief BRR division operation to set BRR register in 16-bit oversampling mode. - * @param __PCLK__: UART clock. - * @param __BAUD__: Baud rate set by the user. + * @param __PCLK__ UART clock. + * @param __BAUD__ Baud rate set by the user. * @retval Division result */ #define UART_DIV_SAMPLING16(__PCLK__, __BAUD__) (((__PCLK__) + ((__BAUD__)/2)) / (__BAUD__)) +#endif /* USART_PRESC_PRESCALER */ + /** @brief Check whether or not UART instance is Low Power UART. - * @param __HANDLE__: specifies the UART Handle. + * @param __HANDLE__ specifies the UART Handle. * @retval SET (instance is LPUART) or RESET (instance isn't LPUART) */ -#define UART_INSTANCE_LOWPOWER(__HANDLE__) (((__HANDLE__)->Instance == LPUART1) ? SET : RESET ) +#define UART_INSTANCE_LOWPOWER(__HANDLE__) (IS_LPUART_INSTANCE(__HANDLE__->Instance)) /** @brief Check UART Baud rate. - * @param __BAUDRATE__: Baudrate specified by the user. - * The maximum Baud Rate is derived from the maximum clock on L4 (i.e. 80 MHz) + * @param __BAUDRATE__ Baudrate specified by the user. + * The maximum Baud Rate is derived from the maximum clock on G0 (i.e. 52 MHz) * divided by the smallest oversampling used on the USART (i.e. 8) * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid) */ -#define IS_UART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 10000001) +#define IS_UART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 6500001U) /** @brief Check UART assertion time. - * @param __TIME__: 5-bit value assertion time. + * @param __TIME__ 5-bit value assertion time. * @retval Test result (TRUE or FALSE). */ -#define IS_UART_ASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1F) +#define IS_UART_ASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1FU) /** @brief Check UART deassertion time. - * @param __TIME__: 5-bit value deassertion time. + * @param __TIME__ 5-bit value deassertion time. * @retval Test result (TRUE or FALSE). */ -#define IS_UART_DEASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1F) +#define IS_UART_DEASSERTIONTIME(__TIME__) ((__TIME__) <= 0x1FU) /** * @brief Ensure that UART frame number of stop bits is valid. - * @param __STOPBITS__: UART frame number of stop bits. + * @param __STOPBITS__ UART frame number of stop bits. * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) */ #define IS_UART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == UART_STOPBITS_0_5) || \ @@ -1061,7 +1218,7 @@ typedef struct /** * @brief Ensure that LPUART frame number of stop bits is valid. - * @param __STOPBITS__: LPUART frame number of stop bits. + * @param __STOPBITS__ LPUART frame number of stop bits. * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) */ #define IS_LPUART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == UART_STOPBITS_1) || \ @@ -1069,7 +1226,7 @@ typedef struct /** * @brief Ensure that UART frame parity is valid. - * @param __PARITY__: UART frame parity. + * @param __PARITY__ UART frame parity. * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) */ #define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_NONE) || \ @@ -1078,7 +1235,7 @@ typedef struct /** * @brief Ensure that UART hardware flow control is valid. - * @param __CONTROL__: UART hardware flow control. + * @param __CONTROL__ UART hardware flow control. * @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid) */ #define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\ @@ -1089,14 +1246,14 @@ typedef struct /** * @brief Ensure that UART communication mode is valid. - * @param __MODE__: UART communication mode. + * @param __MODE__ UART communication mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ -#define IS_UART_MODE(__MODE__) ((((__MODE__) & (~((uint32_t)(UART_MODE_TX_RX)))) == (uint32_t)0x00) && ((__MODE__) != (uint32_t)0x00)) +#define IS_UART_MODE(__MODE__) ((((__MODE__) & (~((uint32_t)(UART_MODE_TX_RX)))) == 0x00U) && ((__MODE__) != 0x00U)) /** * @brief Ensure that UART state is valid. - * @param __STATE__: UART state. + * @param __STATE__ UART state. * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid) */ #define IS_UART_STATE(__STATE__) (((__STATE__) == UART_STATE_DISABLE) || \ @@ -1104,7 +1261,7 @@ typedef struct /** * @brief Ensure that UART oversampling is valid. - * @param __SAMPLING__: UART oversampling. + * @param __SAMPLING__ UART oversampling. * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid) */ #define IS_UART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == UART_OVERSAMPLING_16) || \ @@ -1112,7 +1269,7 @@ typedef struct /** * @brief Ensure that UART frame sampling is valid. - * @param __ONEBIT__: UART frame sampling. + * @param __ONEBIT__ UART frame sampling. * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid) */ #define IS_UART_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == UART_ONE_BIT_SAMPLE_DISABLE) || \ @@ -1120,7 +1277,7 @@ typedef struct /** * @brief Ensure that UART auto Baud rate detection mode is valid. - * @param __MODE__: UART auto Baud rate detection mode. + * @param __MODE__ UART auto Baud rate detection mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__) (((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT) || \ @@ -1130,7 +1287,7 @@ typedef struct /** * @brief Ensure that UART receiver timeout setting is valid. - * @param __TIMEOUT__: UART receiver timeout setting. + * @param __TIMEOUT__ UART receiver timeout setting. * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid) */ #define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \ @@ -1138,7 +1295,7 @@ typedef struct /** * @brief Ensure that UART LIN state is valid. - * @param __LIN__: UART LIN state. + * @param __LIN__ UART LIN state. * @retval SET (__LIN__ is valid) or RESET (__LIN__ is invalid) */ #define IS_UART_LIN(__LIN__) (((__LIN__) == UART_LIN_DISABLE) || \ @@ -1146,7 +1303,7 @@ typedef struct /** * @brief Ensure that UART LIN break detection length is valid. - * @param __LENGTH__: UART LIN break detection length. + * @param __LENGTH__ UART LIN break detection length. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) */ #define IS_UART_LIN_BREAK_DETECT_LENGTH(__LENGTH__) (((__LENGTH__) == UART_LINBREAKDETECTLENGTH_10B) || \ @@ -1154,7 +1311,7 @@ typedef struct /** * @brief Ensure that UART DMA TX state is valid. - * @param __DMATX__: UART DMA TX state. + * @param __DMATX__ UART DMA TX state. * @retval SET (__DMATX__ is valid) or RESET (__DMATX__ is invalid) */ #define IS_UART_DMA_TX(__DMATX__) (((__DMATX__) == UART_DMA_TX_DISABLE) || \ @@ -1162,7 +1319,7 @@ typedef struct /** * @brief Ensure that UART DMA RX state is valid. - * @param __DMARX__: UART DMA RX state. + * @param __DMARX__ UART DMA RX state. * @retval SET (__DMARX__ is valid) or RESET (__DMARX__ is invalid) */ #define IS_UART_DMA_RX(__DMARX__) (((__DMARX__) == UART_DMA_RX_DISABLE) || \ @@ -1170,7 +1327,7 @@ typedef struct /** * @brief Ensure that UART half-duplex state is valid. - * @param __HDSEL__: UART half-duplex state. + * @param __HDSEL__ UART half-duplex state. * @retval SET (__HDSEL__ is valid) or RESET (__HDSEL__ is invalid) */ #define IS_UART_HALF_DUPLEX(__HDSEL__) (((__HDSEL__) == UART_HALF_DUPLEX_DISABLE) || \ @@ -1178,7 +1335,7 @@ typedef struct /** * @brief Ensure that UART wake-up method is valid. - * @param __WAKEUP__: UART wake-up method . + * @param __WAKEUP__ UART wake-up method . * @retval SET (__WAKEUP__ is valid) or RESET (__WAKEUP__ is invalid) */ #define IS_UART_WAKEUPMETHOD(__WAKEUP__) (((__WAKEUP__) == UART_WAKEUPMETHOD_IDLELINE) || \ @@ -1186,7 +1343,7 @@ typedef struct /** * @brief Ensure that UART request parameter is valid. - * @param __PARAM__: UART request parameter. + * @param __PARAM__ UART request parameter. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) */ #define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST) || \ @@ -1197,7 +1354,7 @@ typedef struct /** * @brief Ensure that UART advanced features initialization is valid. - * @param __INIT__: UART advanced features initialization. + * @param __INIT__ UART advanced features initialization. * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid) */ #define IS_UART_ADVFEATURE_INIT(__INIT__) ((__INIT__) <= (UART_ADVFEATURE_NO_INIT | \ @@ -1212,7 +1369,7 @@ typedef struct /** * @brief Ensure that UART frame TX inversion setting is valid. - * @param __TXINV__: UART frame TX inversion setting. + * @param __TXINV__ UART frame TX inversion setting. * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid) */ #define IS_UART_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == UART_ADVFEATURE_TXINV_DISABLE) || \ @@ -1220,7 +1377,7 @@ typedef struct /** * @brief Ensure that UART frame RX inversion setting is valid. - * @param __RXINV__: UART frame RX inversion setting. + * @param __RXINV__ UART frame RX inversion setting. * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid) */ #define IS_UART_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == UART_ADVFEATURE_RXINV_DISABLE) || \ @@ -1228,7 +1385,7 @@ typedef struct /** * @brief Ensure that UART frame data inversion setting is valid. - * @param __DATAINV__: UART frame data inversion setting. + * @param __DATAINV__ UART frame data inversion setting. * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid) */ #define IS_UART_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == UART_ADVFEATURE_DATAINV_DISABLE) || \ @@ -1236,7 +1393,7 @@ typedef struct /** * @brief Ensure that UART frame RX/TX pins swap setting is valid. - * @param __SWAP__: UART frame RX/TX pins swap setting. + * @param __SWAP__ UART frame RX/TX pins swap setting. * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid) */ #define IS_UART_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == UART_ADVFEATURE_SWAP_DISABLE) || \ @@ -1244,7 +1401,7 @@ typedef struct /** * @brief Ensure that UART frame overrun setting is valid. - * @param __OVERRUN__: UART frame overrun setting. + * @param __OVERRUN__ UART frame overrun setting. * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid) */ #define IS_UART_OVERRUN(__OVERRUN__) (((__OVERRUN__) == UART_ADVFEATURE_OVERRUN_ENABLE) || \ @@ -1252,7 +1409,7 @@ typedef struct /** * @brief Ensure that UART auto Baud rate state is valid. - * @param __AUTOBAUDRATE__: UART auto Baud rate state. + * @param __AUTOBAUDRATE__ UART auto Baud rate state. * @retval SET (__AUTOBAUDRATE__ is valid) or RESET (__AUTOBAUDRATE__ is invalid) */ #define IS_UART_ADVFEATURE_AUTOBAUDRATE(__AUTOBAUDRATE__) (((__AUTOBAUDRATE__) == UART_ADVFEATURE_AUTOBAUDRATE_DISABLE) || \ @@ -1260,7 +1417,7 @@ typedef struct /** * @brief Ensure that UART DMA enabling or disabling on error setting is valid. - * @param __DMA__: UART DMA enabling or disabling on error setting. + * @param __DMA__ UART DMA enabling or disabling on error setting. * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid) */ #define IS_UART_ADVFEATURE_DMAONRXERROR(__DMA__) (((__DMA__) == UART_ADVFEATURE_DMA_ENABLEONRXERROR) || \ @@ -1268,7 +1425,7 @@ typedef struct /** * @brief Ensure that UART frame MSB first setting is valid. - * @param __MSBFIRST__: UART frame MSB first setting. + * @param __MSBFIRST__ UART frame MSB first setting. * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid) */ #define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \ @@ -1276,7 +1433,7 @@ typedef struct /** * @brief Ensure that UART stop mode state is valid. - * @param __STOPMODE__: UART stop mode state. + * @param __STOPMODE__ UART stop mode state. * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid) */ #define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \ @@ -1284,7 +1441,7 @@ typedef struct /** * @brief Ensure that UART mute mode state is valid. - * @param __MUTE__: UART mute mode state. + * @param __MUTE__ UART mute mode state. * @retval SET (__MUTE__ is valid) or RESET (__MUTE__ is invalid) */ #define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \ @@ -1292,21 +1449,67 @@ typedef struct /** * @brief Ensure that UART wake-up selection is valid. - * @param __WAKE__: UART wake-up selection. + * @param __WAKE__ UART wake-up selection. * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid) */ -#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \ - ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \ +#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \ + ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \ ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY)) /** * @brief Ensure that UART driver enable polarity is valid. - * @param __POLARITY__: UART driver enable polarity. + * @param __POLARITY__ UART driver enable polarity. * @retval SET (__POLARITY__ is valid) or RESET (__POLARITY__ is invalid) */ #define IS_UART_DE_POLARITY(__POLARITY__) (((__POLARITY__) == UART_DE_POLARITY_HIGH) || \ ((__POLARITY__) == UART_DE_POLARITY_LOW)) +#if defined(USART_PRESC_PRESCALER) +/** + * @brief Ensure that UART Prescaler is valid. + * @param __CLOCKPRESCALER__ UART Prescaler value. + * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid) + */ +#define IS_UART_PRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == UART_PRESCALER_DIV1) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV2) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV4) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV6) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV8) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV10) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV12) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV16) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV32) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV64) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV128) || \ + ((__CLOCKPRESCALER__) == UART_PRESCALER_DIV256)) +#endif + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Ensure that UART TXFIFO threshold level is valid. + * @param __THRESHOLD__ UART TXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_UART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_8_8)) + +/** + * @brief Ensure that UART RXFIFO threshold level is valid. + * @param __THRESHOLD__ UART RXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_UART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_8_8)) +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.c index 49a416e5a1..363a37943e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_uart_ex.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Extended UART HAL module driver. * This file provides firmware functions to manage the following extended * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART). @@ -21,6 +19,16 @@ (#) For the UART RS485 Driver Enable mode, initialize the UART registers by calling the HAL_RS485Ex_Init() API. + (#) FIFO mode enabling/disabling and RX/TX FIFO threshold programming. + + -@- When USART operates in FIFO mode, FIFO mode must be enabled prior + starting RX/TX transfers. Also RX/TX FIFO thresholds must be + configured prior starting RX/TX transfers. + + (#) Slave mode enabling/disabling and NSS pin configuration. + + -@- When USART operates in Slave mode, Slave mode must be enabled prior + starting RX/TX transfers. @endverbatim ****************************************************************************** @@ -76,6 +84,9 @@ * @{ */ static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection); +#if defined(USART_CR1_FIFOEN) +static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart); +#endif /** * @} */ @@ -147,26 +158,26 @@ static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTy /** * @brief Initialize the RS485 Driver enable feature according to the specified * parameters in the UART_InitTypeDef and creates the associated handle. - * @param huart: UART handle. - * @param Polarity: select the driver enable polarity. - * This parameter can be one of the following values: + * @param huart UART handle. + * @param Polarity Select the driver enable polarity. + * This parameter can be one of the following values: * @arg @ref UART_DE_POLARITY_HIGH DE signal is active high * @arg @ref UART_DE_POLARITY_LOW DE signal is active low - * @param AssertionTime: Driver Enable assertion time: - * 5-bit value defining the time between the activation of the DE (Driver Enable) - * signal and the beginning of the start bit. It is expressed in sample time - * units (1/8 or 1/16 bit time, depending on the oversampling rate) - * @param DeassertionTime: Driver Enable deassertion time: - * 5-bit value defining the time between the end of the last stop bit, in a - * transmitted message, and the de-activation of the DE (Driver Enable) signal. - * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the - * oversampling rate). + * @param AssertionTime Driver Enable assertion time: + * 5-bit value defining the time between the activation of the DE (Driver Enable) + * signal and the beginning of the start bit. It is expressed in sample time + * units (1/8 or 1/16 bit time, depending on the oversampling rate) + * @param DeassertionTime Driver Enable deassertion time: + * 5-bit value defining the time between the end of the last stop bit, in a + * transmitted message, and the de-activation of the DE (Driver Enable) signal. + * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the + * oversampling rate). * @retval HAL status */ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime) { uint32_t temp = 0x0; - + /* Check the UART handle allocation */ if(huart == NULL) { @@ -174,60 +185,131 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, } /* Check the Driver Enable UART instance */ assert_param(IS_UART_DRIVER_ENABLE_INSTANCE(huart->Instance)); - + /* Check the Driver Enable polarity */ assert_param(IS_UART_DE_POLARITY(Polarity)); - + /* Check the Driver Enable assertion time */ assert_param(IS_UART_ASSERTIONTIME(AssertionTime)); - + /* Check the Driver Enable deassertion time */ assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime)); - + if(huart->gState == HAL_UART_STATE_RESET) { /* Allocate lock resource and initialize it */ huart->Lock = HAL_UNLOCKED; - + /* Init the low level hardware : GPIO, CLOCK, CORTEX */ HAL_UART_MspInit(huart); } - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the UART Communication parameters */ if (UART_SetConfig(huart) == HAL_ERROR) { return HAL_ERROR; } - + if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT) { UART_AdvFeatureConfig(huart); } - + /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */ SET_BIT(huart->Instance->CR3, USART_CR3_DEM); - + /* Set the Driver Enable polarity */ MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity); - + /* Set the Driver Enable assertion and deassertion times */ temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS); temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS); MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */ return (UART_CheckIdleState(huart)); } +/** + * @} + */ + +/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions + * @brief Extended functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of Wakeup and FIFO mode related callback functions. + + (#) Wakeup from Stop mode Callback: + (+) HAL_UARTEx_WakeupCallback() + + (#) TX/RX Fifos Callbacks: + (+) HAL_UARTEx_RxFifoFullCallback() + (+) HAL_UARTEx_TxFifoEmptyCallback() + +@endverbatim + * @{ + */ + +/** + * @brief UART wakeup from Stop mode callback. + * @param huart UART handle. + * @retval None + */ + __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UARTEx_WakeupCallback can be implemented in the user file. + */ +} + +#if defined(USART_CR1_FIFOEN) +/** + * @brief UART RX Fifo full callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UARTEx_RxFifoFullCallback (UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file. + */ +} + +/** + * @brief UART TX Fifo empty callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UARTEx_TxFifoEmptyCallback (UART_HandleTypeDef *huart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file. + */ +} +#endif + /** * @} */ @@ -249,7 +331,13 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode (+) HAL_UARTEx_DisableStopMode() API disables the above functionality (+) HAL_UARTEx_WakeupCallback() called upon UART wakeup interrupt - + (+) HAL_UARTEx_EnableSPISlaveMode() API enables the SPI slave mode + (+) HAL_UARTEx_DisableSPISlaveMode() API disables the SPI slave mode + (+) HAL_UARTEx_ConfigNSS API configures the Slave Select input pin (NSS) + (+) HAL_UARTEx_EnableFifoMode() API enables the FIFO mode + (+) HAL_UARTEx_DisableFifoMode() API disables the FIFO mode + (+) HAL_UARTEx_SetTxFifoThreshold() API sets the TX FIFO threshold + (+) HAL_UARTEx_SetRxFifoThreshold() API sets the RX FIFO threshold @endverbatim * @{ @@ -265,8 +353,8 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, * long). * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode, * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode. - * @param huart: UART handle. - * @param AddressLength: this parameter can be one of the following values: + * @param huart UART handle. + * @param AddressLength This parameter can be one of the following values: * @arg @ref UART_ADDRESS_DETECT_4B 4-bit long address * @arg @ref UART_ADDRESS_DETECT_7B 6-, 7- or 8-bit long address * @retval HAL status @@ -278,21 +366,21 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua { return HAL_ERROR; } - + /* Check the address length parameter */ assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength)); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the address length */ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength); - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* TEACK and/or REACK to check before moving huart->gState to Ready */ return (UART_CheckIdleState(huart)); } @@ -300,46 +388,48 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua /** * @brief Set Wakeup from Stop mode interrupt flag selection. - * @param huart: UART handle. - * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status. - * This parameter can be one of the following values: - * @arg @ref UART_WAKEUP_ON_ADDRESS - * @arg @ref UART_WAKEUP_ON_STARTBIT - * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY + * @note It is the application responsibility to enable the interrupt used as + * usart_wkup interrupt source before entering low-power mode. + * @param huart UART handle. + * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status. + * This parameter can be one of the following values: + * @arg @ref UART_WAKEUP_ON_ADDRESS + * @arg @ref UART_WAKEUP_ON_STARTBIT + * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY * @retval HAL status */ HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection) { HAL_StatusTypeDef status = HAL_OK; uint32_t tickstart = 0; - + /* check the wake-up from stop mode UART instance */ assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance)); /* check the wake-up selection parameter */ assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent)); - + /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Disable the Peripheral */ __HAL_UART_DISABLE(huart); - + /* Set the wake-up selection scheme */ MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent); - + if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS) { UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection); } - + /* Enable the Peripheral */ __HAL_UART_ENABLE(huart); - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - + /* Wait until REACK flag is set */ if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK) { @@ -350,76 +440,386 @@ HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huar /* Initialize the UART State */ huart->gState = HAL_UART_STATE_READY; } - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return status; } /** * @brief Enable UART Stop Mode. - * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE. - * @param huart: UART handle. + * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Set UESM bit */ SET_BIT(huart->Instance->CR1, USART_CR1_UESM); - + huart->gState = HAL_UART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(huart); - + return HAL_OK; } /** * @brief Disable UART Stop Mode. - * @param huart: UART handle. + * @param huart UART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart) { /* Process Locked */ __HAL_LOCK(huart); - + huart->gState = HAL_UART_STATE_BUSY; - + /* Clear UESM bit */ CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM); - + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} +#if defined(USART_CR2_SLVEN) +/** + * @brief Enable the SPI slave mode. + * @note When the UART operates in SPI slave mode, it handles data flow using + * the serial interface clock derived from the external SCLK signal + * provided by the external master SPI device. + * @note In SPI slave mode, the UART must be enabled before starting the master + * communications (or between frames while the clock is stable). Otherwise, + * if the UART slave is enabled while the master is in the middle of a + * frame, it will become desynchronized with the master. + * @note The data register of the slave needs to be ready before the first edge + * of the communication clock or before the end of the ongoing communication, + * otherwise the SPI slave will transmit zeros. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_EnableSlaveMode(UART_HandleTypeDef *huart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* In SPI slave mode mode, the following bits must be kept cleared: + - LINEN and CLKEN bit in the USART_CR2 register + - HDSEL, SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Enable SPI slave mode */ + SET_BIT(huart->Instance->CR2, USART_CR2_SLVEN); + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->SlaveMode = UART_SLAVEMODE_ENABLE; + + huart->gState = HAL_UART_STATE_READY; + + /* Enable UART */ + __HAL_UART_ENABLE(huart); + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Disable the SPI slave mode. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_DisableSlaveMode(UART_HandleTypeDef *huart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Disable SPI slave mode */ + CLEAR_BIT(huart->Instance->CR2, USART_CR2_SLVEN); + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->SlaveMode = UART_SLAVEMODE_ENABLE; + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Configure the Slave Select input pin (NSS). + * @note Software NSS management: SPI slave will always be selected and NSS + * input pin will be ignored. + * @note Hardware NSS management: the SPI slave selection depends on NSS + * input pin. The slave is selected when NSS is low and deselected when + * NSS is high. + * @param huart UART handle. + * @param NSSConfig NSS configuration. + * This parameter can be one of the following values: + * @arg @ref UART_NSS_HARD + * @arg @ref UART_NSS_SOFT + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ConfigNSS(UART_HandleTypeDef *huart, uint32_t NSSConfig) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(huart->Instance)); + assert_param(IS_UART_NSS(NSSConfig)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Program DIS_NSS bit in the USART_CR2 register */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_DIS_NSS, NSSConfig); + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->gState = HAL_UART_STATE_READY; + /* Process Unlocked */ __HAL_UNLOCK(huart); return HAL_OK; } +#endif + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Enable the FIFO mode. + * @param huart UART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_EnableFifoMode(UART_HandleTypeDef *huart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Enable FIFO mode */ + SET_BIT(tmpcr1, USART_CR1_FIFOEN); + huart->FifoMode = UART_FIFOMODE_ENABLE; + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + /* Determine the number of data to process during RX/TX ISR execution */ + UARTEx_SetNbDataToProcess(huart); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} /** - * @brief UART wakeup from Stop mode callback. - * @param huart: UART handle. - * @retval None + * @brief Disable the FIFO mode. + * @param huart UART handle. + * @retval HAL status */ -__weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) +HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart) { - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); + uint32_t tmpcr1 = 0; - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UARTEx_WakeupCallback can be implemented in the user file. - */ + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(huart->Instance)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Enable FIFO mode */ + CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN); + huart->FifoMode = UART_FIFOMODE_DISABLE; + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; } +/** + * @brief Set the TXFIFO threshold. + * @param huart UART handle. + * @param Threshold TX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref UART_TXFIFO_THRESHOLD_1_8 + * @arg @ref UART_TXFIFO_THRESHOLD_1_4 + * @arg @ref UART_TXFIFO_THRESHOLD_1_2 + * @arg @ref UART_TXFIFO_THRESHOLD_3_4 + * @arg @ref UART_TXFIFO_THRESHOLD_7_8 + * @arg @ref UART_TXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(huart->Instance)); + assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Update TX threshold configuration */ + MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + UARTEx_SetNbDataToProcess(huart); + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} + +/** + * @brief Set the RXFIFO threshold. + * @param huart UART handle. + * @param Threshold RX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref UART_RXFIFO_THRESHOLD_1_8 + * @arg @ref UART_RXFIFO_THRESHOLD_1_4 + * @arg @ref UART_RXFIFO_THRESHOLD_1_2 + * @arg @ref UART_RXFIFO_THRESHOLD_3_4 + * @arg @ref UART_RXFIFO_THRESHOLD_7_8 + * @arg @ref UART_RXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_UART_FIFO_INSTANCE(huart->Instance)); + assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(huart); + + huart->gState = HAL_UART_STATE_BUSY; + + /* Save actual UART configuration */ + tmpcr1 = READ_REG(huart->Instance->CR1); + + /* Disable UART */ + __HAL_UART_DISABLE(huart); + + /* Update RX threshold configuration */ + MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + UARTEx_SetNbDataToProcess(huart); + + /* Restore UART configuration */ + WRITE_REG(huart->Instance->CR1, tmpcr1); + + huart->gState = HAL_UART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + + return HAL_OK; +} +#endif + /** * @} */ @@ -434,21 +834,55 @@ __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart) /** * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection. - * @param huart: UART handle. - * @param WakeUpSelection: UART wake up from stop mode parameters. + * @param huart UART handle. + * @param WakeUpSelection UART wake up from stop mode parameters. * @retval None */ static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection) { assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength)); - + /* Set the USART address length */ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength); - + /* Set the USART address node */ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS)); } +#if defined(USART_CR1_FIFOEN) +/** + * @brief Calculate the number of data to process in RX/TX ISR. + * @note The RX FIFO depth and the TX FIFO depth is extracted from + * the UART configuration registers. + * @param huart UART handle. + * @retval None + */ +void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart) +{ + uint8_t rx_fifo_depth; + uint8_t tx_fifo_depth; + uint8_t rx_fifo_threshold; + uint8_t tx_fifo_threshold; + uint8_t numerator[] = {1, 1, 1, 3, 7, 1}; + uint8_t denominator[] = {8, 4, 2, 4, 8, 1}; + + if (huart->FifoMode == UART_FIFOMODE_DISABLE) + { + huart->NbTxDataToProcess = 1; + huart->NbRxDataToProcess = 1; + } + else + { + rx_fifo_depth = 8; /* RX Fifo size */ + tx_fifo_depth = 8; /* TX Fifo size */ + rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos); + tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos); + huart->NbTxDataToProcess = (uint8_t)(tx_fifo_depth * numerator[tx_fifo_threshold])/denominator[tx_fifo_threshold]; + huart->NbRxDataToProcess = (uint8_t)(rx_fifo_depth * numerator[rx_fifo_threshold])/denominator[rx_fifo_threshold]; + } +} +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.h index 8977d53da8..926662f36b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_uart_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_uart_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of UART HAL Extended module. ****************************************************************************** * @attention @@ -84,25 +82,66 @@ typedef struct * @{ */ -/** @defgroup UARTEx_Word_Length UART Word Length +/** @defgroup UARTEx_Word_Length UARTEx Word Length * @{ */ -#define UART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long UART frame */ -#define UART_WORDLENGTH_8B ((uint32_t)0x00000000) /*!< 8-bit long UART frame */ -#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long UART frame */ +#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */ +#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */ +#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */ /** * @} */ -/** @defgroup UARTEx_WakeUp_Address_Length UART Extended WakeUp Address Length +/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length * @{ */ -#define UART_ADDRESS_DETECT_4B ((uint32_t)0x00000000) /*!< 4-bit long wake-up address */ -#define UART_ADDRESS_DETECT_7B ((uint32_t)USART_CR2_ADDM7) /*!< 7-bit long wake-up address */ +#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */ +#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */ /** * @} */ +#if defined(USART_CR2_SLVEN) +/** @defgroup UARTEx_Slave_Select_management UARTEx Slave Select Management + * @{ + */ +#define UART_NSS_HARD 0x00000000U /*!< SPI slave selection depends on NSS input pin */ +#define UART_NSS_SOFT USART_CR2_DIS_NSS /*!< SPI slave is always selected and NSS input pin is ignored */ +/** + * @} + */ +#endif + +#if defined(USART_CR1_FIFOEN) +/** @defgroup UARTEx_TXFIFO_threshold_level UARTEx TXFIFO threshold level + * @brief UART TXFIFO level + * @{ + */ +#define UART_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */ +#define UART_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */ +#define UART_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */ +#define UART_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */ +#define UART_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */ +#define UART_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */ +/** + * @} + */ + +/** @defgroup UARTEx_RXFIFO_threshold_level UARTEx RXFIFO threshold level + * @brief UART RXFIFO level + * @{ + */ +#define UART_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */ +#define UART_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */ +#define UART_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */ +#define UART_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */ +#define UART_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */ +#define UART_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */ +/** + * @} + */ +#endif + /** * @} */ @@ -124,7 +163,21 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, * @} */ +/** @addtogroup UARTEx_Exported_Functions_Group2 + * @{ + */ + /* IO operation functions *****************************************************/ +void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); + +#if defined(USART_CR1_FIFOEN) +void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart); +void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart); +#endif + +/** + * @} + */ /** @addtogroup UARTEx_Exported_Functions_Group3 * @{ @@ -135,7 +188,20 @@ HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huar HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart); HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart); HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength); -void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); + +#if defined(USART_CR2_SLVEN) +HAL_StatusTypeDef HAL_UARTEx_EnableSlaveMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UARTEx_DisableSlaveMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UARTEx_ConfigNSS(UART_HandleTypeDef *huart, uint32_t NSSConfig); +#endif + +#if defined(USART_CR1_FIFOEN) +HAL_StatusTypeDef HAL_UARTEx_EnableFifoMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart); +HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold); +HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold); +#endif + /** * @} @@ -145,17 +211,48 @@ void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); * @} */ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup UARTEx_Private_Constants UARTEx Private Constants + * @{ + */ +#if defined(USART_CR2_SLVEN) +/** @defgroup UARTEx_Slave_Mode UARTEx Synchronous Slave mode + * @{ + */ +#define UART_SLAVEMODE_DISABLE 0x00000000U /*!< USART SPI Slave Mode Enable */ +#define UART_SLAVEMODE_ENABLE USART_CR2_SLVEN /*!< USART SPI Slave Mode Disable */ +/** + * @} + */ +#endif + +#if defined(USART_CR1_FIFOEN) +/** @defgroup UARTEx_FIFO_mode UARTEx FIFO mode + * @{ + */ +#define UART_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ +#define UART_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */ +/** + * @} + */ +#endif +/** + * @} + */ + /* Private macros ------------------------------------------------------------*/ /** @defgroup UARTEx_Private_Macros UARTEx Private Macros * @{ */ /** @brief Report the UART clock source. - * @param __HANDLE__: specifies the UART Handle. - * @param __CLOCKSOURCE__: output variable. + * @param __HANDLE__ specifies the UART Handle. + * @param __CLOCKSOURCE__ output variable. * @retval UART clocking source, written in __CLOCKSOURCE__. */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || \ + defined (STM32L496xx) || defined (STM32L4A6xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ do { \ if((__HANDLE__)->Instance == USART1) \ @@ -242,7 +339,7 @@ void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); break; \ } \ } \ - else if ((__HANDLE__)->Instance == UART5) \ + else if((__HANDLE__)->Instance == UART5) \ { \ switch(__HAL_RCC_GET_UART5_SOURCE()) \ { \ @@ -600,7 +697,7 @@ void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); /** * @brief Ensure that UART frame length is valid. - * @param __LENGTH__: UART frame length. + * @param __LENGTH__ UART frame length. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) */ #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \ @@ -609,12 +706,48 @@ void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart); /** * @brief Ensure that UART wake-up address length is valid. - * @param __ADDRESS__: UART wake-up address length. + * @param __ADDRESS__ UART wake-up address length. * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid) */ #define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \ ((__ADDRESS__) == UART_ADDRESS_DETECT_7B)) +#if defined(USART_CR2_SLVEN) +/** + * @brief Ensure that UART Negative Slave Select (NSS) pin management is valid. + * @param __NSS__ UART Negative Slave Select pin management. + * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid) + */ +#define IS_UART_NSS(__NSS__) (((__NSS__) == UART_NSS_HARD) || \ + ((__NSS__) == UART_NSS_SOFT)) +#endif + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Ensure that UART TXFIFO threshold level is valid. + * @param __THRESHOLD__ UART TXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_UART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == UART_TXFIFO_THRESHOLD_8_8)) + +/** + * @brief Ensure that USART RXFIFO threshold level is valid. + * @param __THRESHOLD__ USART RXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_UART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == UART_RXFIFO_THRESHOLD_8_8)) +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.c index d6502a6a87..af1c56627f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_usart.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief USART HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Universal Synchronous/Asynchronous Receiver Transmitter @@ -43,8 +41,8 @@ (+++) Associate the initialized DMA handle to the USART DMA Tx/Rx handle. (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on the DMA Tx/Rx channel. - (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware - flow control and Mode (Receiver/Transmitter) in the husart handle Init structure. + (#) Program the Baud Rate, Word Length, Stop Bit, Parity, and Mode + (Receiver/Transmitter) in the husart handle Init structure. (#) Initialize the USART registers by calling the HAL_USART_Init() API: (++) This API configures also the low level Hardware GPIO, CLOCK, CORTEX...etc) @@ -107,10 +105,25 @@ */ #define USART_DUMMY_DATA ((uint16_t) 0xFFFF) /*!< USART transmitted dummy data */ #define USART_TEACK_REACK_TIMEOUT ((uint32_t) 1000) /*!< USART TX or RX enable acknowledge time-out value */ + +#if defined(USART_CR1_FIFOEN) +#define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ + USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8 | \ + USART_CR1_FIFOEN )) /*!< USART CR1 fields of parameters set by USART_SetConfig API */ + +#define USART_CR2_FIELDS ((uint32_t)(USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_CLKEN | \ + USART_CR2_LBCL | USART_CR2_STOP | USART_CR2_SLVEN | \ + USART_CR2_DIS_NSS)) /*!< USART CR2 fields of parameters set by USART_SetConfig API */ + +#define USART_CR3_FIELDS ((uint32_t)(USART_CR3_TXFTCFG | USART_CR3_RXFTCFG )) /*!< USART or USART CR3 fields of parameters set by USART_SetConfig API */ +#else #define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8)) /*!< USART CR1 fields of parameters set by USART_SetConfig API */ #define USART_CR2_FIELDS ((uint32_t)(USART_CR2_CPHA | USART_CR2_CPOL | \ USART_CR2_CLKEN | USART_CR2_LBCL | USART_CR2_STOP)) /*!< USART CR2 fields of parameters set by USART_SetConfig API */ +#endif + +#define USART_BRR_MIN 0x10U /* USART BRR minimum authorized value */ /** * @} */ @@ -133,10 +146,21 @@ static void USART_DMARxAbortCallback(DMA_HandleTypeDef *hdma); static HAL_StatusTypeDef USART_WaitOnFlagUntilTimeout(USART_HandleTypeDef *husart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout); static HAL_StatusTypeDef USART_SetConfig(USART_HandleTypeDef *husart); static HAL_StatusTypeDef USART_CheckIdleState(USART_HandleTypeDef *husart); -static HAL_StatusTypeDef USART_Transmit_IT(USART_HandleTypeDef *husart); -static HAL_StatusTypeDef USART_EndTransmit_IT(USART_HandleTypeDef *husart); -static HAL_StatusTypeDef USART_Receive_IT(USART_HandleTypeDef *husart); -static HAL_StatusTypeDef USART_TransmitReceive_IT(USART_HandleTypeDef *husart); +static void USART_TxISR_8BIT(USART_HandleTypeDef *husart); +static void USART_TxISR_16BIT(USART_HandleTypeDef *husart); +#if defined(USART_CR1_FIFOEN) +static void USART_TxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart); +static void USART_TxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart); +#endif +static void USART_EndTransmit_IT(USART_HandleTypeDef *husart); +static void USART_RxISR_8BIT(USART_HandleTypeDef *husart); +static void USART_RxISR_16BIT(USART_HandleTypeDef *husart); +#if defined(USART_CR1_FIFOEN) +static void USART_RxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart); +static void USART_RxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart); +#endif + + /** * @} */ @@ -249,13 +273,13 @@ HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart) } /** - * @brief DeInitialize the USART peripheral. + * @brief DeInitialize the USART peripheral. * @param husart USART handle. * @retval HAL status */ HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart) { - /* Check the USART handle allocation */ + /* Check the USART handle allocation */ if(husart == NULL) { return HAL_ERROR; @@ -284,14 +308,14 @@ HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart) /** * @brief Initialize the USART MSP. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ -__weak void HAL_USART_MspInit(USART_HandleTypeDef *husart) + __weak void HAL_USART_MspInit(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_MspInit can be implemented in the user file */ @@ -299,14 +323,14 @@ __weak void HAL_USART_MspInit(USART_HandleTypeDef *husart) /** * @brief DeInitialize the USART MSP. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ -__weak void HAL_USART_MspDeInit(USART_HandleTypeDef *husart) + __weak void HAL_USART_MspDeInit(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_MspDeInit can be implemented in the user file */ @@ -317,7 +341,7 @@ __weak void HAL_USART_MspDeInit(USART_HandleTypeDef *husart) */ /** @defgroup USART_Exported_Functions_Group2 IO operation functions - * @brief USART Transmit and Receive functions + * @brief USART Transmit and Receive functions * @verbatim =============================================================================== @@ -410,24 +434,23 @@ HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxDa { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(husart); - + husart->ErrorCode = HAL_USART_ERROR_NONE; husart->State = HAL_USART_STATE_BUSY_TX; - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - + husart->TxXferSize = Size; husart->TxXferCount = Size; - + /* Check the remaining data to be sent */ while(husart->TxXferCount > 0) { - husart->TxXferCount--; - if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } @@ -441,19 +464,29 @@ HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxDa { husart->Instance->TDR = (*pTxData++ & (uint8_t)0xFF); } + + husart->TxXferCount--; } - + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } - + + /* Clear Transmission Complete Flag */ + __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_TCF); + + /* Clear overrun flag and discard the received data */ + __HAL_USART_CLEAR_OREFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + /* At end of Tx process, restore husart->State to Ready */ husart->State = HAL_USART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(husart); - + return HAL_OK; } else @@ -464,7 +497,7 @@ HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxDa /** * @brief Receive an amount of data in blocking mode. - * @note To receive synchronous data, dummy data are simultaneously transmitted. + * @note To receive synchronous data, dummy data are simultaneously transmitted. * @param husart USART handle. * @param pRxData Pointer to data buffer. * @param Size Amount of data to be received. @@ -476,51 +509,54 @@ HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxDat uint16_t* tmp; uint16_t uhMask; uint32_t tickstart = 0; - + if(husart->State == HAL_USART_STATE_READY) { if((pRxData == NULL) || (Size == 0)) { return HAL_ERROR; } - + /* Process Locked */ __HAL_LOCK(husart); - + husart->ErrorCode = HAL_USART_ERROR_NONE; husart->State = HAL_USART_STATE_BUSY_RX; - + /* Init tickstart for timeout managment*/ tickstart = HAL_GetTick(); - + husart->RxXferSize = Size; husart->RxXferCount = Size; - + /* Computation of USART mask to apply to RDR register */ USART_MASK_COMPUTATION(husart); uhMask = husart->Mask; - + /* as long as data have to be received */ while(husart->RxXferCount > 0) { - husart->RxXferCount--; - - /* Wait until TC flag is set to send dummy byte in order to generate the - * clock for the slave to send data. - * Whatever the frame length (7, 8 or 9-bit long), the same dummy value - * can be written for all the cases. */ - if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) +#if defined(USART_CR2_SLVEN) + if (husart->SlaveMode == USART_SLAVEMODE_DISABLE) +#endif { - return HAL_TIMEOUT; + /* Wait until TXE flag is set to send dummy byte in order to generate the + * clock for the slave to send data. + * Whatever the frame length (7, 8 or 9-bit long), the same dummy value + * can be written for all the cases. */ + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x0FF); } - husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x0FF); - + /* Wait for RXNE Flag */ if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } - + if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) { tmp = (uint16_t*) pRxData ; @@ -531,14 +567,26 @@ HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxDat { *pRxData++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); } + + husart->RxXferCount--; + } - + +#if defined(USART_CR2_SLVEN) + /* Clear SPI slave underrun flag and discard transmit data */ + if (husart->SlaveMode == USART_SLAVEMODE_ENABLE) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + /* At end of Rx process, restore husart->State to Ready */ husart->State = HAL_USART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(husart); - + return HAL_OK; } else @@ -548,7 +596,7 @@ HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxDat } /** - * @brief Full-Duplex Send and Receive an amount of data in blocking mode. + * @brief Full-Duplex Send and Receive an amount of data in blocking mode. * @param husart USART handle. * @param pTxData pointer to TX data buffer. * @param pRxData pointer to RX data buffer. @@ -568,6 +616,7 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t { return HAL_ERROR; } + /* Process Locked */ __HAL_LOCK(husart); @@ -586,14 +635,14 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t USART_MASK_COMPUTATION(husart); uhMask = husart->Mask; - /* Check the remain data to be sent */ - while(husart->TxXferCount > 0) +#if defined(USART_CR2_SLVEN) + if ((husart->SlaveMode == USART_SLAVEMODE_ENABLE) || (husart->TxXferCount == 0x01U)) +#else + if (husart->TxXferCount == 0x01U) +#endif { - husart->TxXferCount--; - husart->RxXferCount--; - - /* Wait until TC flag is set to send data */ - if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + /* Wait until TXE flag is set to send data */ + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) { return HAL_TIMEOUT; } @@ -601,28 +650,60 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t { tmp = (uint16_t*) pTxData; husart->Instance->TDR = (*tmp & uhMask); - pTxData += 2; + pTxData += 2U; } else - { + { husart->Instance->TDR = (*pTxData++ & (uint8_t)uhMask); } - /* Wait for RXNE Flag */ - if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + husart->TxXferCount--; + } + + /* Check the remain data to be sent */ + while ((husart->TxXferCount > 0) || (husart->RxXferCount > 0)) + { + if (husart->TxXferCount > 0) { - return HAL_TIMEOUT; + /* Wait until TXE flag is set to send data */ + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + tmp = (uint16_t*) pTxData; + husart->Instance->TDR = (*tmp & uhMask); + pTxData += 2; + } + else + { + husart->Instance->TDR = (*pTxData++ & (uint8_t)uhMask); + } + + husart->TxXferCount--; } - - if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + + if (husart->RxXferCount > 0) { - tmp = (uint16_t*) pRxData ; - *tmp = (uint16_t)(husart->Instance->RDR & uhMask); - pRxData +=2; - } - else - { - *pRxData++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); + /* Wait for RXNE Flag */ + if(USART_WaitOnFlagUntilTimeout(husart, USART_FLAG_RXNE, RESET, tickstart, Timeout) != HAL_OK) + { + return HAL_TIMEOUT; + } + + if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + tmp = (uint16_t*) pRxData ; + *tmp = (uint16_t)(husart->Instance->RDR & uhMask); + pRxData +=2; + } + else + { + *pRxData++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); + } + + husart->RxXferCount--; } } @@ -659,12 +740,13 @@ HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pT /* Process Locked */ __HAL_LOCK(husart); - husart->pTxBuffPtr = pTxData; - husart->TxXferSize = Size; + husart->pTxBuffPtr = pTxData; + husart->TxXferSize = Size; husart->TxXferCount = Size; + husart->TxISR = NULL; husart->ErrorCode = HAL_USART_ERROR_NONE; - husart->State = HAL_USART_STATE_BUSY_TX; + husart->State = HAL_USART_STATE_BUSY_TX; /* The USART Error Interrupts: (Frame error, noise error, overrun error) are not managed by the USART Transmit Process to avoid the overrun interrupt @@ -672,11 +754,45 @@ HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pT to benefit for the frame error and noise interrupts the usart mode should be configured only for transmit "USART_MODE_TX" */ - /* Process Unlocked */ - __HAL_UNLOCK(husart); - - /* Enable the USART Transmit Data Register Empty Interrupt */ - __HAL_USART_ENABLE_IT(husart, USART_IT_TXE); +#if defined(USART_CR1_FIFOEN) + /* Configure Tx interrupt processing */ + if (husart->FifoMode == USART_FIFOMODE_ENABLE) + { + /* Set the Tx ISR function pointer according to the data word length */ + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->TxISR = USART_TxISR_16BIT_FIFOEN; + } + else + { + husart->TxISR = USART_TxISR_8BIT_FIFOEN; + } + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + /* Enable the TX FIFO threshold interrupt */ + __HAL_USART_ENABLE_IT(husart, USART_IT_TXFT); + } + else +#endif + { + /* Set the Tx ISR function pointer according to the data word length */ + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->TxISR = USART_TxISR_16BIT; + } + else + { + husart->TxISR = USART_TxISR_8BIT; + } + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + /* Enable the USART Transmit Data Register Empty Interrupt */ + __HAL_USART_ENABLE_IT(husart, USART_IT_TXE); + } return HAL_OK; } @@ -687,8 +803,8 @@ HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pT } /** - * @brief Receive an amount of data in interrupt mode. - * @note To receive synchronous data, dummy data are simultaneously transmitted. + * @brief Receive an amount of data in blocking mode. + * @note To receive synchronous data, dummy data are simultaneously transmitted. * @param husart USART handle. * @param pRxData pointer to data buffer. * @param Size amount of data to be received. @@ -696,6 +812,10 @@ HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pT */ HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size) { +#if defined(USART_CR1_FIFOEN) + uint8_t nb_dummy_data; +#endif + if(husart->State == HAL_USART_STATE_READY) { if((pRxData == NULL ) || (Size == 0)) @@ -706,34 +826,87 @@ HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRx /* Process Locked */ __HAL_LOCK(husart); - husart->pRxBuffPtr = pRxData; - husart->RxXferSize = Size; + husart->pRxBuffPtr = pRxData; + husart->RxXferSize = Size; husart->RxXferCount = Size; + husart->RxISR = NULL; USART_MASK_COMPUTATION(husart); husart->ErrorCode = HAL_USART_ERROR_NONE; husart->State = HAL_USART_STATE_BUSY_RX; - /* Process Unlocked */ - __HAL_UNLOCK(husart); - - /* Enable the USART Parity Error and Data Register not empty Interrupts */ - SET_BIT(husart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); - /* Enable the USART Error Interrupt: (Frame error, noise error, overrun error) */ SET_BIT(husart->Instance->CR3, USART_CR3_EIE); - /* Send dummy byte in order to generate the clock for the Slave to send the next data */ - if(husart->Init.WordLength == USART_WORDLENGTH_9B) +#if defined(USART_CR1_FIFOEN) + /* Configure Rx interrupt processing */ + if ((husart->FifoMode == USART_FIFOMODE_ENABLE) && (Size >= husart->NbRxDataToProcess)) { - husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x01FF); + /* Set the Rx ISR function pointer according to the data word length */ + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->RxISR = USART_RxISR_16BIT_FIFOEN; + } + else + { + husart->RxISR = USART_RxISR_8BIT_FIFOEN; + } + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + /* Enable the USART Parity Error interrupt and RX FIFO Threshold interrupt */ + SET_BIT(husart->Instance->CR1, USART_CR1_PEIE); + SET_BIT(husart->Instance->CR3, USART_CR3_RXFTIE); } else +#endif { - husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + /* Set the Rx ISR function pointer according to the data word length */ + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->RxISR = USART_RxISR_16BIT; + } + else + { + husart->RxISR = USART_RxISR_8BIT; + } + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + /* Enable the USART Parity Error and Data Register not empty Interrupts */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(husart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE); +#else + SET_BIT(husart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); +#endif } +#if defined(USART_CR2_SLVEN) + if (husart->SlaveMode == USART_SLAVEMODE_DISABLE) +#endif + { + /* Send dummy data in order to generate the clock for the Slave to send the next data. + When FIFO mode is disabled only one data must be transferred. + When FIFO mode is enabled data must be transmitted until the RX FIFO reaches its threshold. + */ +#if defined(USART_CR1_FIFOEN) + if ((husart->FifoMode == USART_FIFOMODE_ENABLE) && (Size >= husart->NbRxDataToProcess)) + { + for (nb_dummy_data = husart->NbRxDataToProcess ; nb_dummy_data > 0 ; nb_dummy_data--) + { + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } + else +#endif + { + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } + return HAL_OK; } else @@ -743,7 +916,7 @@ HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRx } /** - * @brief Full-Duplex Send and Receive an amount of data in interrupt mode. + * @brief Full-Duplex Send and Receive an amount of data in interrupt mode. * @param husart USART handle. * @param pTxData pointer to TX data buffer. * @param pRxData pointer to RX data buffer. @@ -774,18 +947,69 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint husart->ErrorCode = HAL_USART_ERROR_NONE; husart->State = HAL_USART_STATE_BUSY_TX_RX; + +#if defined(USART_CR1_FIFOEN) + /* Configure TxRx interrupt processing */ + if ((husart->FifoMode == USART_FIFOMODE_ENABLE) && (Size >= husart->NbRxDataToProcess)) + { + /* Set the Rx ISR function pointer according to the data word length */ + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->TxISR = USART_TxISR_16BIT_FIFOEN; + husart->RxISR = USART_RxISR_16BIT_FIFOEN; + } + else + { + husart->TxISR = USART_TxISR_8BIT_FIFOEN; + husart->RxISR = USART_RxISR_8BIT_FIFOEN; + } + + /* Process Locked */ + __HAL_UNLOCK(husart); + + /* Enable the USART Error Interrupt: (Frame error, noise error, overrun error) */ + SET_BIT(husart->Instance->CR3, USART_CR3_EIE); + + /* Enable the USART Parity Error interrupt */ + SET_BIT(husart->Instance->CR1, USART_CR1_PEIE); - /* Process Unlocked */ - __HAL_UNLOCK(husart); + /* Enable the TX and RX FIFO Threshold interrupts */ + SET_BIT(husart->Instance->CR3, (USART_CR3_TXFTIE | USART_CR3_RXFTIE)); + } + else +#endif + { + if ((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + { + husart->TxISR = USART_TxISR_16BIT; + husart->RxISR = USART_RxISR_16BIT; + } + else + { + husart->TxISR = USART_TxISR_8BIT; + husart->RxISR = USART_RxISR_8BIT; + } - /* Enable the USART Error Interrupt: (Frame error, noise error, overrun error) */ - SET_BIT(husart->Instance->CR3, USART_CR3_EIE); - - /* Enable the USART Parity Error and USART Data Register not empty Interrupts */ + /* Process Locked */ + __HAL_UNLOCK(husart); + + /* Enable the USART Error Interrupt: (Frame error, noise error, overrun error) */ + SET_BIT(husart->Instance->CR3, USART_CR3_EIE); + + /* Enable the USART Parity Error and USART Data Register not empty Interrupts */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(husart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE); +#else SET_BIT(husart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE); - - /* Enable the USART Transmit Data Register Empty Interrupt */ - SET_BIT(husart->Instance->CR1, USART_CR1_TXEIE); +#endif + + /* Enable the USART Transmit Data Register Empty Interrupt */ +#if defined(USART_CR1_FIFOEN) + SET_BIT(husart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE); +#else + SET_BIT(husart->Instance->CR1, USART_CR1_TXEIE); +#endif + } return HAL_OK; } @@ -796,7 +1020,7 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint } /** - * @brief Send an amount of data in DMA mode. + * @brief Send an amount of data in DMA mode. * @param husart USART handle. * @param pTxData pointer to data buffer. * @param Size amount of data to be sent. @@ -854,13 +1078,13 @@ HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *p } /** - * @brief Receive an amount of data in DMA mode. + * @brief Receive an amount of data in DMA mode. * @param husart USART handle. * @param pRxData pointer to data buffer. * @param Size amount of data to be received. * @note When the USART parity is enabled (PCE = 1), the received data contain * the parity bit (MSB position). - * @note The USART DMA transmit channel must be configured in order to generate the clock for the slave. + * @note The USART DMA transmit channel must be configured in order to generate the clock for the slave. * @retval HAL status */ HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size) @@ -899,15 +1123,21 @@ HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pR tmp = (uint32_t*)&pRxData; HAL_DMA_Start_IT(husart->hdmarx, (uint32_t)&husart->Instance->RDR, *(uint32_t*)tmp, Size); - /* Enable the USART transmit DMA channel: the transmit channel is used in order - to generate in the non-blocking mode the clock to the slave device, - this mode isn't a simplex receive mode but a full-duplex receive mode */ - /* Set the USART DMA Tx Complete and Error callback to Null */ - husart->hdmatx->XferErrorCallback = NULL; - husart->hdmatx->XferHalfCpltCallback = NULL; - husart->hdmatx->XferCpltCallback = NULL; - HAL_DMA_Start_IT(husart->hdmatx, *(uint32_t*)tmp, (uint32_t)&husart->Instance->TDR, Size); - +#if defined(USART_CR2_SLVEN) + if (husart->SlaveMode == USART_SLAVEMODE_DISABLE) + { + /* Enable the USART transmit DMA channel: the transmit channel is used in order + to generate in the non-blocking mode the clock to the slave device, + this mode isn't a simplex receive mode but a full-duplex receive mode */ + tmp = (uint32_t*)&pRxData; + /* Set the USART DMA Tx Complete and Error callback to Null */ + husart->hdmatx->XferErrorCallback = NULL; + husart->hdmatx->XferHalfCpltCallback = NULL; + husart->hdmatx->XferCpltCallback = NULL; + HAL_DMA_Start_IT(husart->hdmatx, *(uint32_t*)tmp, (uint32_t)&husart->Instance->TDR, Size); + } +#endif + /* Process Unlocked */ __HAL_UNLOCK(husart); @@ -934,7 +1164,7 @@ HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pR } /** - * @brief Full-Duplex Transmit Receive an amount of data in non-blocking mode. + * @brief Full-Duplex Transmit Receive an amount of data in non-blocking mode. * @param husart USART handle. * @param pTxData pointer to TX data buffer. * @param pRxData pointer to RX data buffer. @@ -1018,7 +1248,7 @@ HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uin } /** - * @brief Pause the DMA Transfer. + * @brief Pause the DMA Transfer. * @param husart USART handle. * @retval HAL status */ @@ -1040,14 +1270,14 @@ HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart) { /* Disable the USART DMA Tx request */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAT); - } + } if (HAL_IS_BIT_SET(husart->Instance->CR3, USART_CR3_DMAR)) - { + { /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(husart->Instance->CR1, USART_CR1_PEIE); CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); - /* Disable the USART DMA Rx request */ + /* Disable the USART DMA Rx request */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAR); } } @@ -1059,7 +1289,7 @@ HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart) } /** - * @brief Resume the DMA Transfer. + * @brief Resume the DMA Transfer. * @param husart USART handle. * @retval HAL status */ @@ -1077,7 +1307,7 @@ HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart) (husart->State == HAL_USART_STATE_BUSY_TX_RX) ) { /* Clear the Overrun flag before resuming the Rx transfer*/ - __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF); + __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF); /* Reenable PE and ERR (Frame error, noise error, overrun error) interrupts */ SET_BIT(husart->Instance->CR1, USART_CR1_PEIE); @@ -1097,7 +1327,7 @@ HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart) } /** - * @brief Stop the DMA Transfer. + * @brief Stop the DMA Transfer. * @param husart USART handle. * @retval HAL status */ @@ -1108,7 +1338,7 @@ HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart) HAL_USART_TxHalfCpltCallback / HAL_USART_RxHalfCpltCallback: indeed, when HAL_DMA_Abort() API is called, the DMA TX/RX Transfer or Half Transfer complete interrupt is generated if the DMA transfer interruption occurs at the middle or at the end of - the stream and the corresponding call back is executed. */ + the stream and the corresponding call back is executed. */ /* Disable the USART Tx/Rx DMA requests */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAT); @@ -1145,9 +1375,14 @@ HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart) */ HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart) { - /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + /* Disable TXEIE, TCIE, RXNE, RXFT, TXFT, PE and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE)); +#else CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); +#endif /* Disable the USART DMA Tx request if enabled */ if (HAL_IS_BIT_SET(husart->Instance->CR3, USART_CR3_DMAT)) @@ -1188,6 +1423,17 @@ HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart) /* Clear the Error flags in the ICR register */ __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF); +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (husart->FifoMode == USART_FIFOMODE_ENABLE) + { + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Discard the received data */ + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); + /* Restore husart->State to Ready */ husart->State = HAL_USART_STATE_READY; @@ -1215,9 +1461,14 @@ HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart) { uint32_t abortcplt = 1; - /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ +#if defined(USART_CR1_FIFOEN) + /* Disable TXEIE, TCIE, RXNE, RXFT, TXFT, PE and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE)); +#else CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); +#endif /* If DMA Tx and/or DMA Rx Handles are associated to USART Handle, DMA Abort complete callbacks should be initialised before any call to DMA Abort functions */ @@ -1311,6 +1562,17 @@ HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart) /* Clear the Error flags in the ICR register */ __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF); +#if defined(USART_CR1_FIFOEN) + /* Flush the whole TX FIFO (if needed) */ + if (husart->FifoMode == USART_FIFOMODE_ENABLE) + { + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } + +#endif + /* Discard the received data */ + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); + /* Restore husart->State to Ready */ husart->State = HAL_USART_STATE_READY; @@ -1330,116 +1592,151 @@ void HAL_USART_IRQHandler(USART_HandleTypeDef *husart) { uint32_t isrflags = READ_REG(husart->Instance->ISR); uint32_t cr1its = READ_REG(husart->Instance->CR1); - uint32_t cr3its; - uint32_t errorflags; + uint32_t cr3its = READ_REG(husart->Instance->CR3); + uint32_t errorflags; + /* If no error occurs */ +#if defined(USART_CR2_SLVEN) + errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_UDR)); +#else errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE)); +#endif if (errorflags == RESET) { /* USART in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET)) ) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { - if(husart->State == HAL_USART_STATE_BUSY_RX) - { - USART_Receive_IT(husart); - } - else - { - USART_TransmitReceive_IT(husart); - } + if (husart->RxISR != NULL) {husart->RxISR(husart);} return; } } - + /* If some errors occur */ - cr3its = READ_REG(husart->Instance->CR3); +#if defined(USART_CR1_FIFOEN) + if( (errorflags != RESET) + && ( ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != RESET) + || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != RESET))) +#else if( (errorflags != RESET) && ( ((cr3its & USART_CR3_EIE) != RESET) - || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET)) ) + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) +#endif { /* USART parity error interrupt occurred -------------------------------------*/ if(((isrflags & USART_ISR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) { __HAL_USART_CLEAR_IT(husart, USART_CLEAR_PEF); - + husart->ErrorCode |= HAL_USART_ERROR_PE; } - + /* USART frame error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { __HAL_USART_CLEAR_IT(husart, USART_CLEAR_FEF); - + husart->ErrorCode |= HAL_USART_ERROR_FE; } - + /* USART noise error interrupt occurred --------------------------------------*/ if(((isrflags & USART_ISR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) { __HAL_USART_CLEAR_IT(husart, USART_CLEAR_NEF); - + husart->ErrorCode |= HAL_USART_ERROR_NE; } - + /* USART Over-Run interrupt occurred -----------------------------------------*/ - if(((isrflags & USART_ISR_ORE) != RESET) && - (((cr1its & USART_CR1_RXNEIE) != RESET) || ((cr3its & USART_CR3_EIE) != RESET))) +#if defined(USART_CR1_FIFOEN) + if( ((isrflags & USART_ISR_ORE) != RESET) + &&( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) || + ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != RESET))) +#else + if( ((isrflags & USART_ISR_ORE) != RESET) + &&( ((cr1its & USART_CR1_RXNEIE) != RESET) || + ((cr3its & USART_CR3_EIE) != RESET))) +#endif { __HAL_USART_CLEAR_IT(husart, USART_CLEAR_OREF); - + husart->ErrorCode |= HAL_USART_ERROR_ORE; } - + +#if defined(USART_CR2_SLVEN) + /* USART SPI slave underrun error interrupt occurred -------------------------*/ + if(((isrflags & USART_ISR_UDR) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + { + /* Ignore SPI slave underrun errors when reception is going on */ + if (husart->State == HAL_USART_STATE_BUSY_RX) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + return; + } + else + { + __HAL_USART_CLEAR_UDRFLAG(husart); + husart->ErrorCode |= HAL_USART_ERROR_UDR; + } + } +#endif + /* Call USART Error Call back function if need be --------------------------*/ if(husart->ErrorCode != HAL_USART_ERROR_NONE) { /* USART in mode Receiver ---------------------------------------------------*/ - if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_RXNE_RXFNE) != RESET) + && ( ((cr1its & USART_CR1_RXNEIE_RXFNEIE) != RESET) + || ((cr3its & USART_CR3_RXFTIE) != RESET))) +#else + if(((isrflags & USART_ISR_RXNE) != RESET) + && ((cr1its & USART_CR1_RXNEIE) != RESET)) +#endif { - if(husart->State == HAL_USART_STATE_BUSY_RX) - { - USART_Receive_IT(husart); - } - else - { - USART_TransmitReceive_IT(husart); - } + if (husart->RxISR != NULL) {husart->RxISR(husart);} } - + /* If Overrun error occurs, or if any error occurs in DMA mode reception, - consider error as blocking */ + consider error as blocking */ if (((husart->ErrorCode & HAL_USART_ERROR_ORE) != RESET) || (HAL_IS_BIT_SET(husart->Instance->CR3, USART_CR3_DMAR))) { /* Blocking error : transfer is aborted - Set the USART state ready to be able to start again the process, - Disable Interrupts, and disable DMA requests, if ongoing */ + Set the USART state ready to be able to start again the process, + Disable Interrupts, and disable DMA requests, if ongoing */ USART_EndTransfer(husart); - + /* Disable the USART DMA Rx request if enabled */ if (HAL_IS_BIT_SET(husart->Instance->CR3, USART_CR3_DMAR)) { CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAR | USART_CR3_DMAR); - + /* Abort the USART DMA Tx channel */ if(husart->hdmatx != NULL) { /* Set the USART Tx DMA Abort callback to NULL : no callback - executed at end of DMA abort procedure */ + executed at end of DMA abort procedure */ husart->hdmatx->XferAbortCallback = NULL; /* Abort DMA TX */ HAL_DMA_Abort_IT(husart->hdmatx); } - + /* Abort the USART DMA Rx channel */ if(husart->hdmarx != NULL) { /* Set the USART Rx DMA Abort callback : - will lead to call HAL_USART_ErrorCallback() at end of DMA abort procedure */ + will lead to call HAL_USART_ErrorCallback() at end of DMA abort procedure */ husart->hdmarx->XferAbortCallback = USART_DMAAbortOnError; - + /* Abort DMA RX */ if(HAL_DMA_Abort_IT(husart->hdmarx) != HAL_OK) { @@ -1462,49 +1759,64 @@ void HAL_USART_IRQHandler(USART_HandleTypeDef *husart) else { /* Non Blocking error : transfer could go on. - Error is notified to user through user error callback */ + Error is notified to user through user error callback */ HAL_USART_ErrorCallback(husart); husart->ErrorCode = HAL_USART_ERROR_NONE; } } return; - + } /* End if some error occurs */ - - + + /* USART in mode Transmitter ------------------------------------------------*/ - if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) +#if defined(USART_CR1_FIFOEN) + if(((isrflags & USART_ISR_TXE_TXFNF) != RESET) + && ( ((cr1its & USART_CR1_TXEIE_TXFNFIE) != RESET) + || ((cr3its & USART_CR3_TXFTIE) != RESET))) +#else + if(((isrflags & USART_ISR_TXE) != RESET) + && ((cr1its & USART_CR1_TXEIE) != RESET)) +#endif { - if(husart->State == HAL_USART_STATE_BUSY_TX) - { - USART_Transmit_IT(husart); - } - else - { - USART_TransmitReceive_IT(husart); - } + if (husart->TxISR != NULL) {husart->TxISR(husart);} return; } - + /* USART in mode Transmitter (transmission end) -----------------------------*/ if(((isrflags & USART_ISR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) { USART_EndTransmit_IT(husart); return; } - + +#if defined(USART_CR1_FIFOEN) + /* USART TX Fifo Empty occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_TXFE) != RESET) && ((cr1its & USART_CR1_TXFEIE) != RESET)) + { + HAL_USARTEx_TxFifoEmptyCallback(husart); + return; + } + + /* USART RX Fifo Full occurred ----------------------------------------------*/ + if(((isrflags & USART_ISR_RXFF) != RESET) && ((cr1its & USART_CR1_RXFFIE) != RESET)) + { + HAL_USARTEx_RxFifoFullCallback(husart); + return; + } +#endif } /** * @brief Tx Transfer completed callback. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ __weak void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_TxCpltCallback can be implemented in the user file. */ @@ -1512,14 +1824,14 @@ __weak void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart) /** * @brief Tx Half Transfer completed callback. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ -__weak void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart) + __weak void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE: This function should not be modified, when the callback is needed, the HAL_USART_TxHalfCpltCallback can be implemented in the user file. */ @@ -1527,14 +1839,14 @@ __weak void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart) /** * @brief Rx Transfer completed callback. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ __weak void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE: This function should not be modified, when the callback is needed, the HAL_USART_RxCpltCallback can be implemented in the user file. */ @@ -1542,14 +1854,14 @@ __weak void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart) /** * @brief Rx Half Transfer completed callback. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ __weak void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_RxHalfCpltCallback can be implemented in the user file */ @@ -1557,14 +1869,14 @@ __weak void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart) /** * @brief Tx/Rx Transfers completed callback for the non-blocking process. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ __weak void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_TxRxCpltCallback can be implemented in the user file */ @@ -1572,14 +1884,14 @@ __weak void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart) /** * @brief USART error callback. - * @param husart: USART handle. + * @param husart USART handle. * @retval None */ __weak void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart) { /* Prevent unused argument(s) compilation warning */ UNUSED(husart); - + /* NOTE : This function should not be modified, when the callback is needed, the HAL_USART_ErrorCallback can be implemented in the user file. */ @@ -1623,7 +1935,7 @@ __weak void HAL_USART_AbortCpltCallback (USART_HandleTypeDef *husart) /** * @brief Return the USART handle state. - * @param husart : pointer to a USART_HandleTypeDef structure that contains + * @param husart pointer to a USART_HandleTypeDef structure that contains * the configuration information for the specified USART. * @retval USART handle state */ @@ -1634,7 +1946,7 @@ HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart) /** * @brief Return the USART error code. - * @param husart : pointer to a USART_HandleTypeDef structure that contains + * @param husart pointer to a USART_HandleTypeDef structure that contains * the configuration information for the specified USART. * @retval USART handle Error Code */ @@ -1662,17 +1974,22 @@ uint32_t HAL_USART_GetError(USART_HandleTypeDef *husart) */ static void USART_EndTransfer(USART_HandleTypeDef *husart) { - /* Disable TXEIE and TCIE interrupts */ - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - CLEAR_BIT(husart->Instance->CR1, (USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | USART_CR1_PEIE)); +#if defined(USART_CR1_FIFOEN) + /* Disable TXEIE, TCIE, RXNE, RXFT, TXFT, PE and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE | USART_CR1_TCIE)); + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE)); +#else + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); +#endif /* At end of process, restore husart->State to Ready */ husart->State = HAL_USART_STATE_READY; } /** - * @brief DMA USART transmit process complete callback. + * @brief DMA USART transmit process complete callback. * @param hdma DMA handle. * @retval None */ @@ -1682,7 +1999,7 @@ static void USART_DMATransmitCplt(DMA_HandleTypeDef *hdma) /* DMA Normal mode */ if ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) ) - { + { husart->TxXferCount = 0; if(husart->State == HAL_USART_STATE_BUSY_TX) @@ -1706,7 +2023,7 @@ static void USART_DMATransmitCplt(DMA_HandleTypeDef *hdma) } /** - * @brief DMA USART transmit process half complete callback. + * @brief DMA USART transmit process half complete callback. * @param hdma DMA handle. * @retval None */ @@ -1718,30 +2035,30 @@ static void USART_DMATxHalfCplt(DMA_HandleTypeDef *hdma) } /** - * @brief DMA USART receive process complete callback. + * @brief DMA USART receive process complete callback. * @param hdma DMA handle. * @retval None */ static void USART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) { USART_HandleTypeDef* husart = (USART_HandleTypeDef*)(hdma->Parent); - + /* DMA Normal mode */ if ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) ) { husart->RxXferCount = 0; - + /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ CLEAR_BIT(husart->Instance->CR1, USART_CR1_PEIE); CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); - + /* Disable the DMA RX transfer for the receiver request by resetting the DMAR bit - in USART CR3 register */ + in USART CR3 register */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAR); /* similarly, disable the DMA TX transfer that was started to provide the - clock to the slave device */ + clock to the slave device */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_DMAT); - + if(husart->State == HAL_USART_STATE_BUSY_RX) { HAL_USART_RxCpltCallback(husart); @@ -1765,12 +2082,11 @@ static void USART_DMAReceiveCplt(DMA_HandleTypeDef *hdma) { HAL_USART_TxRxCpltCallback(husart); } - } - + } } /** - * @brief DMA USART receive process half complete callback. + * @brief DMA USART receive process half complete callback. * @param hdma DMA handle. * @retval None */ @@ -1783,7 +2099,7 @@ static void USART_DMARxHalfCplt(DMA_HandleTypeDef *hdma) /** * @brief DMA USART communication error callback. - * @param hdma: DMA handle. + * @param hdma DMA handle. * @retval None */ static void USART_DMAError(DMA_HandleTypeDef *hdma) @@ -1849,7 +2165,7 @@ static void USART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF); /* Restore husart->State to Ready */ - husart->State = HAL_USART_STATE_READY; + husart->State = HAL_USART_STATE_READY; /* Call user Abort complete callback */ HAL_USART_AbortCpltCallback(husart); @@ -1916,15 +2232,11 @@ static HAL_StatusTypeDef USART_WaitOnFlagUntilTimeout(USART_HandleTypeDef *husar { if((Timeout == 0) || ((HAL_GetTick()-Tickstart) > Timeout)) { - /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */ - CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE)); - CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); - husart->State= HAL_USART_STATE_READY; - + /* Process Unlocked */ __HAL_UNLOCK(husart); - + return HAL_TIMEOUT; } } @@ -1934,7 +2246,7 @@ static HAL_StatusTypeDef USART_WaitOnFlagUntilTimeout(USART_HandleTypeDef *husar /** * @brief Configure the USART peripheral. - * @param husart: USART handle. + * @param husart USART handle. * @retval HAL status */ static HAL_StatusTypeDef USART_SetConfig(USART_HandleTypeDef *husart) @@ -1954,62 +2266,109 @@ static HAL_StatusTypeDef USART_SetConfig(USART_HandleTypeDef *husart) assert_param(IS_USART_STOPBITS(husart->Init.StopBits)); assert_param(IS_USART_PARITY(husart->Init.Parity)); assert_param(IS_USART_MODE(husart->Init.Mode)); - - +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_USART_PRESCALER(husart->Init.ClockPrescaler)); +#endif + /*-------------------------- USART CR1 Configuration -----------------------*/ /* Clear M, PCE, PS, TE and RE bits and configure * the USART Word Length, Parity and Mode: * set the M bits according to husart->Init.WordLength value * set PCE and PS bits according to husart->Init.Parity value * set TE and RE bits according to husart->Init.Mode value - * force OVER8 to 1 to allow to reach the maximum speed (Fclock/8) */ + * force OVER8 to 1 to allow to reach the maximum speed (Fclock/8) */ tmpreg = (uint32_t)husart->Init.WordLength | husart->Init.Parity | husart->Init.Mode | USART_CR1_OVER8; MODIFY_REG(husart->Instance->CR1, USART_CR1_FIELDS, tmpreg); /*---------------------------- USART CR2 Configuration ---------------------*/ - /* Clear and configure the USART Clock, CPOL, CPHA, LBCL and STOP bits: + /* Clear and configure the USART Clock, CPOL, CPHA, LBCL STOP and SLVEN bits: * set CPOL bit according to husart->Init.CLKPolarity value * set CPHA bit according to husart->Init.CLKPhase value - * set LBCL bit according to husart->Init.CLKLastBit value + * set LBCL bit according to husart->Init.CLKLastBit value (used in SPI master mode only) * set STOP[13:12] bits according to husart->Init.StopBits value */ + tmpreg = 0; tmpreg = (uint32_t)(USART_CLOCK_ENABLE); + tmpreg |= (uint32_t)husart->Init.CLKLastBit; tmpreg |= ((uint32_t)husart->Init.CLKPolarity | (uint32_t)husart->Init.CLKPhase); - tmpreg |= ((uint32_t)husart->Init.CLKLastBit | (uint32_t)husart->Init.StopBits); + tmpreg |= (uint32_t)husart->Init.StopBits; MODIFY_REG(husart->Instance->CR2, USART_CR2_FIELDS, tmpreg); - /*-------------------------- USART CR3 Configuration -----------------------*/ - /* no CR3 register configuration */ +#if defined(USART_PRESC_PRESCALER) + /*-------------------------- USART PRESC Configuration -----------------------*/ + /* Configure + * - USART Clock Prescaler : set PRESCALER according to husart->Init.ClockPrescaler value */ + MODIFY_REG(husart->Instance->PRESC, USART_PRESC_PRESCALER, husart->Init.ClockPrescaler); +#endif /*-------------------------- USART BRR Configuration -----------------------*/ /* BRR is filled-up according to OVER8 bit setting which is forced to 1 */ USART_GETCLOCKSOURCE(husart, clocksource); + switch (clocksource) { - case USART_CLOCKSOURCE_PCLK1: - usartdiv = (uint16_t)(((2*HAL_RCC_GetPCLK1Freq()) + (husart->Init.BaudRate/2)) / husart->Init.BaudRate); - break; - case USART_CLOCKSOURCE_PCLK2: - usartdiv = (uint16_t)(((2*HAL_RCC_GetPCLK2Freq()) + (husart->Init.BaudRate/2)) / husart->Init.BaudRate); - break; - case USART_CLOCKSOURCE_HSI: - usartdiv = (uint16_t)(((2*HSI_VALUE) + (husart->Init.BaudRate/2)) / husart->Init.BaudRate); - break; - case USART_CLOCKSOURCE_SYSCLK: - usartdiv = (uint16_t)(((2*HAL_RCC_GetSysClockFreq()) + (husart->Init.BaudRate/2)) / husart->Init.BaudRate); - break; - case USART_CLOCKSOURCE_LSE: - usartdiv = (uint16_t)(((2*LSE_VALUE) + (husart->Init.BaudRate/2)) / husart->Init.BaudRate); - break; - case USART_CLOCKSOURCE_UNDEFINED: - default: - ret = HAL_ERROR; - break; + case USART_CLOCKSOURCE_PCLK1: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), husart->Init.BaudRate, husart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), husart->Init.BaudRate)); +#endif + break; + case USART_CLOCKSOURCE_PCLK2: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), husart->Init.BaudRate, husart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), husart->Init.BaudRate)); +#endif + break; + case USART_CLOCKSOURCE_HSI: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HSI_VALUE, husart->Init.BaudRate, husart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HSI_VALUE, husart->Init.BaudRate)); +#endif + break; + case USART_CLOCKSOURCE_SYSCLK: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), husart->Init.BaudRate, husart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), husart->Init.BaudRate)); +#endif + break; + case USART_CLOCKSOURCE_LSE: +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(LSE_VALUE, husart->Init.BaudRate, husart->Init.ClockPrescaler)); +#else + usartdiv = (uint16_t)(USART_DIV_SAMPLING8(LSE_VALUE, husart->Init.BaudRate)); +#endif + break; + case USART_CLOCKSOURCE_UNDEFINED: + default: + ret = HAL_ERROR; + break; } - brrtemp = usartdiv & 0xFFF0; - brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000F) >> 1U); - husart->Instance->BRR = brrtemp; - + /* USARTDIV must be greater than or equal to 0d16 */ + if (usartdiv >= USART_BRR_MIN) + { + brrtemp = usartdiv & 0xFFF0U; + brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); + husart->Instance->BRR = brrtemp; + } + else + { + ret = HAL_ERROR; + } + +#if defined(USART_CR1_FIFOEN) + /* Initialize the number of data to process during RX/TX ISR execution */ + husart->NbTxDataToProcess = 1; + husart->NbRxDataToProcess = 1; +#endif + + /* Clear ISR function pointers */ + husart->RxISR = NULL; + husart->TxISR = NULL; + return ret; } @@ -2063,59 +2422,158 @@ static HAL_StatusTypeDef USART_CheckIdleState(USART_HandleTypeDef *husart) * @note Function called under interruption only, once * interruptions have been enabled by HAL_USART_Transmit_IT(). * @note The USART errors are not managed to avoid the overrun error. + * @note ISR function executed when FIFO mode is disabled and when the + * data word length is less than 9 bits long. * @param husart USART handle. - * @retval HAL status + * @retval None */ -static HAL_StatusTypeDef USART_Transmit_IT(USART_HandleTypeDef *husart) +static void USART_TxISR_8BIT(USART_HandleTypeDef *husart) { - uint16_t* tmp; - /* Check that a Tx process is ongoing */ - if(husart->State == HAL_USART_STATE_BUSY_TX) + if ((husart->State == HAL_USART_STATE_BUSY_TX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) { - if(husart->TxXferCount == 0) { /* Disable the USART Transmit data register empty interrupt */ __HAL_USART_DISABLE_IT(husart, USART_IT_TXE); - + /* Enable the USART Transmit Complete Interrupt */ __HAL_USART_ENABLE_IT(husart, USART_IT_TC); - - return HAL_OK; } else { - if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) + husart->Instance->TDR = (uint8_t)(*husart->pTxBuffPtr++ & (uint8_t)0xFF); + husart->TxXferCount--; + } + } +} + +/** + * @brief Simplex send an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_USART_Transmit_IT(). + * @note The USART errors are not managed to avoid the overrun error. + * @note ISR function executed when FIFO mode is disabled and when the + * data word length is 9 bits long. + * @param husart USART handle. + * @retval None + */ +static void USART_TxISR_16BIT(USART_HandleTypeDef *husart) +{ + uint16_t* tmp; + + if ((husart->State == HAL_USART_STATE_BUSY_TX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) + { + if(husart->TxXferCount == 0) + { + /* Disable the USART Transmit data register empty interrupt */ + __HAL_USART_DISABLE_IT(husart, USART_IT_TXE); + + /* Enable the USART Transmit Complete Interrupt */ + __HAL_USART_ENABLE_IT(husart, USART_IT_TC); + } + else + { + tmp = (uint16_t*) husart->pTxBuffPtr; + husart->Instance->TDR = (*tmp & (uint16_t)0x01FF); + husart->pTxBuffPtr += 2; + husart->TxXferCount--; + } + } +} + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Simplex send an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_USART_Transmit_IT(). + * @note The USART errors are not managed to avoid the overrun error. + * @note ISR function executed when FIFO mode is enabled and when the + * data word length is less than 9 bits long. + * @param husart USART handle. + * @retval None + */ +static void USART_TxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart) +{ + uint8_t nb_tx_data; + /* Check that a Tx process is ongoing */ + if ((husart->State == HAL_USART_STATE_BUSY_TX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) + { + for(nb_tx_data = husart->NbTxDataToProcess ; nb_tx_data > 0 ; nb_tx_data--) + { + if(husart->TxXferCount == 0) + { + /* Disable the TX FIFO threshold interrupt */ + __HAL_USART_DISABLE_IT(husart, USART_IT_TXFT); + + /* Enable the USART Transmit Complete Interrupt */ + __HAL_USART_ENABLE_IT(husart, USART_IT_TC); + + break; /* force exit loop */ + } + else if (__HAL_USART_GET_FLAG(husart, USART_FLAG_TXFNF) == SET) + { + husart->Instance->TDR = (uint8_t)(*husart->pTxBuffPtr++ & (uint8_t)0xFF); + husart->TxXferCount--; + } + } + } +} + +/** + * @brief Simplex send an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_USART_Transmit_IT(). + * @note The USART errors are not managed to avoid the overrun error. + * @note ISR function executed when FIFO mode is enabled and when the + * data word length is 9 bits long. + * @param husart USART handle. + * @retval None + */ +static void USART_TxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart) +{ + uint16_t* tmp; + uint8_t nb_tx_data; + + /* Check that a Tx process is ongoing */ + if ((husart->State == HAL_USART_STATE_BUSY_TX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) + { + for(nb_tx_data = husart->NbTxDataToProcess ; nb_tx_data > 0 ; nb_tx_data--) + { + if(husart->TxXferCount == 0) + { + /* Disable the TX FIFO threshold interrupt */ + __HAL_USART_DISABLE_IT(husart, USART_IT_TXFT); + + /* Enable the USART Transmit Complete Interrupt */ + __HAL_USART_ENABLE_IT(husart, USART_IT_TC); + + break; /* force exit loop */ + } + else if (__HAL_USART_GET_FLAG(husart, USART_FLAG_TXFNF) == SET) { tmp = (uint16_t*) husart->pTxBuffPtr; husart->Instance->TDR = (*tmp & (uint16_t)0x01FF); - husart->pTxBuffPtr += 2; + husart->pTxBuffPtr += 2; + husart->TxXferCount--; } - else - { - husart->Instance->TDR = (uint8_t)(*husart->pTxBuffPtr++ & (uint8_t)0xFF); - } - - husart->TxXferCount--; - - return HAL_OK; } } - else - { - return HAL_BUSY; - } } +#endif /** * @brief Wraps up transmission in non-blocking mode. * @param husart Pointer to a USART_HandleTypeDef structure that contains * the configuration information for the specified USART module. - * @retval HAL status + * @retval None */ -static HAL_StatusTypeDef USART_EndTransmit_IT(USART_HandleTypeDef *husart) +static void USART_EndTransmit_IT(USART_HandleTypeDef *husart) { /* Disable the USART Transmit Complete Interrupt */ __HAL_USART_DISABLE_IT(husart, USART_IT_TC); @@ -2123,12 +2581,27 @@ static HAL_StatusTypeDef USART_EndTransmit_IT(USART_HandleTypeDef *husart) /* Disable the USART Error Interrupt: (Frame error, noise error, overrun error) */ __HAL_USART_DISABLE_IT(husart, USART_IT_ERR); - /* Tx process is ended, restore husart->State to Ready */ - husart->State = HAL_USART_STATE_READY; - - HAL_USART_TxCpltCallback(husart); - - return HAL_OK; + /* Clear TxISR function pointer */ + husart->TxISR = NULL; + + if (husart->State == HAL_USART_STATE_BUSY_TX) + { + /* Clear overrun flag and discard the received data */ + __HAL_USART_CLEAR_OREFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); + + /* Tx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxCpltCallback(husart); + } + else if (husart->RxXferCount == 0) + { + /* TxRx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxRxCpltCallback(husart); + } } @@ -2136,136 +2609,370 @@ static HAL_StatusTypeDef USART_EndTransmit_IT(USART_HandleTypeDef *husart) * @brief Simplex receive an amount of data in non-blocking mode. * @note Function called under interruption only, once * interruptions have been enabled by HAL_USART_Receive_IT(). + * @note ISR function executed when FIFO mode is disabled and when the + * data word length is less than 9 bits long. * @param husart USART handle - * @retval HAL status + * @retval None */ -static HAL_StatusTypeDef USART_Receive_IT(USART_HandleTypeDef *husart) +static void USART_RxISR_8BIT(USART_HandleTypeDef *husart) { - uint16_t* tmp; uint16_t uhMask = husart->Mask; - - if(husart->State == HAL_USART_STATE_BUSY_RX) + + if ((husart->State == HAL_USART_STATE_BUSY_RX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) { - - if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) - { - tmp = (uint16_t*) husart->pRxBuffPtr; - *tmp = (uint16_t)(husart->Instance->RDR & uhMask); - husart->pRxBuffPtr += 2; - } - else - { - *husart->pRxBuffPtr++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); - } - /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ - husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); - + *husart->pRxBuffPtr++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); + if(--husart->RxXferCount == 0) { /* Disable the USART Parity Error Interrupt and RXNE interrupt*/ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - +#endif + /* Disable the USART Error Interrupt: (Frame error, noise error, overrun error) */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); - /* Rx process is completed, restore husart->State to Ready */ - husart->State = HAL_USART_STATE_READY; - - HAL_USART_RxCpltCallback(husart); - - return HAL_OK; + /* Clear RxISR function pointer */ + husart->RxISR = NULL; + + if(husart->State == HAL_USART_STATE_BUSY_RX) + { +#if defined(USART_CR2_SLVEN) + /* Clear SPI slave underrun flag and discard transmit data */ + if (husart->SlaveMode == USART_SLAVEMODE_ENABLE) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Rx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_RxCpltCallback(husart); + } + else if ((husart->TxXferCount == 0) && + (READ_BIT(husart->Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE)) + { + /* TxRx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxRxCpltCallback(husart); + } } - - return HAL_OK; - } - else - { - return HAL_BUSY; +#if defined(USART_CR2_SLVEN) + else if ( (husart->State == HAL_USART_STATE_BUSY_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE)) +#else + else if (husart->State == HAL_USART_STATE_BUSY_RX) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } } } /** - * @brief Full-Duplex Send receive an amount of data in full-duplex mode (non-blocking). + * @brief Simplex receive an amount of data in non-blocking mode. * @note Function called under interruption only, once - * interruptions have been enabled by HAL_USART_TransmitReceive_IT(). - * @param husart: USART handle. - * @retval HAL status + * interruptions have been enabled by HAL_USART_Receive_IT(). + * @note ISR function executed when FIFO mode is disabled and when the + * data word length is 9 bits long. + * @param husart USART handle + * @retval None */ -static HAL_StatusTypeDef USART_TransmitReceive_IT(USART_HandleTypeDef *husart) +static void USART_RxISR_16BIT(USART_HandleTypeDef *husart) { uint16_t* tmp; uint16_t uhMask = husart->Mask; - if(husart->State == HAL_USART_STATE_BUSY_TX_RX) + if ((husart->State == HAL_USART_STATE_BUSY_RX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) { - - if(husart->TxXferCount != 0x00) - { - if(__HAL_USART_GET_FLAG(husart, USART_FLAG_TXE) != RESET) - { - if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) - { - tmp = (uint16_t*) husart->pTxBuffPtr; - husart->Instance->TDR = (uint16_t)(*tmp & uhMask); - husart->pTxBuffPtr += 2; - } - else - { - husart->Instance->TDR = (uint8_t)(*husart->pTxBuffPtr++ & (uint8_t)uhMask); - } - husart->TxXferCount--; - - /* Check the latest data transmitted */ - if(husart->TxXferCount == 0) - { - __HAL_USART_DISABLE_IT(husart, USART_IT_TXE); - } - } - } - - if(husart->RxXferCount != 0x00) - { - if(__HAL_USART_GET_FLAG(husart, USART_FLAG_RXNE) != RESET) - { - if((husart->Init.WordLength == USART_WORDLENGTH_9B) && (husart->Init.Parity == USART_PARITY_NONE)) - { - tmp = (uint16_t*) husart->pRxBuffPtr; - *tmp = (uint16_t)(husart->Instance->RDR & uhMask); - husart->pRxBuffPtr += 2; - } - else - { - *husart->pRxBuffPtr++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); - } - husart->RxXferCount--; - } - } - - /* Check the latest data received */ - if(husart->RxXferCount == 0) + tmp = (uint16_t*) husart->pRxBuffPtr; + *tmp = (uint16_t)(husart->Instance->RDR & uhMask); + husart->pRxBuffPtr += 2; + + if(--husart->RxXferCount == 0) { /* Disable the USART Parity Error Interrupt and RXNE interrupt*/ +#if defined(USART_CR1_FIFOEN) + CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)); +#else CLEAR_BIT(husart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); +#endif /* Disable the USART Error Interrupt: (Frame error, noise error, overrun error) */ CLEAR_BIT(husart->Instance->CR3, USART_CR3_EIE); - /* Rx process is completed, restore husart->State to Ready */ - husart->State = HAL_USART_STATE_READY; - - HAL_USART_TxRxCpltCallback(husart); - - return HAL_OK; + /* Clear RxISR function pointer */ + husart->RxISR = NULL; + + if(husart->State == HAL_USART_STATE_BUSY_RX) + { +#if defined(USART_CR2_SLVEN) + /* Clear SPI slave underrun flag and discard transmit data */ + if (husart->SlaveMode == USART_SLAVEMODE_ENABLE) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Rx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_RxCpltCallback(husart); + } + else if ((husart->TxXferCount == 0) && + (READ_BIT(husart->Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE)) + { + /* TxRx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxRxCpltCallback(husart); + } } +#if defined(USART_CR2_SLVEN) + else if ( (husart->State == HAL_USART_STATE_BUSY_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE)) +#else + else if (husart->State == HAL_USART_STATE_BUSY_RX) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } +} - return HAL_OK; +#if defined(USART_CR1_FIFOEN) +/** + * @brief Simplex receive an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_USART_Receive_IT(). + * @note ISR function executed when FIFO mode is enabled and when the + * data word length is less than 9 bits long. + * @retval None + * @retval HAL status + */ +static void USART_RxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart) +{ + uint16_t uhMask = husart->Mask; + uint8_t nb_rx_data; + + /* Check that a Rx process is ongoing */ + if ((husart->State == HAL_USART_STATE_BUSY_RX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) + { + for(nb_rx_data = husart->NbRxDataToProcess ; nb_rx_data > 0 ; nb_rx_data--) + { + if (__HAL_USART_GET_FLAG(husart, USART_FLAG_RXFNE) == SET) + { + *husart->pRxBuffPtr++ = (uint8_t)(husart->Instance->RDR & (uint8_t)uhMask); + + if(--husart->RxXferCount == 0) + { + /* Disable the USART Parity Error Interrupt */ + CLEAR_BIT(husart->Instance->CR1, USART_CR1_PEIE); + + /* Disable the USART Error Interrupt: (Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */ + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); + + /* Clear RxISR function pointer */ + husart->RxISR = NULL; + + if (husart->State == HAL_USART_STATE_BUSY_RX) + { +#if defined(USART_CR2_SLVEN) + /* Clear SPI slave underrun flag and discard transmit data */ + if (husart->SlaveMode == USART_SLAVEMODE_ENABLE) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Rx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_RxCpltCallback(husart); + } + else if ((husart->TxXferCount == 0) && + (READ_BIT(husart->Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE)) + { + /* TxRx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxRxCpltCallback(husart); + } + } +#if defined(USART_CR2_SLVEN) + else if ((husart->State == HAL_USART_STATE_BUSY_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE)) +#else + else if (husart->State == HAL_USART_STATE_BUSY_RX) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } + } + + /* When remaining number of bytes to receive is less than the RX FIFO + threshold, next incoming frames are processed as if FIFO mode was + disabled (i.e. one interrupt per received frame). + */ + if (((husart->RxXferCount != 0U)) && (husart->RxXferCount < husart->NbRxDataToProcess)) + { + /* Disable the USART RXFT interrupt*/ + CLEAR_BIT(husart->Instance->CR3, USART_CR3_RXFTIE); + + /* Update the RxISR function pointer */ + husart->RxISR = USART_RxISR_8BIT; + + /* Enable the USART Data Register Not Empty interrupt */ + SET_BIT(husart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + +#if defined(USART_CR2_SLVEN) + if ( (husart->State == HAL_USART_STATE_BUSY_TX_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE) && + (husart->TxXferCount == 0U)) +#else + if ( (husart->State == HAL_USART_STATE_BUSY_TX_RX) && + (husart->TxXferCount == 0U)) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } } else { - return HAL_BUSY; + /* Clear RXNE interrupt flag */ + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); } } +/** + * @brief Simplex receive an amount of data in non-blocking mode. + * @note Function called under interruption only, once + * interruptions have been enabled by HAL_USART_Receive_IT(). + * @note ISR function executed when FIFO mode is enabled and when the + * data word length is 9 bits long. + * @param husart USART handle + * @retval None + */ +static void USART_RxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart) +{ + uint16_t* tmp; + uint16_t uhMask = husart->Mask; + uint8_t nb_rx_data; + + /* Check that a Tx process is ongoing */ + if ((husart->State == HAL_USART_STATE_BUSY_RX) || + (husart->State == HAL_USART_STATE_BUSY_TX_RX)) + { + for(nb_rx_data = husart->NbRxDataToProcess ; nb_rx_data > 0 ; nb_rx_data--) + { + if (__HAL_USART_GET_FLAG(husart, USART_FLAG_RXFNE) == SET) + { + tmp = (uint16_t*) husart->pRxBuffPtr; + *tmp = (uint16_t)(husart->Instance->RDR & uhMask); + husart->pRxBuffPtr += 2; + + if(--husart->RxXferCount == 0) + { + /* Disable the USART Parity Error Interrupt */ + CLEAR_BIT(husart->Instance->CR1, USART_CR1_PEIE); + + /* Disable the USART Error Interrupt: (Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */ + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE)); + + /* Clear RxISR function pointer */ + husart->RxISR = NULL; + + if(husart->State == HAL_USART_STATE_BUSY_RX) + { +#if defined(USART_CR2_SLVEN) + /* Clear SPI slave underrun flag and discard transmit data */ + if (husart->SlaveMode == USART_SLAVEMODE_ENABLE) + { + __HAL_USART_CLEAR_UDRFLAG(husart); + __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST); + } +#endif + + /* Rx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_RxCpltCallback(husart); + } + else if ((husart->TxXferCount == 0) && + (READ_BIT(husart->Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE)) + { + /* TxRx process is completed, restore husart->State to Ready */ + husart->State = HAL_USART_STATE_READY; + + HAL_USART_TxRxCpltCallback(husart); + } + } +#if defined(USART_CR2_SLVEN) + else if ((husart->State == HAL_USART_STATE_BUSY_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE)) +#else + else if (husart->State == HAL_USART_STATE_BUSY_RX) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } + } + + /* When remaining number of bytes to receive is less than the RX FIFO + threshold, next incoming frames are processed as if FIFO mode was + disabled (i.e. one interrupt per received frame). + */ + if (((husart->RxXferCount != 0U)) && (husart->RxXferCount < husart->NbRxDataToProcess)) + { + /* Disable the USART RXFT interrupt*/ + CLEAR_BIT(husart->Instance->CR3, USART_CR3_RXFTIE); + + /* Update the RxISR function pointer */ + husart->RxISR = USART_RxISR_16BIT; + + /* Enable the USART Data Register Not Empty interrupt */ + SET_BIT(husart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE); + +#if defined(USART_CR2_SLVEN) + if ( (husart->State == HAL_USART_STATE_BUSY_TX_RX) && + (husart->SlaveMode == USART_SLAVEMODE_DISABLE) && + (husart->TxXferCount == 0U)) +#else + if ( (husart->State == HAL_USART_STATE_BUSY_TX_RX) && + (husart->TxXferCount == 0U)) +#endif + { + /* Send dummy byte in order to generate the clock for the Slave to Send the next data */ + husart->Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF); + } + } + } + else + { + /* Clear RXNE interrupt flag */ + __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST); + } +} +#endif + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.h index a7ed6ebb47..baea5261ee 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_usart.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of USART HAL module. ****************************************************************************** * @attention @@ -66,7 +64,11 @@ typedef struct { uint32_t BaudRate; /*!< This member configures the Usart communication baud rate. The baud rate is computed using the following formula: - Baud Rate Register = ((PCLKx) / ((huart->Init.BaudRate))). */ + Baud Rate Register[15:4] = ((2 * fclk_pres) / ((huart->Init.BaudRate)))[15:4] + Baud Rate Register[3] = 0 + Baud Rate Register[2:0] = (((2 * fclk_pres) / ((huart->Init.BaudRate)))[3:0]) >> 1 + where fclk_pres is the USART input clock frequency (fclk) divided by a prescaler. + @note Oversampling by 8 is systematically applied to achieve high baud rates. */ uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. This parameter can be a value of @ref USARTEx_Word_Length. */ @@ -93,6 +95,12 @@ typedef struct uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted data bit (MSB) has to be output on the SCLK pin in synchronous mode. This parameter can be a value of @ref USART_Last_Bit. */ + +#if defined(USART_PRESC_PRESCALER) + uint32_t ClockPrescaler; /*!< Specifies the prescaler value used to divide the USART clock source. + This parameter can be a value of @ref USART_ClockPrescaler. */ +#endif + }USART_InitTypeDef; /** @@ -100,14 +108,14 @@ typedef struct */ typedef enum { - HAL_USART_STATE_RESET = 0x00, /*!< Peripheral is not initialized */ - HAL_USART_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ - HAL_USART_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ - HAL_USART_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ - HAL_USART_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ - HAL_USART_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission Reception process is ongoing */ - HAL_USART_STATE_TIMEOUT = 0x03, /*!< Timeout state */ - HAL_USART_STATE_ERROR = 0x04 /*!< Error */ + HAL_USART_STATE_RESET = 0x00U, /*!< Peripheral is not initialized */ + HAL_USART_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ + HAL_USART_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */ + HAL_USART_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */ + HAL_USART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ + HAL_USART_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission Reception process is ongoing */ + HAL_USART_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ + HAL_USART_STATE_ERROR = 0x04U /*!< Error */ }HAL_USART_StateTypeDef; /** @@ -115,12 +123,13 @@ typedef enum */ typedef enum { - HAL_USART_ERROR_NONE = 0x00, /*!< No error */ - HAL_USART_ERROR_PE = 0x01, /*!< Parity error */ - HAL_USART_ERROR_NE = 0x02, /*!< Noise error */ - HAL_USART_ERROR_FE = 0x04, /*!< frame error */ - HAL_USART_ERROR_ORE = 0x08, /*!< Overrun error */ - HAL_USART_ERROR_DMA = 0x10 /*!< DMA transfer error */ + HAL_USART_ERROR_NONE = 0x00U, /*!< No error */ + HAL_USART_ERROR_PE = 0x01U, /*!< Parity error */ + HAL_USART_ERROR_NE = 0x02U, /*!< Noise error */ + HAL_USART_ERROR_FE = 0x04U, /*!< frame error */ + HAL_USART_ERROR_ORE = 0x08U, /*!< Overrun error */ + HAL_USART_ERROR_DMA = 0x10U, /*!< DMA transfer error */ + HAL_USART_ERROR_UDR = 0x20U /*!< SPI slave underrun error */ }HAL_USART_ErrorTypeDef; /** @@ -128,47 +137,65 @@ typedef enum */ typedef enum { - USART_CLOCKSOURCE_PCLK1 = 0x00, /*!< PCLK1 clock source */ - USART_CLOCKSOURCE_PCLK2 = 0x01, /*!< PCLK2 clock source */ - USART_CLOCKSOURCE_HSI = 0x02, /*!< HSI clock source */ - USART_CLOCKSOURCE_SYSCLK = 0x04, /*!< SYSCLK clock source */ - USART_CLOCKSOURCE_LSE = 0x08, /*!< LSE clock source */ - USART_CLOCKSOURCE_UNDEFINED = 0x10 /*!< Undefined clock source */ + USART_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ + USART_CLOCKSOURCE_PCLK2 = 0x01U, /*!< PCLK2 clock source */ + USART_CLOCKSOURCE_HSI = 0x02U, /*!< HSI clock source */ + USART_CLOCKSOURCE_SYSCLK = 0x04U, /*!< SYSCLK clock source */ + USART_CLOCKSOURCE_LSE = 0x08U, /*!< LSE clock source */ + USART_CLOCKSOURCE_UNDEFINED = 0x10U /*!< Undefined clock source */ }USART_ClockSourceTypeDef; /** * @brief USART handle Structure definition */ -typedef struct +typedef struct __USART_HandleTypeDef { - USART_TypeDef *Instance; /*!< USART registers base address */ + USART_TypeDef *Instance; /*!< USART registers base address */ - USART_InitTypeDef Init; /*!< USART communication parameters */ + USART_InitTypeDef Init; /*!< USART communication parameters */ - uint8_t *pTxBuffPtr; /*!< Pointer to USART Tx transfer Buffer */ + uint8_t *pTxBuffPtr; /*!< Pointer to USART Tx transfer Buffer */ - uint16_t TxXferSize; /*!< USART Tx Transfer size */ + uint16_t TxXferSize; /*!< USART Tx Transfer size */ - __IO uint16_t TxXferCount; /*!< USART Tx Transfer Counter */ + __IO uint16_t TxXferCount; /*!< USART Tx Transfer Counter */ - uint8_t *pRxBuffPtr; /*!< Pointer to USART Rx transfer Buffer */ + uint8_t *pRxBuffPtr; /*!< Pointer to USART Rx transfer Buffer */ - uint16_t RxXferSize; /*!< USART Rx Transfer size */ + uint16_t RxXferSize; /*!< USART Rx Transfer size */ - __IO uint16_t RxXferCount; /*!< USART Rx Transfer Counter */ + __IO uint16_t RxXferCount; /*!< USART Rx Transfer Counter */ - uint16_t Mask; /*!< USART Rx RDR register mask */ + uint16_t Mask; /*!< USART Rx RDR register mask */ - DMA_HandleTypeDef *hdmatx; /*!< USART Tx DMA Handle parameters */ +#if defined(USART_CR1_FIFOEN) + uint16_t NbRxDataToProcess; /*!< Number of data to process during RX ISR execution */ - DMA_HandleTypeDef *hdmarx; /*!< USART Rx DMA Handle parameters */ + uint16_t NbTxDataToProcess; /*!< Number of data to process during TX ISR execution */ - HAL_LockTypeDef Lock; /*!< Locking object */ + uint32_t FifoMode; /*!< Specifies if the FIFO mode is being used. + This parameter can be a value of @ref USARTEx_FIFO_mode. */ +#endif - __IO HAL_USART_StateTypeDef State; /*!< USART communication state */ +#if defined(USART_CR2_SLVEN) + uint32_t SlaveMode; /*!< Specifies if the UART SPI Slave mode is being used. + This parameter can be a value of @ref USARTEx_Slave_Mode. */ +#endif - __IO uint32_t ErrorCode; /*!< USART Error code */ + void (*RxISR)(struct __USART_HandleTypeDef *husart); /*!< Function pointer on Rx IRQ handler */ + + void (*TxISR)(struct __USART_HandleTypeDef *husart); /*!< Function pointer on Tx IRQ handler */ + + DMA_HandleTypeDef *hdmatx; /*!< USART Tx DMA Handle parameters */ + + DMA_HandleTypeDef *hdmarx; /*!< USART Rx DMA Handle parameters */ + + HAL_LockTypeDef Lock; /*!< Locking object */ + + __IO HAL_USART_StateTypeDef State; /*!< USART communication state */ + + __IO uint32_t ErrorCode; /*!< USART Error code */ }USART_HandleTypeDef; @@ -184,10 +211,10 @@ typedef struct /** @defgroup USART_Stop_Bits USART Number of Stop Bits * @{ */ -#define USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< USART frame with 0.5 stop bit */ -#define USART_STOPBITS_1 ((uint32_t)0x00000000) /*!< USART frame with 1 stop bit */ -#define USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< USART frame with 1.5 stop bits */ -#define USART_STOPBITS_2 USART_CR2_STOP_1 /*!< USART frame with 2 stop bits */ +#define USART_STOPBITS_0_5 USART_CR2_STOP_0 /*!< USART frame with 0.5 stop bit */ +#define USART_STOPBITS_1 0x00000000U /*!< USART frame with 1 stop bit */ +#define USART_STOPBITS_1_5 (USART_CR2_STOP_0 | USART_CR2_STOP_1) /*!< USART frame with 1.5 stop bits */ +#define USART_STOPBITS_2 USART_CR2_STOP_1 /*!< USART frame with 2 stop bits */ /** * @} */ @@ -195,19 +222,19 @@ typedef struct /** @defgroup USART_Parity USART Parity * @{ */ -#define USART_PARITY_NONE ((uint32_t)0x00000000) /*!< No parity */ -#define USART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) /*!< Even parity */ -#define USART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) /*!< Odd parity */ +#define USART_PARITY_NONE 0x00000000U /*!< No parity */ +#define USART_PARITY_EVEN USART_CR1_PCE /*!< Even parity */ +#define USART_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< Odd parity */ /** * @} */ /** @defgroup USART_Mode USART Mode * @{ - */ -#define USART_MODE_RX ((uint32_t)USART_CR1_RE) /*!< RX mode */ -#define USART_MODE_TX ((uint32_t)USART_CR1_TE) /*!< TX mode */ -#define USART_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) /*!< RX and TX mode */ + */ +#define USART_MODE_RX USART_CR1_RE /*!< RX mode */ +#define USART_MODE_TX USART_CR1_TE /*!< TX mode */ +#define USART_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< RX and TX mode */ /** * @} */ @@ -215,8 +242,8 @@ typedef struct /** @defgroup USART_Over_Sampling USART Over Sampling * @{ */ -#define USART_OVERSAMPLING_16 ((uint32_t)0x00000000) /*!< Oversampling by 16 */ -#define USART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) /*!< Oversampling by 8 */ +#define USART_OVERSAMPLING_16 0x00000000U /*!< Oversampling by 16 */ +#define USART_OVERSAMPLING_8 USART_CR1_OVER8 /*!< Oversampling by 8 */ /** * @} */ @@ -224,8 +251,8 @@ typedef struct /** @defgroup USART_Clock USART Clock * @{ */ -#define USART_CLOCK_DISABLE ((uint32_t)0x00000000) /*!< USART clock disable */ -#define USART_CLOCK_ENABLE ((uint32_t)USART_CR2_CLKEN) /*!< USART clock enable */ +#define USART_CLOCK_DISABLE 0x00000000U /*!< USART clock disable */ +#define USART_CLOCK_ENABLE USART_CR2_CLKEN /*!< USART clock enable */ /** * @} */ @@ -233,8 +260,8 @@ typedef struct /** @defgroup USART_Clock_Polarity USART Clock Polarity * @{ */ -#define USART_POLARITY_LOW ((uint32_t)0x00000000) /*!< USART Clock signal is steady Low */ -#define USART_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) /*!< USART Clock signal is steady High */ +#define USART_POLARITY_LOW 0x00000000U /*!< Driver enable signal is active high */ +#define USART_POLARITY_HIGH USART_CR2_CPOL /*!< Driver enable signal is active low */ /** * @} */ @@ -242,8 +269,8 @@ typedef struct /** @defgroup USART_Clock_Phase USART Clock Phase * @{ */ -#define USART_PHASE_1EDGE ((uint32_t)0x00000000) /*!< USART frame phase on first clock transition */ -#define USART_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) /*!< USART frame phase on second clock transition */ +#define USART_PHASE_1EDGE 0x00000000U /*!< USART frame phase on first clock transition */ +#define USART_PHASE_2EDGE USART_CR2_CPHA /*!< USART frame phase on second clock transition */ /** * @} */ @@ -251,17 +278,38 @@ typedef struct /** @defgroup USART_Last_Bit USART Last Bit * @{ */ -#define USART_LASTBIT_DISABLE ((uint32_t)0x00000000) /*!< USART frame last data bit clock pulse not output to SCLK pin */ -#define USART_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) /*!< USART frame last data bit clock pulse output to SCLK pin */ +#define USART_LASTBIT_DISABLE 0x00000000U /*!< USART frame last data bit clock pulse not output to SCLK pin */ +#define USART_LASTBIT_ENABLE USART_CR2_LBCL /*!< USART frame last data bit clock pulse output to SCLK pin */ /** * @} */ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup USART_ClockPrescaler USART Clock Prescaler + * @{ + */ +#define USART_PRESCALER_DIV1 0x00000000U /*!< fclk_pres = fclk */ +#define USART_PRESCALER_DIV2 0x00000001U /*!< fclk_pres = fclk/2 */ +#define USART_PRESCALER_DIV4 0x00000002U /*!< fclk_pres = fclk/4 */ +#define USART_PRESCALER_DIV6 0x00000003U /*!< fclk_pres = fclk/6 */ +#define USART_PRESCALER_DIV8 0x00000004U /*!< fclk_pres = fclk/8 */ +#define USART_PRESCALER_DIV10 0x00000005U /*!< fclk_pres = fclk/10 */ +#define USART_PRESCALER_DIV12 0x00000006U /*!< fclk_pres = fclk/12 */ +#define USART_PRESCALER_DIV16 0x00000007U /*!< fclk_pres = fclk/16 */ +#define USART_PRESCALER_DIV32 0x00000008U /*!< fclk_pres = fclk/32 */ +#define USART_PRESCALER_DIV64 0x00000009U /*!< fclk_pres = fclk/64 */ +#define USART_PRESCALER_DIV128 0x0000000AU /*!< fclk_pres = fclk/128 */ +#define USART_PRESCALER_DIV256 0x0000000BU /*!< fclk_pres = fclk/256 */ +/** + * @} + */ +#endif + /** @defgroup USART_Request_Parameters USART Request Parameters * @{ */ -#define USART_RXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_RXFRQ) /*!< Receive Data flush Request */ -#define USART_TXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_TXFRQ) /*!< Transmit data flush Request */ +#define USART_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive Data flush Request */ +#define USART_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush Request */ /** * @} */ @@ -271,20 +319,31 @@ typedef struct * - 0xXXXX : Flag mask in the ISR register * @{ */ -#define USART_FLAG_REACK ((uint32_t)0x00400000) /*!< USART receive enable acknowledge flag */ -#define USART_FLAG_TEACK ((uint32_t)0x00200000) /*!< USART transmit enable acknowledge flag */ -#define USART_FLAG_BUSY ((uint32_t)0x00010000) /*!< USART busy flag */ -#define USART_FLAG_CTS ((uint32_t)0x00000400) /*!< USART clear to send flag */ -#define USART_FLAG_CTSIF ((uint32_t)0x00000200) /*!< USART clear to send interrupt flag */ -#define USART_FLAG_LBDF ((uint32_t)0x00000100) /*!< USART LIN break detection flag */ -#define USART_FLAG_TXE ((uint32_t)0x00000080) /*!< USART transmit data register empty */ -#define USART_FLAG_TC ((uint32_t)0x00000040) /*!< USART transmission complete */ -#define USART_FLAG_RXNE ((uint32_t)0x00000020) /*!< USART read data register not empty */ -#define USART_FLAG_IDLE ((uint32_t)0x00000010) /*!< USART idle flag */ -#define USART_FLAG_ORE ((uint32_t)0x00000008) /*!< USART overrun error */ -#define USART_FLAG_NE ((uint32_t)0x00000004) /*!< USART noise error */ -#define USART_FLAG_FE ((uint32_t)0x00000002) /*!< USART frame error */ -#define USART_FLAG_PE ((uint32_t)0x00000001) /*!< USART parity error */ +#if defined(USART_CR1_FIFOEN) +#define USART_FLAG_TXFT USART_ISR_TXFT /*!< USART TXFIFO threshold flag */ +#define USART_FLAG_RXFT USART_ISR_RXFT /*!< USART RXFIFO threshold flag */ +#define USART_FLAG_RXFF USART_ISR_RXFF /*!< USART RXFIFO Full flag */ +#define USART_FLAG_TXFE USART_ISR_TXFE /*!< USART TXFIFO Empty flag */ +#define USART_FLAG_TXE USART_ISR_TXE_TXFNF /*!< USART transmit data register empty */ +#define USART_FLAG_TXFNF USART_ISR_TXE_TXFNF /*!< USART TXFIFO not full */ +#define USART_FLAG_RXNE USART_ISR_RXNE_RXFNE /*!< USART read data register not empty */ +#define USART_FLAG_RXFNE USART_ISR_RXNE_RXFNE /*!< USART RXFIFO not empty */ +#else +#define USART_FLAG_TXE USART_ISR_TXE /*!< USART transmit data register empty */ +#define USART_FLAG_RXNE USART_ISR_RXNE /*!< USART read data register not empty */ +#endif +#define USART_FLAG_REACK USART_ISR_REACK /*!< USART receive enable acknowledge flag */ +#define USART_FLAG_TEACK USART_ISR_TEACK /*!< USART transmit enable acknowledge flag */ +#define USART_FLAG_BUSY USART_ISR_BUSY /*!< USART busy flag */ +#define USART_FLAG_TC USART_ISR_TC /*!< USART transmission complete */ +#define USART_FLAG_IDLE USART_ISR_IDLE /*!< USART idle flag */ +#define USART_FLAG_ORE USART_ISR_ORE /*!< USART overrun error */ +#define USART_FLAG_NE USART_ISR_NE /*!< USART noise error */ +#define USART_FLAG_FE USART_ISR_FE /*!< USART frame error */ +#define USART_FLAG_PE USART_ISR_PE /*!< USART parity error */ +#if defined(USART_CR2_SLVEN) +#define USART_FLAG_UDR USART_ISR_UDR /*!< SPI slave underrun error flag */ +#endif /** * @} */ @@ -300,15 +359,24 @@ typedef struct * @{ */ -#define USART_IT_PE ((uint16_t)0x0028) /*!< USART parity error interruption */ -#define USART_IT_TXE ((uint16_t)0x0727) /*!< USART transmit data register empty interruption */ -#define USART_IT_TC ((uint16_t)0x0626) /*!< USART transmission complete interruption */ -#define USART_IT_RXNE ((uint16_t)0x0525) /*!< USART read data register not empty interruption */ -#define USART_IT_IDLE ((uint16_t)0x0424) /*!< USART idle interruption */ -#define USART_IT_ERR ((uint16_t)0x0060) /*!< USART error interruption */ -#define USART_IT_ORE ((uint16_t)0x0300) /*!< USART overrun error interruption */ -#define USART_IT_NE ((uint16_t)0x0200) /*!< USART noise error interruption */ -#define USART_IT_FE ((uint16_t)0x0100) /*!< USART frame error interruption */ +#define USART_IT_PE 0x0028U /*!< USART parity error interruption */ +#if defined(USART_CR1_FIFOEN) +#define USART_IT_TXFNF 0x0727U /*!< USART TX FIFO not full interruption */ +#define USART_IT_RXFNE 0x0525U /*!< USART RXFIFO not empty interruption */ +#define USART_IT_RXFF 0x183FU /*!< USART RXFIFO full interruption */ +#define USART_IT_TXFE 0x173EU /*!< USART TXFIFO empty interruption */ +#define USART_IT_RXFT 0x1A7CU /*!< USART RXFIFO threshold reached interruption */ +#define USART_IT_TXFT 0x1B77U /*!< USART TXFIFO threshold reached interruption */ +#endif +#define USART_IT_TXE 0x0727U /*!< USART transmit data register empty interruption */ +#define USART_IT_TC 0x0626U /*!< USART transmission complete interruption */ +#define USART_IT_RXNE 0x0525U /*!< USART read data register not empty interruption */ +#define USART_IT_IDLE 0x0424U /*!< USART idle interruption */ +#define USART_IT_ERR 0x0060U /*!< USART error interruption */ +#define USART_IT_ORE 0x0300U /*!< USART overrun error interruption */ +#define USART_IT_NE 0x0200U /*!< USART noise error interruption */ +#define USART_IT_FE 0x0100U /*!< USART frame error interruption */ + /** * @} */ @@ -316,21 +384,26 @@ typedef struct /** @defgroup USART_IT_CLEAR_Flags USART Interruption Clear Flags * @{ */ -#define USART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */ -#define USART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */ -#define USART_CLEAR_NEF USART_ICR_NCF /*!< Noise detected Clear Flag */ -#define USART_CLEAR_OREF USART_ICR_ORECF /*!< OverRun Error Clear Flag */ -#define USART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */ -#define USART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */ -#define USART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */ +#define USART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */ +#define USART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */ +#define USART_CLEAR_NEF USART_ICR_NECF /*!< Noise detected Clear Flag */ +#define USART_CLEAR_OREF USART_ICR_ORECF /*!< OverRun Error Clear Flag */ +#define USART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */ +#define USART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */ +#if defined(USART_CR1_FIFOEN) +#define USART_CLEAR_TXFECF USART_ICR_TXFECF /*!< TXFIFO Empty Clear Flag */ +#endif +#if defined(USART_CR2_SLVEN) +#define USART_CLEAR_UDRF USART_ICR_UDRCF /*!< SPI slave underrun error Clear Flag */ +#endif /** * @} */ /** @defgroup USART_Interruption_Mask USART Interruption Flags Mask * @{ - */ -#define USART_IT_MASK ((uint16_t)0x001F) /*!< USART interruptions flags mask */ + */ +#define USART_IT_MASK 0x001FU /*!< USART interruptions flags mask */ /** * @} */ @@ -345,22 +418,28 @@ typedef struct */ /** @brief Reset USART handle state. - * @param __HANDLE__: USART handle. + * @param __HANDLE__ USART handle. * @retval None */ #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET) /** @brief Check whether the specified USART flag is set or not. - * @param __HANDLE__: specifies the USART Handle - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the USART Handle + * @param __FLAG__ specifies the flag to check. * This parameter can be one of the following values: + * @arg @ref USART_FLAG_TXFT TXFIFO threshold flag + * @arg @ref USART_FLAG_RXFT RXFIFO threshold flag + * @arg @ref USART_FLAG_RXFF RXFIFO Full flag + * @arg @ref USART_FLAG_TXFE TXFIFO Empty flag * @arg @ref USART_FLAG_REACK Receive enable acknowledge flag * @arg @ref USART_FLAG_TEACK Transmit enable acknowledge flag * @arg @ref USART_FLAG_BUSY Busy flag - * @arg @ref USART_FLAG_CTS CTS Change flag + * @arg @ref USART_FLAG_UDR SPI slave underrun error flag * @arg @ref USART_FLAG_TXE Transmit data register empty flag + * @arg @ref USART_FLAG_TXFNF TXFIFO not full flag * @arg @ref USART_FLAG_TC Transmission Complete flag * @arg @ref USART_FLAG_RXNE Receive data register not empty flag + * @arg @ref USART_FLAG_RXFNE RXFIFO not empty flag * @arg @ref USART_FLAG_IDLE Idle Line detection flag * @arg @ref USART_FLAG_ORE OverRun Error flag * @arg @ref USART_FLAG_NE Noise Error flag @@ -371,137 +450,178 @@ typedef struct #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) /** @brief Clear the specified USART pending flag. - * @param __HANDLE__: specifies the USART Handle. - * @param __FLAG__: specifies the flag to check. + * @param __HANDLE__ specifies the USART Handle. + * @param __FLAG__ specifies the flag to check. * This parameter can be any combination of the following values: - * @arg @ref USART_CLEAR_PEF - * @arg @ref USART_CLEAR_FEF - * @arg @ref USART_CLEAR_NEF - * @arg @ref USART_CLEAR_OREF - * @arg @ref USART_CLEAR_IDLEF - * @arg @ref USART_CLEAR_TCF - * @arg @ref USART_CLEAR_CTSF + * @arg @ref USART_CLEAR_PEF Parity Error Clear Flag + * @arg @ref USART_CLEAR_FEF Framing Error Clear Flag + * @arg @ref USART_CLEAR_NEF Noise detected Clear Flag + * @arg @ref USART_CLEAR_OREF Overrun Error Clear Flag + * @arg @ref USART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref USART_CLEAR_TXFECF TXFIFO empty clear Flag + * @arg @ref USART_CLEAR_TCF Transmission Complete Clear Flag + * @arg @ref USART_CLEAR_UDRF SPI slave underrun error Clear Flag * @retval None */ #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) /** @brief Clear the USART PE pending flag. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_PEF) /** @brief Clear the USART FE pending flag. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_FEF) /** @brief Clear the USART NE pending flag. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_NEF) /** @brief Clear the USART ORE pending flag. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_OREF) /** @brief Clear the USART IDLE pending flag. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_IDLEF) -/** @brief Enable the specified USART interrupt. - * @param __HANDLE__: specifies the USART Handle. - * @param __INTERRUPT__: specifies the USART interrupt source to enable. - * This parameter can be one of the following values: - * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref USART_IT_TC Transmission complete interrupt - * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref USART_IT_IDLE Idle line detection interrupt - * @arg @ref USART_IT_PE Parity Error interrupt - * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) +#if defined(USART_CR1_FIFOEN) +/** @brief Clear the USART TX FIFO empty clear flag. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ -#define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((__INTERRUPT__) & 0xFF) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ - ((((__INTERRUPT__) & 0xFF) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ +#define __HAL_USART_CLEAR_TXFECF(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_TXFECF) +#endif + +#if defined(USART_CR2_SLVEN) +/** @brief Clear SPI slave underrun error flag. + * @param __HANDLE__ specifies the USART Handle. + * @retval None + */ +#define __HAL_USART_CLEAR_UDRFLAG(__HANDLE__) __HAL_USART_CLEAR_FLAG((__HANDLE__), USART_CLEAR_UDRF) +#endif + +/** @brief Enable the specified USART interrupt. + * @param __HANDLE__ specifies the USART Handle. + * @param __INTERRUPT__ specifies the USART interrupt source to enable. + * This parameter can be one of the following values: + * @arg @ref USART_IT_RXFF RXFIFO Full interrupt + * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref USART_IT_TC Transmission complete interrupt + * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref USART_IT_IDLE Idle line detection interrupt + * @arg @ref USART_IT_PE Parity Error interrupt + * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) + * @retval None + */ +#define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 |= (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ ((__HANDLE__)->Instance->CR3 |= (1U << ((__INTERRUPT__) & USART_IT_MASK)))) /** @brief Disable the specified USART interrupt. - * @param __HANDLE__: specifies the USART Handle. - * @param __INTERRUPT__: specifies the USART interrupt source to disable. + * @param __HANDLE__ specifies the USART Handle. + * @param __INTERRUPT__ specifies the USART interrupt source to disable. * This parameter can be one of the following values: - * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref USART_IT_TC Transmission complete interrupt - * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref USART_IT_IDLE Idle line detection interrupt - * @arg @ref USART_IT_PE Parity Error interrupt - * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) + * @arg @ref USART_IT_RXFF RXFIFO Full interrupt + * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref USART_IT_TC Transmission complete interrupt + * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref USART_IT_IDLE Idle line detection interrupt + * @arg @ref USART_IT_PE Parity Error interrupt + * @arg @ref USART_IT_ERR Error interrupt(Frame error, noise error, overrun error) * @retval None */ -#define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((__INTERRUPT__) & 0xFF) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ - ((((__INTERRUPT__) & 0xFF) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ +#define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((uint8_t)(__INTERRUPT__)) >> 5U) == 1)? ((__HANDLE__)->Instance->CR1 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ + ((((uint8_t)(__INTERRUPT__)) >> 5U) == 2)? ((__HANDLE__)->Instance->CR2 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK))): \ ((__HANDLE__)->Instance->CR3 &= ~ (1U << ((__INTERRUPT__) & USART_IT_MASK)))) /** @brief Check whether the specified USART interrupt has occurred or not. - * @param __HANDLE__: specifies the USART Handle. - * @param __IT__: specifies the USART interrupt source to check. + * @param __HANDLE__ specifies the USART Handle. + * @param __INTERRUPT__ specifies the USART interrupt source to check. * This parameter can be one of the following values: - * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref USART_IT_TC Transmission complete interrupt - * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref USART_IT_IDLE Idle line detection interrupt - * @arg @ref USART_IT_ORE OverRun Error interrupt - * @arg @ref USART_IT_NE Noise Error interrupt - * @arg @ref USART_IT_FE Framing Error interrupt - * @arg @ref USART_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref USART_IT_RXFF RXFIFO Full interrupt + * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref USART_IT_TC Transmission complete interrupt + * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref USART_IT_IDLE Idle line detection interrupt + * @arg @ref USART_IT_ORE OverRun Error interrupt + * @arg @ref USART_IT_NE Noise Error interrupt + * @arg @ref USART_IT_FE Framing Error interrupt + * @arg @ref USART_IT_PE Parity Error interrupt + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_USART_GET_IT(__HANDLE__, __IT__) ((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__IT__)>> 0x08))) +#define __HAL_USART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & ((uint32_t)1 << ((__INTERRUPT__)>> 0x08))) != RESET) ? SET : RESET) /** @brief Check whether the specified USART interrupt source is enabled or not. - * @param __HANDLE__: specifies the USART Handle. - * @param __IT__: specifies the USART interrupt source to check. + * @param __HANDLE__ specifies the USART Handle. + * @param __INTERRUPT__ specifies the USART interrupt source to check. * This parameter can be one of the following values: - * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt - * @arg @ref USART_IT_TC Transmission complete interrupt - * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt - * @arg @ref USART_IT_IDLE Idle line detection interrupt - * @arg @ref USART_IT_ORE OverRun Error interrupt - * @arg @ref USART_IT_NE Noise Error interrupt - * @arg @ref USART_IT_FE Framing Error interrupt - * @arg @ref USART_IT_PE Parity Error interrupt - * @retval The new state of __IT__ (TRUE or FALSE). + * @arg @ref USART_IT_RXFF RXFIFO Full interrupt + * @arg @ref USART_IT_TXFE TXFIFO Empty interrupt + * @arg @ref USART_IT_RXFT RXFIFO threshold interrupt + * @arg @ref USART_IT_TXFT TXFIFO threshold interrupt + * @arg @ref USART_IT_TXE Transmit Data Register empty interrupt + * @arg @ref USART_IT_TXFNF TX FIFO not full interrupt + * @arg @ref USART_IT_TC Transmission complete interrupt + * @arg @ref USART_IT_RXNE Receive Data register not empty interrupt + * @arg @ref USART_IT_RXFNE RXFIFO not empty interrupt + * @arg @ref USART_IT_IDLE Idle line detection interrupt + * @arg @ref USART_IT_ORE OverRun Error interrupt + * @arg @ref USART_IT_NE Noise Error interrupt + * @arg @ref USART_IT_FE Framing Error interrupt + * @arg @ref USART_IT_PE Parity Error interrupt + * @retval The new state of __INTERRUPT__ (SET or RESET). */ -#define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) ((((((uint8_t)(__IT__)) >> 5) == 1)? (__HANDLE__)->Instance->CR1:(((((uint8_t)(__IT__)) >> 5) == 2)? \ - (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & ((uint32_t)1 << \ - (((uint16_t)(__IT__)) & USART_IT_MASK))) +#define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x01U) ? (__HANDLE__)->Instance->CR1 : \ + (((((uint8_t)(__INTERRUPT__)) >> 0x05U) == 0x02U) ? (__HANDLE__)->Instance->CR2 : \ + (__HANDLE__)->Instance->CR3)) & (0x01U << (((uint16_t)(__INTERRUPT__)) & USART_IT_MASK))) != RESET) ? SET : RESET) /** @brief Clear the specified USART ISR flag, in setting the proper ICR register flag. - * @param __HANDLE__: specifies the USART Handle. - * @param __IT_CLEAR__: specifies the interrupt clear register flag that needs to be set + * @param __HANDLE__ specifies the USART Handle. + * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set * to clear the corresponding interrupt. * This parameter can be one of the following values: - * @arg @ref USART_CLEAR_PEF Parity Error Clear Flag - * @arg @ref USART_CLEAR_FEF Framing Error Clear Flag - * @arg @ref USART_CLEAR_NEF Noise detected Clear Flag - * @arg @ref USART_CLEAR_OREF OverRun Error Clear Flag - * @arg @ref USART_CLEAR_IDLEF IDLE line detected Clear Flag - * @arg @ref USART_CLEAR_TCF Transmission Complete Clear Flag - * @arg @ref USART_CLEAR_CTSF CTS Interrupt Clear Flag + * @arg @ref USART_CLEAR_PEF Parity Error Clear Flag + * @arg @ref USART_CLEAR_FEF Framing Error Clear Flag + * @arg @ref USART_CLEAR_NEF Noise detected Clear Flag + * @arg @ref USART_CLEAR_OREF Overrun Error Clear Flag + * @arg @ref USART_CLEAR_IDLEF IDLE line detected Clear Flag + * @arg @ref USART_CLEAR_TXFECF TXFIFO empty clear Flag + * @arg @ref USART_CLEAR_TCF Transmission Complete Clear Flag * @retval None */ #define __HAL_USART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__)) /** @brief Set a specific USART request flag. - * @param __HANDLE__: specifies the USART Handle. - * @param __REQ__: specifies the request flag to set. + * @param __HANDLE__ specifies the USART Handle. + * @param __REQ__ specifies the request flag to set. * This parameter can be one of the following values: * @arg @ref USART_RXDATA_FLUSH_REQUEST Receive Data flush Request * @arg @ref USART_TXDATA_FLUSH_REQUEST Transmit data flush Request @@ -511,49 +631,81 @@ typedef struct #define __HAL_USART_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (__REQ__)) /** @brief Enable the USART one bit sample method. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None - */ + */ #define __HAL_USART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) /** @brief Disable the USART one bit sample method. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None - */ -#define __HAL_USART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT)) + */ +#define __HAL_USART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= ~USART_CR3_ONEBIT) /** @brief Enable USART. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ -#define __HAL_USART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) +#define __HAL_USART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) /** @brief Disable USART. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None */ -#define __HAL_USART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) +#define __HAL_USART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) /** * @} */ +/* Private variables -----------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup USART_Private_Variables USART Private Variables + * @{ + */ +static const uint16_t USARTPrescTable[12] = {1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256}; +/** + * @} + */ +#endif + /* Private macros --------------------------------------------------------*/ /** @defgroup USART_Private_Macros USART Private Macros * @{ */ -/** @brief Check USART Baud rate. - * @param __BAUDRATE__: Baudrate specified by the user. - * The maximum Baud Rate is derived from the maximum clock on L4 (i.e. 80 MHz) - * divided by the smallest oversampling used on the USART (i.e. 8). - * @retval Test result (TRUE or FALSE). +#if defined(USART_PRESC_PRESCALER) +/** @brief BRR division operation to set BRR register in 8-bit oversampling mode. + * @param __PCLK__ USART clock. + * @param __BAUD__ Baud rate set by the user. + * @param __CLOCKPRESCALER__ UART prescaler value. + * @retval Division result */ -#define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 10000001) +#define USART_DIV_SAMPLING8(__PCLK__, __BAUD__, __CLOCKPRESCALER__) (((((__PCLK__)/USARTPrescTable[(__CLOCKPRESCALER__)])*2) + ((__BAUD__)/2)) / (__BAUD__)) +#else +/** @brief BRR division operation to set BRR register in 8-bit oversampling mode. + * @param __PCLK__ USART clock. + * @param __BAUD__ Baud rate set by the user. + * @retval Division result + */ +#define USART_DIV_SAMPLING8(__PCLK__, __BAUD__) ((((__PCLK__)*2) + ((__BAUD__)/2)) / (__BAUD__)) +#endif + +/** @brief Check USART Baud rate. + * @param __BAUDRATE__ Baudrate specified by the user. + * The maximum Baud Rate is derived from the maximum clock on L4 + * divided by the smallest oversampling used on the USART (i.e. 8) + * (i.e. 120 MHz on STM32L4Rx/L4Sx, 80 Mhz otherwise) + * @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid) */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 15000001U) +#else +#define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 10000001U) +#endif /** * @brief Ensure that USART frame number of stop bits is valid. - * @param __STOPBITS__: USART frame number of stop bits. + * @param __STOPBITS__ USART frame number of stop bits. * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) */ #define IS_USART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == USART_STOPBITS_0_5) || \ @@ -563,23 +715,23 @@ typedef struct /** * @brief Ensure that USART frame parity is valid. - * @param __PARITY__: USART frame parity. + * @param __PARITY__ USART frame parity. * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) */ #define IS_USART_PARITY(__PARITY__) (((__PARITY__) == USART_PARITY_NONE) || \ ((__PARITY__) == USART_PARITY_EVEN) || \ - ((__PARITY__) == USART_PARITY_ODD)) + ((__PARITY__) == USART_PARITY_ODD)) /** * @brief Ensure that USART communication mode is valid. - * @param __MODE__: USART communication mode. + * @param __MODE__ USART communication mode. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) */ #define IS_USART_MODE(__MODE__) ((((__MODE__) & (uint32_t)0xFFFFFFF3U) == 0x00U) && ((__MODE__) != (uint32_t)0x00U)) /** * @brief Ensure that USART oversampling is valid. - * @param __SAMPLING__: USART oversampling. + * @param __SAMPLING__ USART oversampling. * @retval SET (__SAMPLING__ is valid) or RESET (__SAMPLING__ is invalid) */ #define IS_USART_OVERSAMPLING(__SAMPLING__) (((__SAMPLING__) == USART_OVERSAMPLING_16) || \ @@ -587,7 +739,7 @@ typedef struct /** * @brief Ensure that USART clock state is valid. - * @param __CLOCK__: USART clock state. + * @param __CLOCK__ USART clock state. * @retval SET (__CLOCK__ is valid) or RESET (__CLOCK__ is invalid) */ #define IS_USART_CLOCK(__CLOCK__) (((__CLOCK__) == USART_CLOCK_DISABLE) || \ @@ -595,21 +747,21 @@ typedef struct /** * @brief Ensure that USART frame polarity is valid. - * @param __CPOL__: USART frame polarity. + * @param __CPOL__ USART frame polarity. * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid) */ #define IS_USART_POLARITY(__CPOL__) (((__CPOL__) == USART_POLARITY_LOW) || ((__CPOL__) == USART_POLARITY_HIGH)) /** * @brief Ensure that USART frame phase is valid. - * @param __CPHA__: USART frame phase. + * @param __CPHA__ USART frame phase. * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid) */ #define IS_USART_PHASE(__CPHA__) (((__CPHA__) == USART_PHASE_1EDGE) || ((__CPHA__) == USART_PHASE_2EDGE)) /** * @brief Ensure that USART frame last bit clock pulse setting is valid. - * @param __LASTBIT__: USART frame last bit clock pulse setting. + * @param __LASTBIT__ USART frame last bit clock pulse setting. * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid) */ #define IS_USART_LASTBIT(__LASTBIT__) (((__LASTBIT__) == USART_LASTBIT_DISABLE) || \ @@ -617,12 +769,32 @@ typedef struct /** * @brief Ensure that USART request parameter is valid. - * @param __PARAM__: USART request parameter. + * @param __PARAM__ USART request parameter. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) */ #define IS_USART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == USART_RXDATA_FLUSH_REQUEST) || \ ((__PARAM__) == USART_TXDATA_FLUSH_REQUEST)) +#if defined(USART_PRESC_PRESCALER) +/** + * @brief Ensure that USART Prescaler is valid. + * @param __CLOCKPRESCALER__ USART Prescaler value. + * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid) + */ +#define IS_USART_PRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == USART_PRESCALER_DIV1) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV2) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV4) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV6) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV8) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV10) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV12) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV16) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV32) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV64) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV128) || \ + ((__CLOCKPRESCALER__) == USART_PRESCALER_DIV256)) + +#endif /** * @} */ @@ -671,20 +843,18 @@ HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart); HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart); void HAL_USART_IRQHandler(USART_HandleTypeDef *husart); -void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart); void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart); +void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart); void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart); void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart); void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart); void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart); -void HAL_USART_AbortCpltCallback (USART_HandleTypeDef *husart); +void HAL_USART_AbortCpltCallback(USART_HandleTypeDef *husart); /** * @} */ -/* Peripheral Control functions ***********************************************/ - /** @addtogroup USART_Exported_Functions_Group4 Peripheral State and Error functions * @{ */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.c new file mode 100644 index 0000000000..d2b1b3d70f --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.c @@ -0,0 +1,551 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_usart_ex.c + * @author MCD Application Team + * @brief Extended USART HAL module driver. + * This file provides firmware functions to manage the following extended + * functionalities of the Universal Synchronous Receiver Transmitter Peripheral (USART). + * + Peripheral Control functions + * + * + @verbatim + ============================================================================== + ##### USART peripheral extended features ##### + ============================================================================== + + (#) FIFO mode enabling/disabling and RX/TX FIFO threshold programming. + + -@- When USART operates in FIFO mode, FIFO mode must be enabled prior + starting RX/TX transfers. Also RX/TX FIFO thresholds must be + configured prior starting RX/TX transfers. + + (#) Slave mode enabling/disabling and NSS pin configuration. + + -@- When USART operates in Slave mode, Slave mode must be enabled prior + starting RX/TX transfers. + + @endverbatim + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +/** @defgroup USARTEx USARTEx + * @brief USART Extended HAL module driver + * @{ + */ + +#ifdef HAL_USART_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +#if defined(USART_CR1_FIFOEN) +/** @defgroup USARTEx_Private_Functions USARTEx Private Functions + * @{ + */ +static void USARTEx_SetNbDataToProcess(USART_HandleTypeDef *husart); +/** + * @} + */ +#endif + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup USARTEx_Exported_Functions USARTEx Exported Functions + * @{ + */ + +/** @defgroup USARTEx_Exported_Functions_Group2 IO operation functions + * @brief Extended USART Transmit/Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + This subsection provides a set of FIFO mode related callback functions. + + (#) TX/RX Fifos Callbacks: + (+) HAL_USARTEx_RxFifoFullCallback() + (+) HAL_USARTEx_TxFifoEmptyCallback() + +@endverbatim + * @{ + */ + +#if defined(USART_CR1_FIFOEN) +/** + * @brief USART RX Fifo full callback. + * @param husart USART handle. + * @retval None + */ +__weak void HAL_USARTEx_RxFifoFullCallback (USART_HandleTypeDef *husart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(husart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_USARTEx_RxFifoFullCallback can be implemented in the user file. + */ +} + +/** + * @brief USART TX Fifo empty callback. + * @param husart USART handle. + * @retval None + */ +__weak void HAL_USARTEx_TxFifoEmptyCallback (USART_HandleTypeDef *husart) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(husart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_USARTEx_TxFifoEmptyCallback can be implemented in the user file. + */ +} +#endif + +/** + * @} + */ + +/** @defgroup USARTEx_Exported_Functions_Group3 Peripheral Control functions + * @brief Extended Peripheral Control functions + * +@verbatim + =============================================================================== + ##### Peripheral Control functions ##### + =============================================================================== + [..] This section provides the following functions: + (+) HAL_USARTEx_EnableSPISlaveMode() API enables the SPI slave mode + (+) HAL_USARTEx_DisableSPISlaveMode() API disables the SPI slave mode + (+) HAL_USARTEx_ConfigNSS API configures the Slave Select input pin (NSS) + (+) HAL_USARTEx_EnableFifoMode() API enables the FIFO mode + (+) HAL_USARTEx_DisableFifoMode() API disables the FIFO mode + (+) HAL_USARTEx_SetTxFifoThreshold() API sets the TX FIFO threshold + (+) HAL_USARTEx_SetRxFifoThreshold() API sets the RX FIFO threshold + + +@endverbatim + * @{ + */ + +#if defined(USART_CR2_SLVEN) +/** + * @brief Enable the SPI slave mode. + * @note When the USART operates in SPI slave mode, it handles data flow using + * the serial interface clock derived from the external SCLK signal + * provided by the external master SPI device. + * @note In SPI slave mode, the USART must be enabled before starting the master + * communications (or between frames while the clock is stable). Otherwise, + * if the USART slave is enabled while the master is in the middle of a + * frame, it will become desynchronized with the master. + * @note The data register of the slave needs to be ready before the first edge + * of the communication clock or before the end of the ongoing communication, + * otherwise the SPI slave will transmit zeros. + * @param husart USART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_EnableSlaveMode(USART_HandleTypeDef *husart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(husart->Instance)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* In SPI slave mode mode, the following bits must be kept cleared: + - LINEN and CLKEN bit in the USART_CR2 register + - HDSEL, SCEN and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(husart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + CLEAR_BIT(husart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + + /* Enable SPI slave mode */ + SET_BIT(husart->Instance->CR2, USART_CR2_SLVEN); + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->SlaveMode = USART_SLAVEMODE_ENABLE; + + husart->State = HAL_USART_STATE_READY; + + /* Enable USART */ + __HAL_USART_ENABLE(husart); + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} + +/** + * @brief Disable the SPI slave mode. + * @param husart USART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_DisableSlaveMode(USART_HandleTypeDef *husart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(husart->Instance)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Disable SPI slave mode */ + CLEAR_BIT(husart->Instance->CR2, USART_CR2_SLVEN); + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->SlaveMode = USART_SLAVEMODE_ENABLE; + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} + +/** + * @brief Configure the Slave Select input pin (NSS). + * @note Software NSS management: SPI slave will always be selected and NSS + * input pin will be ignored. + * @note Hardware NSS management: the SPI slave selection depends on NSS + * input pin. The slave is selected when NSS is low and deselected when + * NSS is high. + * @param husart USART handle. + * @param NSSConfig NSS configuration. + * This parameter can be one of the following values: + * @arg @ref USART_NSS_HARD + * @arg @ref USART_NSS_SOFT + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_ConfigNSS(USART_HandleTypeDef *husart, uint32_t NSSConfig) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_SPI_SLAVE_INSTANCE(husart->Instance)); + assert_param(IS_USART_NSS(NSSConfig)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Program DIS_NSS bit in the USART_CR2 register */ + MODIFY_REG(husart->Instance->CR2, USART_CR2_DIS_NSS, NSSConfig); + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} +#endif + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Enable the FIFO mode. + * @param husart USART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_EnableFifoMode(USART_HandleTypeDef *husart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(husart->Instance)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Enable FIFO mode */ + SET_BIT(tmpcr1, USART_CR1_FIFOEN); + husart->FifoMode = USART_FIFOMODE_ENABLE; + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + /* Determine the number of data to process during RX/TX ISR execution */ + USARTEx_SetNbDataToProcess(husart); + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} + +/** + * @brief Disable the FIFO mode. + * @param husart USART handle. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_DisableFifoMode(USART_HandleTypeDef *husart) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(husart->Instance)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Enable FIFO mode */ + CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN); + husart->FifoMode = USART_FIFOMODE_DISABLE; + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} + +/** + * @brief Set the TXFIFO threshold. + * @param husart USART handle. + * @param Threshold TX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref USART_TXFIFO_THRESHOLD_1_8 + * @arg @ref USART_TXFIFO_THRESHOLD_1_4 + * @arg @ref USART_TXFIFO_THRESHOLD_1_2 + * @arg @ref USART_TXFIFO_THRESHOLD_3_4 + * @arg @ref USART_TXFIFO_THRESHOLD_7_8 + * @arg @ref USART_TXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_SetTxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check parameters */ + assert_param(IS_UART_FIFO_INSTANCE(husart->Instance)); + assert_param(IS_USART_TXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Update TX threshold configuration */ + MODIFY_REG(husart->Instance->CR3, USART_CR3_TXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + USARTEx_SetNbDataToProcess(husart); + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} + +/** + * @brief Set the RXFIFO threshold. + * @param husart USART handle. + * @param Threshold RX FIFO threshold value + * This parameter can be one of the following values: + * @arg @ref USART_RXFIFO_THRESHOLD_1_8 + * @arg @ref USART_RXFIFO_THRESHOLD_1_4 + * @arg @ref USART_RXFIFO_THRESHOLD_1_2 + * @arg @ref USART_RXFIFO_THRESHOLD_3_4 + * @arg @ref USART_RXFIFO_THRESHOLD_7_8 + * @arg @ref USART_RXFIFO_THRESHOLD_8_8 + * @retval HAL status + */ +HAL_StatusTypeDef HAL_USARTEx_SetRxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold) +{ + uint32_t tmpcr1 = 0; + + /* Check the parameters */ + assert_param(IS_UART_FIFO_INSTANCE(husart->Instance)); + assert_param(IS_USART_RXFIFO_THRESHOLD(Threshold)); + + /* Process Locked */ + __HAL_LOCK(husart); + + husart->State = HAL_USART_STATE_BUSY; + + /* Save actual USART configuration */ + tmpcr1 = READ_REG(husart->Instance->CR1); + + /* Disable USART */ + __HAL_USART_DISABLE(husart); + + /* Update RX threshold configuration */ + MODIFY_REG(husart->Instance->CR3, USART_CR3_RXFTCFG, Threshold); + + /* Determine the number of data to process during RX/TX ISR execution */ + USARTEx_SetNbDataToProcess(husart); + + /* Restore USART configuration */ + WRITE_REG(husart->Instance->CR1, tmpcr1); + + husart->State = HAL_USART_STATE_READY; + + /* Process Unlocked */ + __HAL_UNLOCK(husart); + + return HAL_OK; +} +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** @addtogroup USARTEx_Private_Functions + * @{ + */ + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Calculate the number of data to process in RX/TX ISR. + * @note The RX FIFO depth and the TX FIFO depth is extracted from + * the USART configuration registers. + * @param husart USART handle. + * @retval None + */ +void USARTEx_SetNbDataToProcess(USART_HandleTypeDef *husart) +{ + uint8_t rx_fifo_depth; + uint8_t tx_fifo_depth; + uint8_t rx_fifo_threshold; + uint8_t tx_fifo_threshold; + uint8_t numerator[] = {1, 1, 1, 3, 7, 1}; + uint8_t denominator[] = {8, 4, 2, 4, 8, 1}; + + if (husart->FifoMode == USART_FIFOMODE_DISABLE) + { + husart->NbTxDataToProcess = 1; + husart->NbRxDataToProcess = 1; + } + else + { + rx_fifo_depth = 8; /* RX Fifo size */ + tx_fifo_depth = 8; /* TX Fifo size */ + rx_fifo_threshold = (uint8_t)(READ_BIT(husart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos); + tx_fifo_threshold = (uint8_t)(READ_BIT(husart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos); + husart->NbTxDataToProcess = (uint8_t)(tx_fifo_depth * numerator[tx_fifo_threshold])/denominator[tx_fifo_threshold]; + husart->NbRxDataToProcess = (uint8_t)(rx_fifo_depth * numerator[rx_fifo_threshold])/denominator[rx_fifo_threshold]; + } +} +#endif +/** + * @} + */ + +#endif /* HAL_USART_MODULE_ENABLED */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.h index cf01f07631..bea5add84f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_usart_ex.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_usart_ex.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of USART HAL Extended module. ****************************************************************************** * @attention @@ -63,18 +61,86 @@ /** @defgroup USARTEx_Word_Length USARTEx Word Length * @{ */ -#define USART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long USART frame */ -#define USART_WORDLENGTH_8B ((uint32_t)0x00000000) /*!< 8-bit long USART frame */ -#define USART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long USART frame */ +#define USART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long USART frame */ +#define USART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long USART frame */ +#define USART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long USART frame */ /** * @} */ +#if defined(USART_CR2_SLVEN) +/** @defgroup USARTEx_Slave_Select_management USARTEx Slave Select Management + * @{ + */ +#define USART_NSS_HARD 0x00000000U /*!< SPI slave selection depends on NSS input pin */ +#define USART_NSS_SOFT USART_CR2_DIS_NSS /*!< SPI slave is always selected and NSS input pin is ignored */ +/** + * @} + */ +#endif + +#if defined(USART_CR1_FIFOEN) +/** @defgroup USARTEx_TXFIFO_threshold_level USARTEx TXFIFO threshold level + * @brief USART TXFIFO level + * @{ + */ +#define USART_TXFIFO_THRESHOLD_1_8 0x00000000U /*!< TXFIFO reaches 1/8 of its depth */ +#define USART_TXFIFO_THRESHOLD_1_4 USART_CR3_TXFTCFG_0 /*!< TXFIFO reaches 1/4 of its depth */ +#define USART_TXFIFO_THRESHOLD_1_2 USART_CR3_TXFTCFG_1 /*!< TXFIFO reaches 1/2 of its depth */ +#define USART_TXFIFO_THRESHOLD_3_4 (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1) /*!< TXFIFO reaches 3/4 of its depth */ +#define USART_TXFIFO_THRESHOLD_7_8 USART_CR3_TXFTCFG_2 /*!< TXFIFO reaches 7/8 of its depth */ +#define USART_TXFIFO_THRESHOLD_8_8 (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0) /*!< TXFIFO becomes empty */ +/** + * @} + */ + +/** @defgroup USARTEx_RXFIFO_threshold_level USARTEx RXFIFO threshold level + * @brief USART RXFIFO level + * @{ + */ +#define USART_RXFIFO_THRESHOLD_1_8 0x00000000U /*!< RXFIFO FIFO reaches 1/8 of its depth */ +#define USART_RXFIFO_THRESHOLD_1_4 USART_CR3_RXFTCFG_0 /*!< RXFIFO FIFO reaches 1/4 of its depth */ +#define USART_RXFIFO_THRESHOLD_1_2 USART_CR3_RXFTCFG_1 /*!< RXFIFO FIFO reaches 1/2 of its depth */ +#define USART_RXFIFO_THRESHOLD_3_4 (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1) /*!< RXFIFO FIFO reaches 3/4 of its depth */ +#define USART_RXFIFO_THRESHOLD_7_8 USART_CR3_RXFTCFG_2 /*!< RXFIFO FIFO reaches 7/8 of its depth */ +#define USART_RXFIFO_THRESHOLD_8_8 (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0) /*!< RXFIFO FIFO becomes full */ +/** + * @} + */ +#endif + /** * @} */ -/* Exported functions --------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup USARTEx_Private_Constants USARTEx Private Constants + * @{ + */ +#if defined(USART_CR2_SLVEN) +/** @defgroup USARTEx_Slave_Mode USARTEx Synchronous Slave mode + * @{ + */ +#define USART_SLAVEMODE_DISABLE 0x00000000U /*!< USART SPI Slave Mode Enable */ +#define USART_SLAVEMODE_ENABLE USART_CR2_SLVEN /*!< USART SPI Slave Mode Disable */ +/** + * @} + */ +#endif + +#if defined(USART_CR1_FIFOEN) +/** @defgroup USARTEx_FIFO_mode USARTEx FIFO mode + * @{ + */ +#define USART_FIFOMODE_DISABLE 0x00000000U /*!< FIFO mode disable */ +#define USART_FIFOMODE_ENABLE USART_CR1_FIFOEN /*!< FIFO mode enable */ +/** + * @} + */ +#endif +/** + * @} + */ /* Private macros ------------------------------------------------------------*/ /** @defgroup USARTEx_Private_Macros USARTEx Private Macros @@ -207,7 +273,7 @@ * by the reception API(). * This masking operation is not carried out in the case of * DMA transfers. - * @param __HANDLE__: specifies the USART Handle. + * @param __HANDLE__ specifies the USART Handle. * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field. */ #define USART_MASK_COMPUTATION(__HANDLE__) \ @@ -250,18 +316,96 @@ /** * @brief Ensure that USART frame length is valid. - * @param __LENGTH__: USART frame length. + * @param __LENGTH__ USART frame length. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) */ #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \ ((__LENGTH__) == USART_WORDLENGTH_8B) || \ ((__LENGTH__) == USART_WORDLENGTH_9B)) +#if defined(USART_CR2_SLVEN) +/** + * @brief Ensure that USART Negative Slave Select (NSS) pin management is valid. + * @param __NSS__ USART Negative Slave Select pin management. + * @retval SET (__NSS__ is valid) or RESET (__NSS__ is invalid) + */ +#define IS_USART_NSS(__NSS__) (((__NSS__) == USART_NSS_HARD) || \ + ((__NSS__) == USART_NSS_SOFT)) +#endif + +#if defined(USART_CR1_FIFOEN) +/** + * @brief Ensure that USART TXFIFO threshold level is valid. + * @param __THRESHOLD__ USART TXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_USART_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == USART_TXFIFO_THRESHOLD_8_8)) + +/** + * @brief Ensure that USART RXFIFO threshold level is valid. + * @param __THRESHOLD__ USART RXFIFO threshold level. + * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid) + */ +#define IS_USART_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_8) || \ + ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_4) || \ + ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_1_2) || \ + ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_3_4) || \ + ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_7_8) || \ + ((__THRESHOLD__) == USART_RXFIFO_THRESHOLD_8_8)) +#endif /** * @} */ /* Exported functions --------------------------------------------------------*/ +/** @addtogroup USARTEx_Exported_Functions + * @{ + */ + +/** @addtogroup USARTEx_Exported_Functions_Group2 + * @{ + */ + +/* IO operation functions *****************************************************/ +#if defined(USART_CR1_FIFOEN) +void HAL_USARTEx_RxFifoFullCallback(USART_HandleTypeDef *husart); +void HAL_USARTEx_TxFifoEmptyCallback(USART_HandleTypeDef *husart); +#endif + +/** + * @} + */ + +/** @addtogroup USARTEx_Exported_Functions_Group3 + * @{ + */ + +/* Peripheral Control functions ***********************************************/ +#if defined(USART_CR2_SLVEN) +HAL_StatusTypeDef HAL_USARTEx_EnableSlaveMode(USART_HandleTypeDef *husart); +HAL_StatusTypeDef HAL_USARTEx_DisableSlaveMode(USART_HandleTypeDef *husart); +HAL_StatusTypeDef HAL_USARTEx_ConfigNSS(USART_HandleTypeDef *husart, uint32_t NSSConfig); +#endif + +#if defined(USART_CR1_FIFOEN) +HAL_StatusTypeDef HAL_USARTEx_EnableFifoMode(USART_HandleTypeDef *husart); +HAL_StatusTypeDef HAL_USARTEx_DisableFifoMode(USART_HandleTypeDef *husart); +HAL_StatusTypeDef HAL_USARTEx_SetTxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); +HAL_StatusTypeDef HAL_USARTEx_SetRxFifoThreshold(USART_HandleTypeDef *husart, uint32_t Threshold); +#endif + +/** + * @} + */ + +/** + * @} + */ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.c index 5e8ce3077a..ce4a280195 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_wwdg.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief WWDG HAL module driver. * This file provides firmware functions to manage the following * functionalities of the Window Watchdog (WWDG) peripheral: diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.h index 7039355348..75759788f5 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_wwdg.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_hal_wwdg.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of WWDG HAL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.c index 1a309d0f68..ead41c287d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_adc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief ADC LL module driver ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.h index 52c31cb96f..f859f8783a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_adc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_adc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of ADC LL module. ****************************************************************************** * @attention @@ -77,6 +75,9 @@ extern "C" { #define ADC_SQR4_REGOFFSET (0x00000300U) #define ADC_REG_SQRX_REGOFFSET_MASK (ADC_SQR1_REGOFFSET | ADC_SQR2_REGOFFSET | ADC_SQR3_REGOFFSET | ADC_SQR4_REGOFFSET) +#if defined(CORE_CM0PLUS) +#define ADC_SQRX_REGOFFSET_POS (8U) /* Position of bits ADC_SQRx_REGOFFSET in ADC_REG_SQRX_REGOFFSET_MASK */ +#endif #define ADC_REG_RANK_ID_SQRX_MASK (ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0) /* Definition of ADC group regular sequencer bits information to be inserted */ @@ -114,6 +115,9 @@ extern "C" { #define ADC_INJ_JDRX_REGOFFSET_MASK (ADC_JDR1_REGOFFSET | ADC_JDR2_REGOFFSET | ADC_JDR3_REGOFFSET | ADC_JDR4_REGOFFSET) #define ADC_INJ_RANK_ID_JSQR_MASK (ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0) +#if defined(CORE_CM0PLUS) +#define ADC_JDRX_REGOFFSET_POS (8U) /* Position of bits ADC_JDRx_REGOFFSET in ADC_INJ_JDRX_REGOFFSET_MASK */ +#endif /* Definition of ADC group injected sequencer bits information to be inserted */ /* into ADC group injected sequencer ranks literals definition. */ @@ -208,6 +212,9 @@ extern "C" { #define ADC_SMPR1_REGOFFSET (0x00000000U) #define ADC_SMPR2_REGOFFSET (0x02000000U) #define ADC_CHANNEL_SMPRX_REGOFFSET_MASK (ADC_SMPR1_REGOFFSET | ADC_SMPR2_REGOFFSET) +#if defined(CORE_CM0PLUS) +#define ADC_SMPRX_REGOFFSET_POS (25U) /* Position of bits ADC_SMPRx_REGOFFSET in ADC_CHANNEL_SMPRX_REGOFFSET_MASK */ +#endif #define ADC_CHANNEL_SMPx_BITOFFSET_MASK (0x01F00000U) #define ADC_CHANNEL_SMPx_BITOFFSET_POS (20U) /* Value equivalent to POSITION_VAL(ADC_CHANNEL_SMPx_BITOFFSET_MASK) */ @@ -289,7 +296,11 @@ extern "C" { #define ADC_SINGLEDIFF_CALIB_FACTOR_MASK (ADC_CALFACT_CALFACT_D | ADC_CALFACT_CALFACT_S) #define ADC_SINGLEDIFF_CHANNEL_MASK (ADC_CHANNEL_ID_BITFIELD_MASK) /* Equivalent to ADC_DIFSEL_DIFSEL */ #define ADC_SINGLEDIFF_CHANNEL_SHIFT_MASK (ADC_CALFACT_CALFACT_S_5) /* Bit chosen to perform of shift when single mode is selected, shift value out of channels bits range. */ - +#if defined(CORE_CM0PLUS) +#define ADC_SINGLEDIFF_CALIB_F_BIT_D_MASK (0x00010000U) /* Selection of 1 bit to discriminate differential mode: mask of bit */ +#define ADC_SINGLEDIFF_CALIB_F_BIT_D_POS (16U) /* Selection of 1 bit to discriminate differential mode: position of bit */ +#define ADC_SINGLEDIFF_CALIB_F_BIT_D_SHIFT4 (ADC_SINGLEDIFF_CALIB_F_BIT_D_POS - 4U) /* Shift of bit ADC_SINGLEDIFF_CALIB_F_BIT_D to position to perform a shift of 4 ranks */ +#endif /* Internal mask for ADC analog watchdog: */ /* To select into literals LL_ADC_AWD_CHANNELx_xxx the relevant bits for: */ @@ -316,12 +327,19 @@ extern "C" { #define ADC_AWD_CR23_CHANNEL_MASK (ADC_AWD2CR_AWD2CH) #define ADC_AWD_CR_ALL_CHANNEL_MASK (ADC_AWD_CR1_CHANNEL_MASK | ADC_AWD_CR23_CHANNEL_MASK) +#define ADC_AWD_CRX_REGOFFSET_POS (20U) /* Position of bits ADC_AWD_CRx_REGOFFSET in ADC_AWD_CRX_REGOFFSET_MASK */ + /* Internal register offset for ADC analog watchdog threshold configuration */ #define ADC_AWD_TR1_REGOFFSET (ADC_AWD_CR1_REGOFFSET) #define ADC_AWD_TR2_REGOFFSET (ADC_AWD_CR2_REGOFFSET) #define ADC_AWD_TR3_REGOFFSET (ADC_AWD_CR3_REGOFFSET) #define ADC_AWD_TRX_REGOFFSET_MASK (ADC_AWD_TR1_REGOFFSET | ADC_AWD_TR2_REGOFFSET | ADC_AWD_TR3_REGOFFSET) - +#if defined(CORE_CM0PLUS) +#define ADC_AWD_TRX_REGOFFSET_POS (ADC_AWD_CRX_REGOFFSET_POS) /* Position of bits ADC_SQRx_REGOFFSET in ADC_AWD_TRX_REGOFFSET_MASK */ +#define ADC_AWD_TRX_BIT_HIGH_MASK (0x00010000U) /* Selection of 1 bit to discriminate threshold high: mask of bit */ +#define ADC_AWD_TRX_BIT_HIGH_POS (16U) /* Selection of 1 bit to discriminate threshold high: position of bit */ +#define ADC_AWD_TRX_BIT_HIGH_SHIFT4 (ADC_AWD_TRX_BIT_HIGH_POS - 4U) /* Shift of bit ADC_AWD_TRX_BIT_HIGH to position to perform a shift of 4 ranks */ +#endif /* Internal mask for ADC offset: */ /* Internal register offset for ADC offset number configuration */ @@ -846,7 +864,7 @@ typedef struct /** @defgroup ADC_LL_EC_REG_CONTINUOUS_MODE ADC group regular - Continuous mode * @{ */ -#define LL_ADC_REG_CONV_SINGLE (0x00000000U) /*!< ADC conversions are performed in single mode: one conversion per trigger */ +#define LL_ADC_REG_CONV_SINGLE (0x00000000U) /*!< ADC conversions are performed in single mode: one conversion per trigger */ #define LL_ADC_REG_CONV_CONTINUOUS (ADC_CFGR_CONT) /*!< ADC conversions are performed in continuous mode: after the first trigger, following conversions launched successively automatically */ /** * @} @@ -855,23 +873,23 @@ typedef struct /** @defgroup ADC_LL_EC_REG_DMA_TRANSFER ADC group regular - DMA transfer of ADC conversion data * @{ */ -#define LL_ADC_REG_DMA_TRANSFER_NONE (0x00000000U) /*!< ADC conversions are not transferred by DMA */ +#define LL_ADC_REG_DMA_TRANSFER_NONE (0x00000000U) /*!< ADC conversions are not transferred by DMA */ #define LL_ADC_REG_DMA_TRANSFER_LIMITED ( ADC_CFGR_DMAEN) /*!< ADC conversion data are transferred by DMA, in limited mode (one shot mode): DMA transfer requests are stopped when number of DMA data transfers (number of ADC conversions) is reached. This ADC mode is intended to be used with DMA mode non-circular. */ #define LL_ADC_REG_DMA_TRANSFER_UNLIMITED (ADC_CFGR_DMACFG | ADC_CFGR_DMAEN) /*!< ADC conversion data are transferred by DMA, in unlimited mode: DMA transfer requests are unlimited, whatever number of DMA data transferred (number of ADC conversions). This ADC mode is intended to be used with DMA mode circular. */ /** * @} */ -#if defined(ADC_CFGR_DFSDMCFG) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) /** @defgroup ADC_LL_EC_REG_DFSDM_TRANSFER ADC group regular - DFSDM transfer of ADC conversion data * @{ */ -#define LL_ADC_REG_DFSDM_TRANSFER_NONE (0x00000000U) /*!< ADC conversions are not transferred by DFSDM. */ +#define LL_ADC_REG_DFSDM_TRANSFER_NONE (0x00000000U) /*!< ADC conversions are not transferred by DFSDM. */ #define LL_ADC_REG_DFSDM_TRANSFER_ENABLE (ADC_CFGR_DFSDMCFG) /*!< ADC conversion data are transfered to DFSDM for post processing. The ADC conversion data format must be 16-bit signed and right aligned, refer to reference manual. DFSDM transfer cannot be used if DMA transfer is enabled. */ /** * @} */ -#endif /* ADC_CFGR_DFSDMCFG */ +#endif #if defined(ADC_SMPR1_SMPPLUS) /** @defgroup ADC_LL_EC_SAMPLINGTIME_COMMON_CONFIG ADC instance - ADC sampling time common configuration @@ -882,12 +900,12 @@ typedef struct /** * @} */ -#endif /* ADC_SMPR1_SMPPLUS */ +#endif /** @defgroup ADC_LL_EC_REG_OVR_DATA_BEHAVIOR ADC group regular - Overrun behavior on conversion data * @{ */ -#define LL_ADC_REG_OVR_DATA_PRESERVED (0x00000000U)/*!< ADC group regular behavior in case of overrun: data preserved */ +#define LL_ADC_REG_OVR_DATA_PRESERVED (0x00000000U) /*!< ADC group regular behavior in case of overrun: data preserved */ #define LL_ADC_REG_OVR_DATA_OVERWRITTEN (ADC_CFGR_OVRMOD) /*!< ADC group regular behavior in case of overrun: data overwritten */ /** * @} @@ -896,7 +914,7 @@ typedef struct /** @defgroup ADC_LL_EC_REG_SEQ_SCAN_LENGTH ADC group regular - Sequencer scan length * @{ */ -#define LL_ADC_REG_SEQ_SCAN_DISABLE (0x00000000U) /*!< ADC group regular sequencer disable (equivalent to sequencer of 1 rank: ADC conversion on only 1 channel) */ +#define LL_ADC_REG_SEQ_SCAN_DISABLE (0x00000000U) /*!< ADC group regular sequencer disable (equivalent to sequencer of 1 rank: ADC conversion on only 1 channel) */ #define LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS ( ADC_SQR1_L_0) /*!< ADC group regular sequencer enable with 2 ranks in the sequence */ #define LL_ADC_REG_SEQ_SCAN_ENABLE_3RANKS ( ADC_SQR1_L_1 ) /*!< ADC group regular sequencer enable with 3 ranks in the sequence */ #define LL_ADC_REG_SEQ_SCAN_ENABLE_4RANKS ( ADC_SQR1_L_1 | ADC_SQR1_L_0) /*!< ADC group regular sequencer enable with 4 ranks in the sequence */ @@ -919,7 +937,7 @@ typedef struct /** @defgroup ADC_LL_EC_REG_SEQ_DISCONT_MODE ADC group regular - Sequencer discontinuous mode * @{ */ -#define LL_ADC_REG_SEQ_DISCONT_DISABLE (0x00000000U) /*!< ADC group regular sequencer discontinuous mode disable */ +#define LL_ADC_REG_SEQ_DISCONT_DISABLE (0x00000000U) /*!< ADC group regular sequencer discontinuous mode disable */ #define LL_ADC_REG_SEQ_DISCONT_1RANK ( ADC_CFGR_DISCEN) /*!< ADC group regular sequencer discontinuous mode enable with sequence interruption every rank */ #define LL_ADC_REG_SEQ_DISCONT_2RANKS ( ADC_CFGR_DISCNUM_0 | ADC_CFGR_DISCEN) /*!< ADC group regular sequencer discontinuous mode enabled with sequence interruption every 2 ranks */ #define LL_ADC_REG_SEQ_DISCONT_3RANKS ( ADC_CFGR_DISCNUM_1 | ADC_CFGR_DISCEN) /*!< ADC group regular sequencer discontinuous mode enable with sequence interruption every 3 ranks */ @@ -992,7 +1010,7 @@ typedef struct /** @defgroup ADC_LL_EC_INJ_TRIG_AUTO ADC group injected - Automatic trigger mode * @{ */ -#define LL_ADC_INJ_TRIG_INDEPENDENT (0x00000000U)/*!< ADC group injected conversion trigger independent. Setting mandatory if ADC group injected injected trigger source is set to an external trigger. */ +#define LL_ADC_INJ_TRIG_INDEPENDENT (0x00000000U) /*!< ADC group injected conversion trigger independent. Setting mandatory if ADC group injected injected trigger source is set to an external trigger. */ #define LL_ADC_INJ_TRIG_FROM_GRP_REGULAR (ADC_CFGR_JAUTO) /*!< ADC group injected conversion trigger from ADC group regular. Setting compliant only with group injected trigger source set to SW start, without any further action on ADC group injected conversion start or stop: in this case, ADC group injected is controlled only from ADC group regular. */ /** * @} @@ -1001,7 +1019,7 @@ typedef struct /** @defgroup ADC_LL_EC_INJ_CONTEXT_QUEUE ADC group injected - Context queue mode * @{ */ -#define LL_ADC_INJ_QUEUE_2CONTEXTS_LAST_ACTIVE (0x00000000U)/* Group injected sequence context queue is enabled and can contain up to 2 contexts. When all contexts have been processed, the queue maintains the last context active perpetually. */ +#define LL_ADC_INJ_QUEUE_2CONTEXTS_LAST_ACTIVE (0x00000000U) /* Group injected sequence context queue is enabled and can contain up to 2 contexts. When all contexts have been processed, the queue maintains the last context active perpetually. */ #define LL_ADC_INJ_QUEUE_2CONTEXTS_END_EMPTY (ADC_CFGR_JQM) /* Group injected sequence context queue is enabled and can contain up to 2 contexts. When all contexts have been processed, the queue is empty and injected group triggers are disabled. */ #define LL_ADC_INJ_QUEUE_DISABLE (ADC_CFGR_JQDIS) /* Group injected sequence context queue is disabled: only 1 sequence can be configured and is active perpetually. */ /** @@ -1011,7 +1029,7 @@ typedef struct /** @defgroup ADC_LL_EC_INJ_SEQ_SCAN_LENGTH ADC group injected - Sequencer scan length * @{ */ -#define LL_ADC_INJ_SEQ_SCAN_DISABLE (0x00000000U) /*!< ADC group injected sequencer disable (equivalent to sequencer of 1 rank: ADC conversion on only 1 channel) */ +#define LL_ADC_INJ_SEQ_SCAN_DISABLE (0x00000000U) /*!< ADC group injected sequencer disable (equivalent to sequencer of 1 rank: ADC conversion on only 1 channel) */ #define LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS ( ADC_JSQR_JL_0) /*!< ADC group injected sequencer enable with 2 ranks in the sequence */ #define LL_ADC_INJ_SEQ_SCAN_ENABLE_3RANKS (ADC_JSQR_JL_1 ) /*!< ADC group injected sequencer enable with 3 ranks in the sequence */ #define LL_ADC_INJ_SEQ_SCAN_ENABLE_4RANKS (ADC_JSQR_JL_1 | ADC_JSQR_JL_0) /*!< ADC group injected sequencer enable with 4 ranks in the sequence */ @@ -1022,7 +1040,7 @@ typedef struct /** @defgroup ADC_LL_EC_INJ_SEQ_DISCONT_MODE ADC group injected - Sequencer discontinuous mode * @{ */ -#define LL_ADC_INJ_SEQ_DISCONT_DISABLE (0x00000000U)/*!< ADC group injected sequencer discontinuous mode disable */ +#define LL_ADC_INJ_SEQ_DISCONT_DISABLE (0x00000000U) /*!< ADC group injected sequencer discontinuous mode disable */ #define LL_ADC_INJ_SEQ_DISCONT_1RANK (ADC_CFGR_JDISCEN) /*!< ADC group injected sequencer discontinuous mode enable with sequence interruption every rank */ /** * @} @@ -1077,7 +1095,7 @@ typedef struct /** @defgroup ADC_LL_EC_AWD_CHANNELS Analog watchdog - Monitored channels * @{ */ -#define LL_ADC_AWD_DISABLE (0x00000000U) /*!< ADC analog watchdog monitoring disabled */ +#define LL_ADC_AWD_DISABLE (0x00000000U) /*!< ADC analog watchdog monitoring disabled */ #define LL_ADC_AWD_ALL_CHANNELS_REG (ADC_AWD_CR23_CHANNEL_MASK | ADC_CFGR_AWD1EN ) /*!< ADC analog watchdog monitoring of all channels, converted by group regular only */ #define LL_ADC_AWD_ALL_CHANNELS_INJ (ADC_AWD_CR23_CHANNEL_MASK | ADC_CFGR_JAWD1EN ) /*!< ADC analog watchdog monitoring of all channels, converted by group injected only */ #define LL_ADC_AWD_ALL_CHANNELS_REG_INJ (ADC_AWD_CR23_CHANNEL_MASK | ADC_CFGR_JAWD1EN | ADC_CFGR_AWD1EN ) /*!< ADC analog watchdog monitoring of all channels, converted by either group regular or injected */ @@ -1187,7 +1205,7 @@ typedef struct /** @defgroup ADC_LL_EC_OVS_SCOPE Oversampling - Oversampling scope * @{ */ -#define LL_ADC_OVS_DISABLE (0x00000000U) /*!< ADC oversampling disabled. */ +#define LL_ADC_OVS_DISABLE (0x00000000U) /*!< ADC oversampling disabled. */ #define LL_ADC_OVS_GRP_REGULAR_CONTINUED ( ADC_CFGR2_ROVSE) /*!< ADC oversampling on conversions of ADC group regular. If group injected interrupts group regular: when ADC group injected is triggered, the oversampling on ADC group regular is temporary stopped and continued afterwards. */ #define LL_ADC_OVS_GRP_REGULAR_RESUMED (ADC_CFGR2_ROVSM | ADC_CFGR2_ROVSE) /*!< ADC oversampling on conversions of ADC group regular. If group injected interrupts group regular: when ADC group injected is triggered, the oversampling on ADC group regular is resumed from start (oversampler buffer reset). */ #define LL_ADC_OVS_GRP_INJECTED ( ADC_CFGR2_JOVSE ) /*!< ADC oversampling on conversions of ADC group injected. */ @@ -1199,7 +1217,7 @@ typedef struct /** @defgroup ADC_LL_EC_OVS_DISCONT_MODE Oversampling - Discontinuous mode * @{ */ -#define LL_ADC_OVS_REG_CONT (0x00000000U)/*!< ADC oversampling discontinuous mode: continuous mode (all conversions of oversampling ratio are done from 1 trigger) */ +#define LL_ADC_OVS_REG_CONT (0x00000000U) /*!< ADC oversampling discontinuous mode: continuous mode (all conversions of oversampling ratio are done from 1 trigger) */ #define LL_ADC_OVS_REG_DISCONT (ADC_CFGR2_TROVS) /*!< ADC oversampling discontinuous mode: discontinuous mode (each conversion of oversampling ratio needs a trigger) */ /** * @} @@ -1208,7 +1226,7 @@ typedef struct /** @defgroup ADC_LL_EC_OVS_RATIO Oversampling - Ratio * @{ */ -#define LL_ADC_OVS_RATIO_2 (0x00000000U) /*!< ADC oversampling ratio of 2 (2 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ +#define LL_ADC_OVS_RATIO_2 (0x00000000U) /*!< ADC oversampling ratio of 2 (2 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ #define LL_ADC_OVS_RATIO_4 ( ADC_CFGR2_OVSR_0) /*!< ADC oversampling ratio of 4 (4 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ #define LL_ADC_OVS_RATIO_8 ( ADC_CFGR2_OVSR_1 ) /*!< ADC oversampling ratio of 8 (8 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ #define LL_ADC_OVS_RATIO_16 ( ADC_CFGR2_OVSR_1 | ADC_CFGR2_OVSR_0) /*!< ADC oversampling ratio of 16 (16 ADC conversions are performed, sum of these conversions data is computed to result as the ADC oversampling conversion data (before potential shift) */ @@ -1223,7 +1241,7 @@ typedef struct /** @defgroup ADC_LL_EC_OVS_SHIFT Oversampling - Data shift * @{ */ -#define LL_ADC_OVS_SHIFT_NONE (0x00000000U) /*!< ADC oversampling no shift (sum of the ADC conversions data is not divided to result as the ADC oversampling conversion data) */ +#define LL_ADC_OVS_SHIFT_NONE (0x00000000U) /*!< ADC oversampling no shift (sum of the ADC conversions data is not divided to result as the ADC oversampling conversion data) */ #define LL_ADC_OVS_SHIFT_RIGHT_1 ( ADC_CFGR2_OVSS_0) /*!< ADC oversampling shift of 1 (sum of the ADC conversions data is divided by 2 to result as the ADC oversampling conversion data) */ #define LL_ADC_OVS_SHIFT_RIGHT_2 ( ADC_CFGR2_OVSS_1 ) /*!< ADC oversampling shift of 2 (sum of the ADC conversions data is divided by 4 to result as the ADC oversampling conversion data) */ #define LL_ADC_OVS_SHIFT_RIGHT_3 ( ADC_CFGR2_OVSS_1 | ADC_CFGR2_OVSS_0) /*!< ADC oversampling shift of 3 (sum of the ADC conversions data is divided by 8 to result as the ADC oversampling conversion data) */ @@ -1240,7 +1258,7 @@ typedef struct /** @defgroup ADC_LL_EC_MULTI_MODE Multimode - Mode * @{ */ -#define LL_ADC_MULTI_INDEPENDENT (0x00000000U) /*!< ADC dual mode disabled (ADC independent mode) */ +#define LL_ADC_MULTI_INDEPENDENT (0x00000000U) /*!< ADC dual mode disabled (ADC independent mode) */ #define LL_ADC_MULTI_DUAL_REG_SIMULT ( ADC_CCR_DUAL_2 | ADC_CCR_DUAL_1 ) /*!< ADC dual mode enabled: group regular simultaneous */ #define LL_ADC_MULTI_DUAL_REG_INTERL ( ADC_CCR_DUAL_2 | ADC_CCR_DUAL_1 | ADC_CCR_DUAL_0) /*!< ADC dual mode enabled: Combined group regular interleaved */ #define LL_ADC_MULTI_DUAL_INJ_SIMULT ( ADC_CCR_DUAL_2 | ADC_CCR_DUAL_0) /*!< ADC dual mode enabled: group injected simultaneous */ @@ -1255,7 +1273,7 @@ typedef struct /** @defgroup ADC_LL_EC_MULTI_DMA_TRANSFER Multimode - DMA transfer * @{ */ -#define LL_ADC_MULTI_REG_DMA_EACH_ADC (0x00000000U) /*!< ADC multimode group regular conversions are transferred by DMA: each ADC uses its own DMA channel, with its individual DMA transfer settings */ +#define LL_ADC_MULTI_REG_DMA_EACH_ADC (0x00000000U) /*!< ADC multimode group regular conversions are transferred by DMA: each ADC uses its own DMA channel, with its individual DMA transfer settings */ #define LL_ADC_MULTI_REG_DMA_LIMIT_RES12_10B ( ADC_CCR_MDMA_1 ) /*!< ADC multimode group regular conversions are transferred by DMA, one DMA channel for both ADC (DMA of ADC master), in limited mode (one shot mode): DMA transfer requests are stopped when number of DMA data transfers (number of ADC conversions) is reached. This ADC mode is intended to be used with DMA mode non-circular. Setting for ADC resolution of 12 and 10 bits */ #define LL_ADC_MULTI_REG_DMA_LIMIT_RES8_6B ( ADC_CCR_MDMA_1 | ADC_CCR_MDMA_0) /*!< ADC multimode group regular conversions are transferred by DMA, one DMA channel for both ADC (DMA of ADC master), in limited mode (one shot mode): DMA transfer requests are stopped when number of DMA data transfers (number of ADC conversions) is reached. This ADC mode is intended to be used with DMA mode non-circular. Setting for ADC resolution of 8 and 6 bits */ #define LL_ADC_MULTI_REG_DMA_UNLMT_RES12_10B (ADC_CCR_DMACFG | ADC_CCR_MDMA_1 ) /*!< ADC multimode group regular conversions are transferred by DMA, one DMA channel for both ADC (DMA of ADC master), in unlimited mode: DMA transfer requests are unlimited, whatever number of DMA data transferred (number of ADC conversions). This ADC mode is intended to be used with DMA mode circular. Setting for ADC resolution of 12 and 10 bits */ @@ -1267,7 +1285,7 @@ typedef struct /** @defgroup ADC_LL_EC_MULTI_TWOSMP_DELAY Multimode - Delay between two sampling phases * @{ */ -#define LL_ADC_MULTI_TWOSMP_DELAY_1CYCLE (0x00000000U) /*!< ADC multimode delay between two sampling phases: 1 ADC clock cycle */ +#define LL_ADC_MULTI_TWOSMP_DELAY_1CYCLE (0x00000000U) /*!< ADC multimode delay between two sampling phases: 1 ADC clock cycle */ #define LL_ADC_MULTI_TWOSMP_DELAY_2CYCLES ( ADC_CCR_DELAY_0) /*!< ADC multimode delay between two sampling phases: 2 ADC clock cycles */ #define LL_ADC_MULTI_TWOSMP_DELAY_3CYCLES ( ADC_CCR_DELAY_1 ) /*!< ADC multimode delay between two sampling phases: 3 ADC clock cycles */ #define LL_ADC_MULTI_TWOSMP_DELAY_4CYCLES ( ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0) /*!< ADC multimode delay between two sampling phases: 4 ADC clock cycles */ @@ -1490,7 +1508,7 @@ typedef struct * @note Example: * __LL_ADC_DECIMAL_NB_TO_CHANNEL(4) * will return a data equivalent to "LL_ADC_CHANNEL_4". - * @param __DECIMAL_NB__: Value between Min_Data=0 and Max_Data=18 + * @param __DECIMAL_NB__ Value between Min_Data=0 and Max_Data=18 * @retval Returned value can be one of the following values: * @arg @ref LL_ADC_CHANNEL_0 * @arg @ref LL_ADC_CHANNEL_1 (7) @@ -1993,8 +2011,13 @@ typedef struct * @param __AWD_THRESHOLDS__ Value between Min_Data=0x00000000 and Max_Data=0xFFFFFFFF * @retval Value between Min_Data=0x000 and Max_Data=0xFFF */ +#if defined(CORE_CM0PLUS) +#define __LL_ADC_ANALOGWD_THRESHOLDS_HIGH_LOW(__AWD_THRESHOLD_TYPE__, __AWD_THRESHOLDS__) \ + (((__AWD_THRESHOLDS__) >> (((__AWD_THRESHOLD_TYPE__) & ADC_AWD_TRX_BIT_HIGH_MASK) >> ADC_AWD_TRX_BIT_HIGH_SHIFT4)) & LL_ADC_AWD_THRESHOLD_LOW) +#else #define __LL_ADC_ANALOGWD_THRESHOLDS_HIGH_LOW(__AWD_THRESHOLD_TYPE__, __AWD_THRESHOLDS__) \ (((__AWD_THRESHOLDS__) >> POSITION_VAL((__AWD_THRESHOLD_TYPE__))) & LL_ADC_AWD_THRESHOLD_LOW) +#endif /** * @brief Helper macro to set the ADC calibration value with both single ended @@ -2009,8 +2032,13 @@ typedef struct * @param __CALIB_FACTOR_DIFFERENTIAL__ Value between Min_Data=0x00 and Max_Data=0x7F * @retval Value between Min_Data=0x00000000 and Max_Data=0xFFFFFFFF */ +#if defined(CORE_CM0PLUS) +#define __LL_ADC_CALIB_FACTOR_SINGLE_DIFF(__CALIB_FACTOR_SINGLE_ENDED__, __CALIB_FACTOR_DIFFERENTIAL__) \ + (((__CALIB_FACTOR_DIFFERENTIAL__) << ADC_CALFACT_CALFACT_D_Pos) | (__CALIB_FACTOR_SINGLE_ENDED__)) +#else #define __LL_ADC_CALIB_FACTOR_SINGLE_DIFF(__CALIB_FACTOR_SINGLE_ENDED__, __CALIB_FACTOR_DIFFERENTIAL__) \ (((__CALIB_FACTOR_DIFFERENTIAL__) << POSITION_VAL(ADC_CALFACT_CALFACT_D)) | (__CALIB_FACTOR_SINGLE_ENDED__)) +#endif #if defined(ADC_MULTIMODE_SUPPORT) /** @@ -2166,7 +2194,7 @@ typedef struct * internal voltage reference VrefInt. * Otherwise, this macro performs the processing to scale * ADC conversion data to 12 bits. - * @param __VREFINT_ADC_DATA__: ADC conversion data (resolution 12 bits) + * @param __VREFINT_ADC_DATA__ ADC conversion data (resolution 12 bits) * of internal voltage reference VrefInt (unit: digital value). * @param __ADC_RESOLUTION__ This parameter can be one of the following values: * @arg @ref LL_ADC_RESOLUTION_12B @@ -2559,9 +2587,15 @@ __STATIC_INLINE uint32_t LL_ADC_GetCommonPathInternalCh(ADC_Common_TypeDef *ADCx */ __STATIC_INLINE void LL_ADC_SetCalibrationFactor(ADC_TypeDef *ADCx, uint32_t SingleDiff, uint32_t CalibrationFactor) { +#if defined(CORE_CM0PLUS) + MODIFY_REG(ADCx->CALFACT, + SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK, + CalibrationFactor << (((SingleDiff & ADC_SINGLEDIFF_CALIB_F_BIT_D_MASK) >> ADC_SINGLEDIFF_CALIB_F_BIT_D_SHIFT4) & ~(SingleDiff & ADC_CALFACT_CALFACT_S))); +#else MODIFY_REG(ADCx->CALFACT, SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK, CalibrationFactor << POSITION_VAL(SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK)); +#endif } /** @@ -2586,7 +2620,11 @@ __STATIC_INLINE uint32_t LL_ADC_GetCalibrationFactor(ADC_TypeDef *ADCx, uint32_t /* "SingleDiff". */ /* Parameter used with mask "ADC_SINGLEDIFF_CALIB_FACTOR_MASK" because */ /* containing other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + return (uint32_t)(READ_BIT(ADCx->CALFACT, (SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK)) >> ((SingleDiff & ADC_SINGLEDIFF_CALIB_F_BIT_D_MASK) >> ADC_SINGLEDIFF_CALIB_F_BIT_D_SHIFT4)); +#else return (uint32_t)(READ_BIT(ADCx->CALFACT, (SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK)) >> POSITION_VAL(SingleDiff & ADC_SINGLEDIFF_CALIB_FACTOR_MASK)); +#endif } /** @@ -3204,7 +3242,6 @@ __STATIC_INLINE uint32_t LL_ADC_REG_GetTriggerEdge(ADC_TypeDef *ADCx) return (uint32_t)(READ_BIT(ADCx->CFGR, ADC_CFGR_EXTEN)); } - /** * @brief Set ADC group regular sequencer length and scan direction. * @note Description of ADC group regular sequencer features: @@ -3473,11 +3510,15 @@ __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Ra /* in register and register position depending on parameter "Rank". */ /* Parameters "Rank" and "Channel" are used with masks because containing */ /* other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, __ADC_MASK_SHIFT(Rank, ADC_REG_SQRX_REGOFFSET_MASK)); +#endif MODIFY_REG(*preg, ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK), - (Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_REG_RANK_ID_SQRX_MASK))); + ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_REG_RANK_ID_SQRX_MASK)); } /** @@ -3578,11 +3619,15 @@ __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Ra */ __STATIC_INLINE uint32_t LL_ADC_REG_GetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, __ADC_MASK_SHIFT(Rank, ADC_REG_SQRX_REGOFFSET_MASK)); +#endif - return (uint32_t) (READ_BIT(*preg, + return (uint32_t) ((READ_BIT(*preg, ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK)) - << (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_REG_RANK_ID_SQRX_MASK)) + >> (Rank & ADC_REG_RANK_ID_SQRX_MASK)) << ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS ); } @@ -3702,7 +3747,7 @@ __STATIC_INLINE uint32_t LL_ADC_REG_GetDMATransfer(ADC_TypeDef *ADCx) return (uint32_t)(READ_BIT(ADCx->CFGR, ADC_CFGR_DMAEN | ADC_CFGR_DMACFG)); } -#if defined(ADC_CFGR_DFSDMCFG) +#if defined(ADC_CFGR_DFSDMCFG) &&defined(DFSDM1_Channel0) /** * @brief Set ADC group regular conversion data transfer to DFSDM. * @note DFSDM transfer cannot be used if DMA transfer is enabled. @@ -3737,7 +3782,7 @@ __STATIC_INLINE uint32_t LL_ADC_REG_GetDFSDMTransfer(ADC_TypeDef *ADCx) { return (uint32_t)(READ_BIT(ADCx->CFGR, ADC_CFGR_DFSDMCFG)); } -#endif /* ADC_CFGR_DFSDMCFG */ +#endif /** * @brief Set ADC group regular behavior in case of overrun: @@ -4020,7 +4065,7 @@ __STATIC_INLINE uint32_t LL_ADC_INJ_GetSequencerDiscont(ADC_TypeDef *ADCx) * TempSensor, ...), measurement paths to internal channels must be * enabled separately. * This can be done using function @ref LL_ADC_SetCommonPathInternalCh(). - * @note On this STM32 serie, some fast channels are available: fast analog inputs + * @note On STM32L4, some fast channels are available: fast analog inputs * coming from GPIO pads (ADC_IN1..5). * @note On this STM32 serie, setting of this feature is conditioned to * ADC state: @@ -4083,8 +4128,8 @@ __STATIC_INLINE void LL_ADC_INJ_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Ra /* Parameters "Rank" and "Channel" are used with masks because containing */ /* other bits reserved for other purpose. */ MODIFY_REG(ADCx->JSQR, - ADC_CHANNEL_ID_NUMBER_MASK >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_INJ_RANK_ID_JSQR_MASK)), - (Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_INJ_RANK_ID_JSQR_MASK))); + (ADC_CHANNEL_ID_NUMBER_MASK >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_INJ_RANK_ID_JSQR_MASK), + ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_INJ_RANK_ID_JSQR_MASK)); } /** @@ -4157,9 +4202,9 @@ __STATIC_INLINE void LL_ADC_INJ_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Ra */ __STATIC_INLINE uint32_t LL_ADC_INJ_GetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank) { - return (uint32_t)(READ_BIT(ADCx->JSQR, - ADC_CHANNEL_ID_NUMBER_MASK >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_INJ_RANK_ID_JSQR_MASK))) - << (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (Rank & ADC_INJ_RANK_ID_JSQR_MASK)) + return (uint32_t)((READ_BIT(ADCx->JSQR, + (ADC_CHANNEL_ID_NUMBER_MASK >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_INJ_RANK_ID_JSQR_MASK)) + >> (Rank & ADC_INJ_RANK_ID_JSQR_MASK)) << ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS ); } @@ -4294,7 +4339,7 @@ __STATIC_INLINE uint32_t LL_ADC_INJ_GetQueueMode(ADC_TypeDef *ADCx) * TempSensor, ...), measurement paths to internal channels must be * enabled separately. * This can be done using function @ref LL_ADC_SetCommonPathInternalCh(). - * @note On this STM32 serie, some fast channels are available: fast analog inputs + * @note On STM32L4, some fast channels are available: fast analog inputs * coming from GPIO pads (ADC_IN1..5). * @note On this STM32 serie, setting of this feature is conditioned to * ADC state: @@ -4517,10 +4562,10 @@ __STATIC_INLINE void LL_ADC_INJ_ConfigQueueContext(ADC_TypeDef *ADCx, ADC_JSQR_JL , TriggerSource | (ExternalTriggerEdge * ((TriggerSource != LL_ADC_INJ_TRIG_SOFTWARE))) | - ((Rank4_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (LL_ADC_INJ_RANK_4 & ADC_INJ_RANK_ID_JSQR_MASK))) | - ((Rank3_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (LL_ADC_INJ_RANK_3 & ADC_INJ_RANK_ID_JSQR_MASK))) | - ((Rank2_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (LL_ADC_INJ_RANK_2 & ADC_INJ_RANK_ID_JSQR_MASK))) | - ((Rank1_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> (ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS - (LL_ADC_INJ_RANK_1 & ADC_INJ_RANK_ID_JSQR_MASK))) | + (((Rank4_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (LL_ADC_INJ_RANK_4 & ADC_INJ_RANK_ID_JSQR_MASK)) | + (((Rank3_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (LL_ADC_INJ_RANK_3 & ADC_INJ_RANK_ID_JSQR_MASK)) | + (((Rank2_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (LL_ADC_INJ_RANK_2 & ADC_INJ_RANK_ID_JSQR_MASK)) | + (((Rank1_Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (LL_ADC_INJ_RANK_1 & ADC_INJ_RANK_ID_JSQR_MASK)) | SequencerNbRanks ); } @@ -4638,11 +4683,19 @@ __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t C /* in register and register position depending on parameter "Channel". */ /* Parameter "Channel" is used with masks because containing */ /* other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS)); + + MODIFY_REG(*preg, + ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS), + SamplingTime << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPRX_REGOFFSET_MASK)); MODIFY_REG(*preg, ADC_SMPR1_SMP0 << __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPx_BITOFFSET_MASK), SamplingTime << __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPx_BITOFFSET_MASK)); +#endif } /** @@ -4730,12 +4783,21 @@ __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t C */ __STATIC_INLINE uint32_t LL_ADC_GetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t Channel) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS)); + + return (uint32_t)(READ_BIT(*preg, + ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS)) + >> ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS) + ); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPRX_REGOFFSET_MASK)); return (uint32_t)(READ_BIT(*preg, ADC_SMPR1_SMP0 << __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPx_BITOFFSET_MASK)) >> __ADC_MASK_SHIFT(Channel, ADC_CHANNEL_SMPx_BITOFFSET_MASK) ); +#endif } /** @@ -4753,7 +4815,7 @@ __STATIC_INLINE uint32_t LL_ADC_GetChannelSamplingTime(ADC_TypeDef *ADCx, uint32 * not available in differential mode. * @note When configuring a channel 'i' in differential mode, * the channel 'i+1' is not usable separately. - * @note On STM32L4, channels 15, 16, 17, 18 of ADC1, ADC2, ADC3 (if available) + * @note On STM32L4, channels 16, 17, 18 of ADC1, ADC2, ADC3 (if available) * are internally fixed to single-ended inputs configuration. * @note For ADC channels configured in differential mode, both inputs * should be biased at (Vref+)/2 +/-200mV. @@ -4763,7 +4825,7 @@ __STATIC_INLINE uint32_t LL_ADC_GetChannelSamplingTime(ADC_TypeDef *ADCx, uint32 * ADC must be ADC disabled. * @note One or several values can be selected. * Example: (LL_ADC_CHANNEL_4 | LL_ADC_CHANNEL_12 | ...) - * @rmtoll DIFSEL DIFSEL LL_ADC_GetChannelSamplingTime + * @rmtoll DIFSEL DIFSEL LL_ADC_SetChannelSingleDiff * @param ADCx ADC instance * @param Channel This parameter can be one of the following values: * @arg @ref LL_ADC_CHANNEL_1 @@ -4780,6 +4842,7 @@ __STATIC_INLINE uint32_t LL_ADC_GetChannelSamplingTime(ADC_TypeDef *ADCx, uint32 * @arg @ref LL_ADC_CHANNEL_12 * @arg @ref LL_ADC_CHANNEL_13 * @arg @ref LL_ADC_CHANNEL_14 + * @arg @ref LL_ADC_CHANNEL_15 * @param SingleDiff This parameter can be a combination of the following values: * @arg @ref LL_ADC_SINGLE_ENDED * @arg @ref LL_ADC_DIFFERENTIAL_ENDED @@ -4810,15 +4873,14 @@ __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Cha * not available in differential mode. * @note When configuring a channel 'i' in differential mode, * the channel 'i+1' is not usable separately. - * @note On STM32L4, channels 15, 16, 17, 18 of ADC1, ADC2, ADC3 (if available) + * @note On STM32L4, channels 16, 17, 18 of ADC1, ADC2, ADC3 (if available) * are internally fixed to single-ended inputs configuration. * @note One or several values can be selected. In this case, the value * returned is null if all channels are in single ended-mode. * Example: (LL_ADC_CHANNEL_4 | LL_ADC_CHANNEL_12 | ...) - * @rmtoll DIFSEL DIFSEL LL_ADC_GetChannelSamplingTime + * @rmtoll DIFSEL DIFSEL LL_ADC_GetChannelSingleDiff * @param ADCx ADC instance * @param Channel This parameter can be a combination of the following values: - * @arg @ref LL_ADC_CHANNEL_0 * @arg @ref LL_ADC_CHANNEL_1 * @arg @ref LL_ADC_CHANNEL_2 * @arg @ref LL_ADC_CHANNEL_3 @@ -4833,6 +4895,7 @@ __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Cha * @arg @ref LL_ADC_CHANNEL_12 * @arg @ref LL_ADC_CHANNEL_13 * @arg @ref LL_ADC_CHANNEL_14 + * @arg @ref LL_ADC_CHANNEL_15 * @retval 0: channel in single-ended mode, else: channel in differential mode */ __STATIC_INLINE uint32_t LL_ADC_GetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Channel) @@ -4998,12 +5061,21 @@ __STATIC_INLINE void LL_ADC_SetAnalogWDMonitChannels(ADC_TypeDef *ADCx, uint32_t /* in register and register position depending on parameter "AWDy". */ /* Parameters "AWDChannelGroup" and "AWDy" are used with masks because */ /* containing other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->CFGR, ((AWDy & ADC_AWD_CRX_REGOFFSET_MASK) >> ADC_AWD_CRX_REGOFFSET_POS) + + ((AWDy & ADC_AWD_CR12_REGOFFSETGAP_MASK) * ADC_AWD_CR12_REGOFFSETGAP_VAL)); + + MODIFY_REG(*preg, + (AWDy & ADC_AWD_CR_ALL_CHANNEL_MASK), + AWDChannelGroup & AWDy); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->CFGR, __ADC_MASK_SHIFT(AWDy, ADC_AWD_CRX_REGOFFSET_MASK) + ((AWDy & ADC_AWD_CR12_REGOFFSETGAP_MASK) * ADC_AWD_CR12_REGOFFSETGAP_VAL)); MODIFY_REG(*preg, (AWDy & ADC_AWD_CR_ALL_CHANNEL_MASK), AWDChannelGroup & AWDy); +#endif } /** @@ -5130,51 +5202,59 @@ __STATIC_INLINE void LL_ADC_SetAnalogWDMonitChannels(ADC_TypeDef *ADCx, uint32_t */ __STATIC_INLINE uint32_t LL_ADC_GetAnalogWDMonitChannels(ADC_TypeDef *ADCx, uint32_t AWDy) { - register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->CFGR, __ADC_MASK_SHIFT(AWDy, ADC_AWD_CRX_REGOFFSET_MASK) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->CFGR, ((AWDy & ADC_AWD_CRX_REGOFFSET_MASK) >> ADC_AWD_CRX_REGOFFSET_POS) + ((AWDy & ADC_AWD_CR12_REGOFFSETGAP_MASK) * ADC_AWD_CR12_REGOFFSETGAP_VAL)); - /* Variable "AWDy" used to retrieve appropriate bitfield corresponding to */ - /* ADC_AWD_CR1_CHANNEL_MASK or ADC_AWD_CR23_CHANNEL_MASK. */ - register uint32_t AWD123ChannelGroup = READ_BIT(*preg, (AWDy | ADC_AWD_CR_ALL_CHANNEL_MASK)); + register uint32_t AnalogWDMonitChannels = (READ_BIT(*preg, AWDy) & AWDy & ADC_AWD_CR_ALL_CHANNEL_MASK); - /* Set variable of AWD1 monitored channel according to AWD1 features */ - /* and ADC channel definition: */ - /* - channel ID with number */ - /* - channel ID with bitfield */ - /* - AWD1 single or all channels */ - /* - AWD1 enable or disable (also used to discard AWD1 bitfield in case of */ - /* AWD2 or AWD3 selected). */ - register uint32_t AWD1ChannelSingle = ((AWD123ChannelGroup & ADC_CFGR_AWD1SGL) >> ADC_CFGR_AWD1SGL_BITOFFSET_POS); + /* If "AnalogWDMonitChannels" == 0, then the selected AWD is disabled */ + /* (parameter value LL_ADC_AWD_DISABLE). */ + /* Else, the selected AWD is enabled and is monitoring a group of channels */ + /* or a single channel. */ + if(AnalogWDMonitChannels != 0) + { + if(AWDy == LL_ADC_AWD1) + { + if((AnalogWDMonitChannels & ADC_CFGR_AWD1SGL) == 0) + { + /* AWD monitoring a group of channels */ + AnalogWDMonitChannels = (( AnalogWDMonitChannels + | (ADC_AWD_CR23_CHANNEL_MASK) + ) + & (~(ADC_CFGR_AWD1CH)) + ); + } + else + { + /* AWD monitoring a single channel */ + AnalogWDMonitChannels = (AnalogWDMonitChannels + | (ADC_AWD2CR_AWD2CH_0 << (AnalogWDMonitChannels >> ADC_CFGR_AWD1CH_Pos)) + ); + } + } + else + { + if((AnalogWDMonitChannels & ADC_AWD_CR23_CHANNEL_MASK) == ADC_AWD_CR23_CHANNEL_MASK) + { + /* AWD monitoring a group of channels */ + AnalogWDMonitChannels = ( ADC_AWD_CR23_CHANNEL_MASK + | ((ADC_CFGR_JAWD1EN | ADC_CFGR_AWD1EN)) + ); + } + else + { + /* AWD monitoring a single channel */ + /* AWD monitoring a group of channels */ + AnalogWDMonitChannels = ( AnalogWDMonitChannels + | (ADC_CFGR_JAWD1EN | ADC_CFGR_AWD1EN | ADC_CFGR_AWD1SGL) + | (__LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDMonitChannels) << ADC_CFGR_AWD1CH_Pos) + ); + } + } + } - register uint32_t AWD1ChannelGroup = ( ( AWD123ChannelGroup - | ((ADC_CHANNEL_0_BITFIELD << ((AWD123ChannelGroup & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS)) * AWD1ChannelSingle) - | (ADC_CHANNEL_ID_BITFIELD_MASK * (~AWD1ChannelSingle & 0x00000001U)) - ) - * (((AWD123ChannelGroup & ADC_CFGR_JAWD1EN) >> ADC_CFGR_JAWD1EN_BITOFFSET_POS) | ((AWD123ChannelGroup & ADC_CFGR_AWD1EN) >> ADC_CFGR_AWD1EN_BITOFFSET_POS)) - ); - - /* Set variable of AWD2 and AWD3 monitored channel according to AWD2-3 */ - /* features and ADC channel definition: */ - /* - channel ID with number */ - /* - channel ID with bitfield */ - /* - AWD2-3 single or all channels (shift value 32 (0x1 shift 5) used to */ - /* shift AWD1 equivalent single-all channels out of register) */ - /* - AWD2-3 enable or disable */ - /* Note: Use modulo 3 to avoid a shift value too long. On AWD2 and AWD3, */ - /* channel can be read back if only 1 channel monitoring */ - /* is activated, therefore the channel monitoring value channel "3" */ - /* is not not supported by this function, there is no risk of */ - /* conflict. */ - register uint32_t AWD23Enabled = ((0x00000001U >> (AWD123ChannelGroup % 3U)) << 6U); /* Value "0" if AWD2-3 is enabled, value "32" if AWD2-3 is disabled */ - - register uint32_t AWD23ChannelGroup = ((( AWD123ChannelGroup - | ((uint32_t)POSITION_VAL(AWD123ChannelGroup) << ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) - | ((ADC_CFGR_AWD1SGL) >> ((0x00000001U >> (ADC_AWD_CR23_CHANNEL_MASK - AWD123ChannelGroup)) << 5U)) - | (ADC_CFGR_JAWD1EN | ADC_CFGR_AWD1EN) - ) >> AWD23Enabled - ) >> (((AWDy & ADC_CFGR_AWD1SGL) >> ADC_CFGR_AWD1SGL_BITOFFSET_POS) << 5U)); - - return (AWD1ChannelGroup | AWD23ChannelGroup); + return AnalogWDMonitChannels; + } /** @@ -5232,7 +5312,11 @@ __STATIC_INLINE void LL_ADC_ConfigAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t /* "AWDy". */ /* Parameters "AWDy" and "AWDThresholdxxxValue" are used with masks because */ /* containing other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, ((AWDy & ADC_AWD_TRX_REGOFFSET_MASK) >> ADC_AWD_TRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, __ADC_MASK_SHIFT(AWDy, ADC_AWD_TRX_REGOFFSET_MASK)); +#endif MODIFY_REG(*preg, ADC_TR1_HT1 | ADC_TR1_LT1, @@ -5271,7 +5355,7 @@ __STATIC_INLINE void LL_ADC_ConfigAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t * @note On this STM32 serie, setting of this feature is conditioned to * ADC state: * ADC must be disabled or enabled without conversion on going - * on either groups regular or injected. + * on either ADC groups regular or injected. * @rmtoll TR1 HT1 LL_ADC_SetAnalogWDThresholds\n * TR2 HT2 LL_ADC_SetAnalogWDThresholds\n * TR3 HT3 LL_ADC_SetAnalogWDThresholds\n @@ -5286,7 +5370,7 @@ __STATIC_INLINE void LL_ADC_ConfigAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t * @param AWDThresholdsHighLow This parameter can be one of the following values: * @arg @ref LL_ADC_AWD_THRESHOLD_HIGH * @arg @ref LL_ADC_AWD_THRESHOLD_LOW - * @param AWDThresholdValue: Value between Min_Data=0x000 and Max_Data=0xFFF + * @param AWDThresholdValue Value between Min_Data=0x000 and Max_Data=0xFFF * @retval None */ __STATIC_INLINE void LL_ADC_SetAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t AWDy, uint32_t AWDThresholdsHighLow, uint32_t AWDThresholdValue) @@ -5296,11 +5380,19 @@ __STATIC_INLINE void LL_ADC_SetAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t AW /* "AWDThresholdsHighLow" and "AWDy". */ /* Parameters "AWDy" and "AWDThresholdValue" are used with masks because */ /* containing other bits reserved for other purpose. */ +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, ((AWDy & ADC_AWD_TRX_REGOFFSET_MASK) >> ADC_AWD_TRX_REGOFFSET_POS)); + + MODIFY_REG(*preg, + AWDThresholdsHighLow, + AWDThresholdValue << ((AWDThresholdsHighLow & ADC_AWD_TRX_BIT_HIGH_MASK) >> ADC_AWD_TRX_BIT_HIGH_SHIFT4)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, __ADC_MASK_SHIFT(AWDy, ADC_AWD_TRX_REGOFFSET_MASK)); MODIFY_REG(*preg, AWDThresholdsHighLow, AWDThresholdValue << POSITION_VAL(AWDThresholdsHighLow)); +#endif } /** @@ -5333,12 +5425,21 @@ __STATIC_INLINE void LL_ADC_SetAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t AW */ __STATIC_INLINE uint32_t LL_ADC_GetAnalogWDThresholds(ADC_TypeDef *ADCx, uint32_t AWDy, uint32_t AWDThresholdsHighLow) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, ((AWDy & ADC_AWD_TRX_REGOFFSET_MASK) >> ADC_AWD_TRX_REGOFFSET_POS)); + + return (uint32_t)(READ_BIT(*preg, + (AWDThresholdsHighLow | ADC_TR1_LT1)) + >> (((AWDThresholdsHighLow & ADC_AWD_TRX_BIT_HIGH_MASK) >> ADC_AWD_TRX_BIT_HIGH_SHIFT4) & ~(AWDThresholdsHighLow & ADC_TR1_LT1)) + ); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->TR1, __ADC_MASK_SHIFT(AWDy, ADC_AWD_TRX_REGOFFSET_MASK)); return (uint32_t)(READ_BIT(*preg, (AWDThresholdsHighLow | ADC_TR1_LT1)) >> POSITION_VAL(AWDThresholdsHighLow) ); +#endif } /** @@ -6284,7 +6385,11 @@ __STATIC_INLINE uint32_t LL_ADC_INJ_IsStopConversionOngoing(ADC_TypeDef *ADCx) */ __STATIC_INLINE uint32_t LL_ADC_INJ_ReadConversionData32(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, ((Rank & ADC_INJ_JDRX_REGOFFSET_MASK) >> ADC_JDRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK)); +#endif return (uint32_t)(READ_BIT(*preg, ADC_JDR1_JDATA) @@ -6311,7 +6416,11 @@ __STATIC_INLINE uint32_t LL_ADC_INJ_ReadConversionData32(ADC_TypeDef *ADCx, uint */ __STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData12(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, ((Rank & ADC_INJ_JDRX_REGOFFSET_MASK) >> ADC_JDRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK)); +#endif return (uint16_t)(READ_BIT(*preg, ADC_JDR1_JDATA) @@ -6338,7 +6447,11 @@ __STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData12(ADC_TypeDef *ADCx, uint */ __STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData10(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, ((Rank & ADC_INJ_JDRX_REGOFFSET_MASK) >> ADC_JDRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK)); +#endif return (uint16_t)(READ_BIT(*preg, ADC_JDR1_JDATA) @@ -6365,7 +6478,11 @@ __STATIC_INLINE uint16_t LL_ADC_INJ_ReadConversionData10(ADC_TypeDef *ADCx, uint */ __STATIC_INLINE uint8_t LL_ADC_INJ_ReadConversionData8(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, ((Rank & ADC_INJ_JDRX_REGOFFSET_MASK) >> ADC_JDRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK)); +#endif return (uint8_t)(READ_BIT(*preg, ADC_JDR1_JDATA) @@ -6392,7 +6509,11 @@ __STATIC_INLINE uint8_t LL_ADC_INJ_ReadConversionData8(ADC_TypeDef *ADCx, uint32 */ __STATIC_INLINE uint8_t LL_ADC_INJ_ReadConversionData6(ADC_TypeDef *ADCx, uint32_t Rank) { +#if defined(CORE_CM0PLUS) + register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, ((Rank & ADC_INJ_JDRX_REGOFFSET_MASK) >> ADC_JDRX_REGOFFSET_POS)); +#else register uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->JDR1, __ADC_MASK_SHIFT(Rank, ADC_INJ_JDRX_REGOFFSET_MASK)); +#endif return (uint8_t)(READ_BIT(*preg, ADC_JDR1_JDATA) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_bus.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_bus.h index c4ffe5a34e..a547514fcb 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_bus.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_bus.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_bus.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of BUS LL module. @verbatim @@ -92,12 +90,18 @@ extern "C" { #define LL_AHB1_GRP1_PERIPH_ALL 0xFFFFFFFFU #define LL_AHB1_GRP1_PERIPH_DMA1 RCC_AHB1ENR_DMA1EN #define LL_AHB1_GRP1_PERIPH_DMA2 RCC_AHB1ENR_DMA2EN +#if defined(DMAMUX1) +#define LL_AHB1_GRP1_PERIPH_DMAMUX1 RCC_AHB1ENR_DMAMUX1EN +#endif /* DMAMUX1 */ #define LL_AHB1_GRP1_PERIPH_FLASH RCC_AHB1ENR_FLASHEN #define LL_AHB1_GRP1_PERIPH_CRC RCC_AHB1ENR_CRCEN #define LL_AHB1_GRP1_PERIPH_TSC RCC_AHB1ENR_TSCEN #if defined(DMA2D) #define LL_AHB1_GRP1_PERIPH_DMA2D RCC_AHB1ENR_DMA2DEN #endif /* DMA2D */ +#if defined(GFXMMU) +#define LL_AHB1_GRP1_PERIPH_GFXMMU RCC_AHB1ENR_GFXMMUEN +#endif /* GFXMMU */ #define LL_AHB1_GRP1_PERIPH_SRAM1 RCC_AHB1SMENR_SRAM1SMEN /** * @} @@ -140,7 +144,16 @@ extern "C" { #define LL_AHB2_GRP1_PERIPH_HASH RCC_AHB2ENR_HASHEN #endif /* HASH */ #define LL_AHB2_GRP1_PERIPH_RNG RCC_AHB2ENR_RNGEN +#if defined(OCTOSPIM) +#define LL_AHB2_GRP1_PERIPH_OSPIM RCC_AHB2ENR_OSPIMEN +#endif /* OCTOSPIM */ +#if defined(SDMMC1) && defined(RCC_AHB2ENR_SDMMC1EN) +#define LL_AHB2_GRP1_PERIPH_SDMMC1 RCC_AHB2ENR_SDMMC1EN +#endif /* SDMMC1 && RCC_AHB2ENR_SDMMC1EN */ #define LL_AHB2_GRP1_PERIPH_SRAM2 RCC_AHB2SMENR_SRAM2SMEN +#if defined(SRAM3_BASE) +#define LL_AHB2_GRP1_PERIPH_SRAM3 RCC_AHB2SMENR_SRAM3SMEN +#endif /* SRAM3_BASE */ /** * @} */ @@ -152,7 +165,15 @@ extern "C" { #if defined(FMC_Bank1_R) #define LL_AHB3_GRP1_PERIPH_FMC RCC_AHB3ENR_FMCEN #endif /* FMC_Bank1_R */ +#if defined(QUADSPI) #define LL_AHB3_GRP1_PERIPH_QSPI RCC_AHB3ENR_QSPIEN +#endif /* QUADSPI */ +#if defined(OCTOSPI1) +#define LL_AHB3_GRP1_PERIPH_OSPI1 RCC_AHB3ENR_OSPI1EN +#endif /* OCTOSPI1 */ +#if defined(OCTOSPI2) +#define LL_AHB3_GRP1_PERIPH_OSPI2 RCC_AHB3ENR_OSPI2EN +#endif /* OCTOSPI2 */ /** * @} */ @@ -240,9 +261,9 @@ extern "C" { #define LL_APB2_GRP1_PERIPH_ALL 0xFFFFFFFFU #define LL_APB2_GRP1_PERIPH_SYSCFG RCC_APB2ENR_SYSCFGEN #define LL_APB2_GRP1_PERIPH_FW RCC_APB2ENR_FWEN -#if defined(SDMMC1) +#if defined(SDMMC1) && defined(RCC_APB2ENR_SDMMC1EN) #define LL_APB2_GRP1_PERIPH_SDMMC1 RCC_APB2ENR_SDMMC1EN -#endif /* SDMMC1 */ +#endif /* SDMMC1 && RCC_APB2ENR_SDMMC1EN */ #define LL_APB2_GRP1_PERIPH_TIM1 RCC_APB2ENR_TIM1EN #define LL_APB2_GRP1_PERIPH_SPI1 RCC_APB2ENR_SPI1EN #if defined(TIM8) @@ -261,6 +282,12 @@ extern "C" { #if defined(DFSDM1_Channel0) #define LL_APB2_GRP1_PERIPH_DFSDM1 RCC_APB2ENR_DFSDM1EN #endif /* DFSDM1_Channel0 */ +#if defined(LTDC) +#define LL_APB2_GRP1_PERIPH_LTDC RCC_APB2ENR_LTDCEN +#endif /* LTDC */ +#if defined(DSI) +#define LL_APB2_GRP1_PERIPH_DSI RCC_APB2ENR_DSIEN +#endif /* DSI */ /** * @} */ @@ -293,17 +320,21 @@ extern "C" { * @brief Enable AHB1 peripherals clock. * @rmtoll AHB1ENR DMA1EN LL_AHB1_GRP1_EnableClock\n * AHB1ENR DMA2EN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR DMAMUX1EN LL_AHB1_GRP1_EnableClock\n * AHB1ENR FLASHEN LL_AHB1_GRP1_EnableClock\n * AHB1ENR CRCEN LL_AHB1_GRP1_EnableClock\n * AHB1ENR TSCEN LL_AHB1_GRP1_EnableClock\n - * AHB1ENR DMA2DEN LL_AHB1_GRP1_EnableClock + * AHB1ENR DMA2DEN LL_AHB1_GRP1_EnableClock\n + * AHB1ENR GFXMMUEN LL_AHB1_GRP1_EnableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -321,17 +352,21 @@ __STATIC_INLINE void LL_AHB1_GRP1_EnableClock(uint32_t Periphs) * @brief Check if AHB1 peripheral clock is enabled or not * @rmtoll AHB1ENR DMA1EN LL_AHB1_GRP1_IsEnabledClock\n * AHB1ENR DMA2EN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR DMAMUX1EN LL_AHB1_GRP1_IsEnabledClock\n * AHB1ENR FLASHEN LL_AHB1_GRP1_IsEnabledClock\n * AHB1ENR CRCEN LL_AHB1_GRP1_IsEnabledClock\n * AHB1ENR TSCEN LL_AHB1_GRP1_IsEnabledClock\n - * AHB1ENR DMA2DEN LL_AHB1_GRP1_IsEnabledClock + * AHB1ENR DMA2DEN LL_AHB1_GRP1_IsEnabledClock\n + * AHB1ENR GFXMMUEN LL_AHB1_GRP1_IsEnabledClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval State of Periphs (1 or 0). @@ -345,17 +380,21 @@ __STATIC_INLINE uint32_t LL_AHB1_GRP1_IsEnabledClock(uint32_t Periphs) * @brief Disable AHB1 peripherals clock. * @rmtoll AHB1ENR DMA1EN LL_AHB1_GRP1_DisableClock\n * AHB1ENR DMA2EN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR DMAMUX1EN LL_AHB1_GRP1_DisableClock\n * AHB1ENR FLASHEN LL_AHB1_GRP1_DisableClock\n * AHB1ENR CRCEN LL_AHB1_GRP1_DisableClock\n * AHB1ENR TSCEN LL_AHB1_GRP1_DisableClock\n - * AHB1ENR DMA2DEN LL_AHB1_GRP1_DisableClock + * AHB1ENR DMA2DEN LL_AHB1_GRP1_DisableClock\n + * AHB1ENR GFXMMUEN LL_AHB1_GRP1_DisableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -369,18 +408,22 @@ __STATIC_INLINE void LL_AHB1_GRP1_DisableClock(uint32_t Periphs) * @brief Force AHB1 peripherals reset. * @rmtoll AHB1RSTR DMA1RST LL_AHB1_GRP1_ForceReset\n * AHB1RSTR DMA2RST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR DMAMUX1RST LL_AHB1_GRP1_ForceReset\n * AHB1RSTR FLASHRST LL_AHB1_GRP1_ForceReset\n * AHB1RSTR CRCRST LL_AHB1_GRP1_ForceReset\n * AHB1RSTR TSCRST LL_AHB1_GRP1_ForceReset\n - * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ForceReset + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ForceReset\n + * AHB1RSTR GFXMMURST LL_AHB1_GRP1_ForceReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_ALL * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -394,18 +437,22 @@ __STATIC_INLINE void LL_AHB1_GRP1_ForceReset(uint32_t Periphs) * @brief Release AHB1 peripherals reset. * @rmtoll AHB1RSTR DMA1RST LL_AHB1_GRP1_ReleaseReset\n * AHB1RSTR DMA2RST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR DMAMUX1RST LL_AHB1_GRP1_ReleaseReset\n * AHB1RSTR FLASHRST LL_AHB1_GRP1_ReleaseReset\n * AHB1RSTR CRCRST LL_AHB1_GRP1_ReleaseReset\n * AHB1RSTR TSCRST LL_AHB1_GRP1_ReleaseReset\n - * AHB1ENR DMA2DRST LL_AHB1_GRP1_ReleaseReset + * AHB1RSTR DMA2DRST LL_AHB1_GRP1_ReleaseReset\n + * AHB1RSTR GFXMMURST LL_AHB1_GRP1_ReleaseReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_ALL * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -419,19 +466,23 @@ __STATIC_INLINE void LL_AHB1_GRP1_ReleaseReset(uint32_t Periphs) * @brief Enable AHB1 peripheral clocks in Sleep and Stop modes * @rmtoll AHB1SMENR DMA1SMEN LL_AHB1_GRP1_EnableClockStopSleep\n * AHB1SMENR DMA2SMEN LL_AHB1_GRP1_EnableClockStopSleep\n + * AHB1SMENR DMAMUX1SMEN LL_AHB1_GRP1_EnableClockStopSleep\n * AHB1SMENR FLASHSMEN LL_AHB1_GRP1_EnableClockStopSleep\n * AHB1SMENR SRAM1SMEN LL_AHB1_GRP1_EnableClockStopSleep\n * AHB1SMENR CRCSMEN LL_AHB1_GRP1_EnableClockStopSleep\n * AHB1SMENR TSCSMEN LL_AHB1_GRP1_EnableClockStopSleep\n - * AHB1SMENR DMA2DSMEN LL_AHB1_GRP1_EnableClockStopSleep + * AHB1SMENR DMA2DSMEN LL_AHB1_GRP1_EnableClockStopSleep\n + * AHB1SMENR GFXMMUSMEN LL_AHB1_GRP1_EnableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -449,19 +500,23 @@ __STATIC_INLINE void LL_AHB1_GRP1_EnableClockStopSleep(uint32_t Periphs) * @brief Disable AHB1 peripheral clocks in Sleep and Stop modes * @rmtoll AHB1SMENR DMA1SMEN LL_AHB1_GRP1_DisableClockStopSleep\n * AHB1SMENR DMA2SMEN LL_AHB1_GRP1_DisableClockStopSleep\n + * AHB1SMENR DMAMUX1SMEN LL_AHB1_GRP1_DisableClockStopSleep\n * AHB1SMENR FLASHSMEN LL_AHB1_GRP1_DisableClockStopSleep\n * AHB1SMENR SRAM1SMEN LL_AHB1_GRP1_DisableClockStopSleep\n * AHB1SMENR CRCSMEN LL_AHB1_GRP1_DisableClockStopSleep\n * AHB1SMENR TSCSMEN LL_AHB1_GRP1_DisableClockStopSleep\n - * AHB1SMENR DMA2DSMEN LL_AHB1_GRP1_DisableClockStopSleep + * AHB1SMENR DMA2DSMEN LL_AHB1_GRP1_DisableClockStopSleep\n + * AHB1SMENR GFXMMUSMEN LL_AHB1_GRP1_DisableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB1_GRP1_PERIPH_DMA1 * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2 + * @arg @ref LL_AHB1_GRP1_PERIPH_DMAMUX1 (*) * @arg @ref LL_AHB1_GRP1_PERIPH_FLASH * @arg @ref LL_AHB1_GRP1_PERIPH_SRAM1 * @arg @ref LL_AHB1_GRP1_PERIPH_CRC * @arg @ref LL_AHB1_GRP1_PERIPH_TSC * @arg @ref LL_AHB1_GRP1_PERIPH_DMA2D (*) + * @arg @ref LL_AHB1_GRP1_PERIPH_GFXMMU (*) * * (*) value not defined in all devices. * @retval None @@ -495,7 +550,9 @@ __STATIC_INLINE void LL_AHB1_GRP1_DisableClockStopSleep(uint32_t Periphs) * AHB2ENR DCMIEN LL_AHB2_GRP1_EnableClock\n * AHB2ENR AESEN LL_AHB2_GRP1_EnableClock\n * AHB2ENR HASHEN LL_AHB2_GRP1_EnableClock\n - * AHB2ENR RNGEN LL_AHB2_GRP1_EnableClock + * AHB2ENR RNGEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR OSPIMEN LL_AHB2_GRP1_EnableClock\n + * AHB2ENR SDMMC1EN LL_AHB2_GRP1_EnableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOB @@ -512,6 +569,8 @@ __STATIC_INLINE void LL_AHB1_GRP1_DisableClockStopSleep(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -541,7 +600,9 @@ __STATIC_INLINE void LL_AHB2_GRP1_EnableClock(uint32_t Periphs) * AHB2ENR DCMIEN LL_AHB2_GRP1_IsEnabledClock\n * AHB2ENR AESEN LL_AHB2_GRP1_IsEnabledClock\n * AHB2ENR HASHEN LL_AHB2_GRP1_IsEnabledClock\n - * AHB2ENR RNGEN LL_AHB2_GRP1_IsEnabledClock + * AHB2ENR RNGEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR OSPIMEN LL_AHB2_GRP1_IsEnabledClock\n + * AHB2ENR SDMMC1EN LL_AHB2_GRP1_IsEnabledClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOB @@ -558,6 +619,8 @@ __STATIC_INLINE void LL_AHB2_GRP1_EnableClock(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval State of Periphs (1 or 0). @@ -583,7 +646,9 @@ __STATIC_INLINE uint32_t LL_AHB2_GRP1_IsEnabledClock(uint32_t Periphs) * AHB2ENR DCMIEN LL_AHB2_GRP1_DisableClock\n * AHB2ENR AESEN LL_AHB2_GRP1_DisableClock\n * AHB2ENR HASHEN LL_AHB2_GRP1_DisableClock\n - * AHB2ENR RNGEN LL_AHB2_GRP1_DisableClock + * AHB2ENR RNGEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR OSPIMEN LL_AHB2_GRP1_DisableClock\n + * AHB2ENR SDMMC1EN LL_AHB2_GRP1_DisableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOB @@ -600,6 +665,8 @@ __STATIC_INLINE uint32_t LL_AHB2_GRP1_IsEnabledClock(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -625,7 +692,9 @@ __STATIC_INLINE void LL_AHB2_GRP1_DisableClock(uint32_t Periphs) * AHB2RSTR DCMIRST LL_AHB2_GRP1_ForceReset\n * AHB2RSTR AESRST LL_AHB2_GRP1_ForceReset\n * AHB2RSTR HASHRST LL_AHB2_GRP1_ForceReset\n - * AHB2RSTR RNGRST LL_AHB2_GRP1_ForceReset + * AHB2RSTR RNGRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR OSPIMRST LL_AHB2_GRP1_ForceReset\n + * AHB2RSTR SDMMC1RST LL_AHB2_GRP1_ForceReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_ALL * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA @@ -643,6 +712,8 @@ __STATIC_INLINE void LL_AHB2_GRP1_DisableClock(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -668,7 +739,9 @@ __STATIC_INLINE void LL_AHB2_GRP1_ForceReset(uint32_t Periphs) * AHB2RSTR DCMIRST LL_AHB2_GRP1_ReleaseReset\n * AHB2RSTR AESRST LL_AHB2_GRP1_ReleaseReset\n * AHB2RSTR HASHRST LL_AHB2_GRP1_ReleaseReset\n - * AHB2RSTR RNGRST LL_AHB2_GRP1_ReleaseReset + * AHB2RSTR RNGRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR OSPIMRST LL_AHB2_GRP1_ReleaseReset\n + * AHB2RSTR SDMMC1RST LL_AHB2_GRP1_ReleaseReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_ALL * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA @@ -686,6 +759,8 @@ __STATIC_INLINE void LL_AHB2_GRP1_ForceReset(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -707,12 +782,15 @@ __STATIC_INLINE void LL_AHB2_GRP1_ReleaseReset(uint32_t Periphs) * AHB2SMENR GPIOHSMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR GPIOISMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR SRAM2SMEN LL_AHB2_GRP1_EnableClockStopSleep\n + * AHB2SMENR SRAM3SMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR OTGFSSMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR ADCSMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR DCMISMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR AESSMEN LL_AHB2_GRP1_EnableClockStopSleep\n * AHB2SMENR HASHSMEN LL_AHB2_GRP1_EnableClockStopSleep\n - * AHB2SMENR RNGSMEN LL_AHB2_GRP1_EnableClockStopSleep + * AHB2SMENR RNGSMEN LL_AHB2_GRP1_EnableClockStopSleep\n + * AHB2SMENR OSPIMSMEN LL_AHB2_GRP1_EnableClockStopSleep\n + * AHB2SMENR SDMMC1SMEN LL_AHB2_GRP1_EnableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOB @@ -724,12 +802,15 @@ __STATIC_INLINE void LL_AHB2_GRP1_ReleaseReset(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOH * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOI (*) * @arg @ref LL_AHB2_GRP1_PERIPH_SRAM2 + * @arg @ref LL_AHB2_GRP1_PERIPH_SRAM3 (*) * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) * @arg @ref LL_AHB2_GRP1_PERIPH_ADC * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -755,12 +836,15 @@ __STATIC_INLINE void LL_AHB2_GRP1_EnableClockStopSleep(uint32_t Periphs) * AHB2SMENR GPIOHSMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR GPIOISMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR SRAM2SMEN LL_AHB2_GRP1_DisableClockStopSleep\n + * AHB2SMENR SRAM3SMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR OTGFSSMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR ADCSMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR DCMISMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR AESSMEN LL_AHB2_GRP1_DisableClockStopSleep\n * AHB2SMENR HASHSMEN LL_AHB2_GRP1_DisableClockStopSleep\n - * AHB2SMENR RNGSMEN LL_AHB2_GRP1_DisableClockStopSleep + * AHB2SMENR RNGSMEN LL_AHB2_GRP1_DisableClockStopSleep\n + * AHB2SMENR OSPIMSMEN LL_AHB2_GRP1_DisableClockStopSleep\n + * AHB2SMENR SDMMC1SMEN LL_AHB2_GRP1_DisableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOA * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOB @@ -772,12 +856,15 @@ __STATIC_INLINE void LL_AHB2_GRP1_EnableClockStopSleep(uint32_t Periphs) * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOH * @arg @ref LL_AHB2_GRP1_PERIPH_GPIOI (*) * @arg @ref LL_AHB2_GRP1_PERIPH_SRAM2 + * @arg @ref LL_AHB2_GRP1_PERIPH_SRAM3 (*) * @arg @ref LL_AHB2_GRP1_PERIPH_OTGFS (*) * @arg @ref LL_AHB2_GRP1_PERIPH_ADC * @arg @ref LL_AHB2_GRP1_PERIPH_DCMI (*) * @arg @ref LL_AHB2_GRP1_PERIPH_AES (*) * @arg @ref LL_AHB2_GRP1_PERIPH_HASH (*) * @arg @ref LL_AHB2_GRP1_PERIPH_RNG + * @arg @ref LL_AHB2_GRP1_PERIPH_OSPIM (*) + * @arg @ref LL_AHB2_GRP1_PERIPH_SDMMC1 (*) * * (*) value not defined in all devices. * @retval None @@ -798,10 +885,14 @@ __STATIC_INLINE void LL_AHB2_GRP1_DisableClockStopSleep(uint32_t Periphs) /** * @brief Enable AHB3 peripherals clock. * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_EnableClock\n - * AHB3ENR QSPIEN LL_AHB3_GRP1_EnableClock + * AHB3ENR QSPIEN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR OSPI1EN LL_AHB3_GRP1_EnableClock\n + * AHB3ENR OSPI2EN LL_AHB3_GRP1_EnableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -818,10 +909,14 @@ __STATIC_INLINE void LL_AHB3_GRP1_EnableClock(uint32_t Periphs) /** * @brief Check if AHB3 peripheral clock is enabled or not * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_IsEnabledClock\n - * AHB3ENR QSPIEN LL_AHB3_GRP1_IsEnabledClock + * AHB3ENR QSPIEN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR OSPI1EN LL_AHB3_GRP1_IsEnabledClock\n + * AHB3ENR OSPI2EN LL_AHB3_GRP1_IsEnabledClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval State of Periphs (1 or 0). @@ -834,10 +929,14 @@ __STATIC_INLINE uint32_t LL_AHB3_GRP1_IsEnabledClock(uint32_t Periphs) /** * @brief Disable AHB3 peripherals clock. * @rmtoll AHB3ENR FMCEN LL_AHB3_GRP1_DisableClock\n - * AHB3ENR QSPIEN LL_AHB3_GRP1_DisableClock + * AHB3ENR QSPIEN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR OSPI1EN LL_AHB3_GRP1_DisableClock\n + * AHB3ENR OSPI2EN LL_AHB3_GRP1_DisableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -850,11 +949,15 @@ __STATIC_INLINE void LL_AHB3_GRP1_DisableClock(uint32_t Periphs) /** * @brief Force AHB3 peripherals reset. * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ForceReset\n - * AHB3RSTR QSPIRST LL_AHB3_GRP1_ForceReset + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR OSPI1RST LL_AHB3_GRP1_ForceReset\n + * AHB3RSTR OSPI2RST LL_AHB3_GRP1_ForceReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_ALL * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -867,11 +970,15 @@ __STATIC_INLINE void LL_AHB3_GRP1_ForceReset(uint32_t Periphs) /** * @brief Release AHB3 peripherals reset. * @rmtoll AHB3RSTR FMCRST LL_AHB3_GRP1_ReleaseReset\n - * AHB3RSTR QSPIRST LL_AHB3_GRP1_ReleaseReset + * AHB3RSTR QSPIRST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR OSPI1RST LL_AHB3_GRP1_ReleaseReset\n + * AHB3RSTR OSPI2RST LL_AHB3_GRP1_ReleaseReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB2_GRP1_PERIPH_ALL * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -884,10 +991,14 @@ __STATIC_INLINE void LL_AHB3_GRP1_ReleaseReset(uint32_t Periphs) /** * @brief Enable AHB3 peripheral clocks in Sleep and Stop modes * @rmtoll AHB3SMENR FMCSMEN LL_AHB3_GRP1_EnableClockStopSleep\n - * AHB3SMENR QSPISMEN LL_AHB3_GRP1_EnableClockStopSleep + * AHB3SMENR QSPISMEN LL_AHB3_GRP1_EnableClockStopSleep\n + * AHB3SMENR OSPI1SMEN LL_AHB3_GRP1_EnableClockStopSleep\n + * AHB3SMENR OSPI2SMEN LL_AHB3_GRP1_EnableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -904,10 +1015,14 @@ __STATIC_INLINE void LL_AHB3_GRP1_EnableClockStopSleep(uint32_t Periphs) /** * @brief Disable AHB3 peripheral clocks in Sleep and Stop modes * @rmtoll AHB3SMENR FMCSMEN LL_AHB3_GRP1_DisableClockStopSleep\n - * AHB3SMENR QSPISMEN LL_AHB3_GRP1_DisableClockStopSleep + * AHB3SMENR QSPISMEN LL_AHB3_GRP1_DisableClockStopSleep\n + * AHB3SMENR OSPI1SMEN LL_AHB3_GRP1_DisableClockStopSleep\n + * AHB3SMENR OSPI2SMEN LL_AHB3_GRP1_DisableClockStopSleep\n * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_AHB3_GRP1_PERIPH_FMC (*) - * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI + * @arg @ref LL_AHB3_GRP1_PERIPH_QSPI (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI1 (*) + * @arg @ref LL_AHB3_GRP1_PERIPH_OSPI2 (*) * * (*) value not defined in all devices. * @retval None @@ -1547,7 +1662,9 @@ __STATIC_INLINE void LL_APB1_GRP2_DisableClockStopSleep(uint32_t Periphs) * APB2ENR TIM17EN LL_APB2_GRP1_EnableClock\n * APB2ENR SAI1EN LL_APB2_GRP1_EnableClock\n * APB2ENR SAI2EN LL_APB2_GRP1_EnableClock\n - * APB2ENR DFSDM1EN LL_APB2_GRP1_EnableClock + * APB2ENR DFSDM1EN LL_APB2_GRP1_EnableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_EnableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_EnableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG * @arg @ref LL_APB2_GRP1_PERIPH_FW @@ -1562,6 +1679,8 @@ __STATIC_INLINE void LL_APB1_GRP2_DisableClockStopSleep(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None @@ -1589,7 +1708,9 @@ __STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) * APB2ENR TIM17EN LL_APB2_GRP1_IsEnabledClock\n * APB2ENR SAI1EN LL_APB2_GRP1_IsEnabledClock\n * APB2ENR SAI2EN LL_APB2_GRP1_IsEnabledClock\n - * APB2ENR DFSDM1EN LL_APB2_GRP1_IsEnabledClock + * APB2ENR DFSDM1EN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_IsEnabledClock\n + * APB2ENR DSIEN LL_APB2_GRP1_IsEnabledClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG * @arg @ref LL_APB2_GRP1_PERIPH_FW @@ -1604,6 +1725,8 @@ __STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval State of Periphs (1 or 0). @@ -1626,7 +1749,9 @@ __STATIC_INLINE uint32_t LL_APB2_GRP1_IsEnabledClock(uint32_t Periphs) * APB2ENR TIM17EN LL_APB2_GRP1_DisableClock\n * APB2ENR SAI1EN LL_APB2_GRP1_DisableClock\n * APB2ENR SAI2EN LL_APB2_GRP1_DisableClock\n - * APB2ENR DFSDM1EN LL_APB2_GRP1_DisableClock + * APB2ENR DFSDM1EN LL_APB2_GRP1_DisableClock\n + * APB2ENR LTDCEN LL_APB2_GRP1_DisableClock\n + * APB2ENR DSIEN LL_APB2_GRP1_DisableClock * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG * @arg @ref LL_APB2_GRP1_PERIPH_SDMMC1 (*) @@ -1640,6 +1765,8 @@ __STATIC_INLINE uint32_t LL_APB2_GRP1_IsEnabledClock(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None @@ -1662,7 +1789,9 @@ __STATIC_INLINE void LL_APB2_GRP1_DisableClock(uint32_t Periphs) * APB2RSTR TIM17RST LL_APB2_GRP1_ForceReset\n * APB2RSTR SAI1RST LL_APB2_GRP1_ForceReset\n * APB2RSTR SAI2RST LL_APB2_GRP1_ForceReset\n - * APB2RSTR DFSDM1RST LL_APB2_GRP1_ForceReset + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ForceReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ForceReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ForceReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_ALL * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG @@ -1677,6 +1806,8 @@ __STATIC_INLINE void LL_APB2_GRP1_DisableClock(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None @@ -1699,7 +1830,9 @@ __STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs) * APB2RSTR TIM17RST LL_APB2_GRP1_ReleaseReset\n * APB2RSTR SAI1RST LL_APB2_GRP1_ReleaseReset\n * APB2RSTR SAI2RST LL_APB2_GRP1_ReleaseReset\n - * APB2RSTR DFSDM1RST LL_APB2_GRP1_ReleaseReset + * APB2RSTR DFSDM1RST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR LTDCRST LL_APB2_GRP1_ReleaseReset\n + * APB2RSTR DSIRST LL_APB2_GRP1_ReleaseReset * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_ALL * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG @@ -1714,6 +1847,8 @@ __STATIC_INLINE void LL_APB2_GRP1_ForceReset(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None @@ -1736,7 +1871,9 @@ __STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs) * APB2SMENR TIM17SMEN LL_APB2_GRP1_EnableClockStopSleep\n * APB2SMENR SAI1SMEN LL_APB2_GRP1_EnableClockStopSleep\n * APB2SMENR SAI2SMEN LL_APB2_GRP1_EnableClockStopSleep\n - * APB2SMENR DFSDM1SMEN LL_APB2_GRP1_EnableClockStopSleep + * APB2SMENR DFSDM1SMEN LL_APB2_GRP1_EnableClockStopSleep\n + * APB2SMENR LTDCSMEN LL_APB2_GRP1_EnableClockStopSleep\n + * APB2SMENR DSISMEN LL_APB2_GRP1_EnableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG * @arg @ref LL_APB2_GRP1_PERIPH_SDMMC1 (*) @@ -1750,6 +1887,8 @@ __STATIC_INLINE void LL_APB2_GRP1_ReleaseReset(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None @@ -1776,7 +1915,9 @@ __STATIC_INLINE void LL_APB2_GRP1_EnableClockStopSleep(uint32_t Periphs) * APB2SMENR TIM17SMEN LL_APB2_GRP1_DisableClockStopSleep\n * APB2SMENR SAI1SMEN LL_APB2_GRP1_DisableClockStopSleep\n * APB2SMENR SAI2SMEN LL_APB2_GRP1_DisableClockStopSleep\n - * APB2SMENR DFSDM1SMEN LL_APB2_GRP1_DisableClockStopSleep + * APB2SMENR DFSDM1SMEN LL_APB2_GRP1_DisableClockStopSleep\n + * APB2SMENR LTDCSMEN LL_APB2_GRP1_DisableClockStopSleep\n + * APB2SMENR DSISMEN LL_APB2_GRP1_DisableClockStopSleep * @param Periphs This parameter can be a combination of the following values: * @arg @ref LL_APB2_GRP1_PERIPH_SYSCFG * @arg @ref LL_APB2_GRP1_PERIPH_SDMMC1 (*) @@ -1790,6 +1931,8 @@ __STATIC_INLINE void LL_APB2_GRP1_EnableClockStopSleep(uint32_t Periphs) * @arg @ref LL_APB2_GRP1_PERIPH_SAI1 * @arg @ref LL_APB2_GRP1_PERIPH_SAI2 (*) * @arg @ref LL_APB2_GRP1_PERIPH_DFSDM1 (*) + * @arg @ref LL_APB2_GRP1_PERIPH_LTDC (*) + * @arg @ref LL_APB2_GRP1_PERIPH_DSI (*) * * (*) value not defined in all devices. * @retval None diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.c index 27b494cdc0..9f902eb443 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_comp.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief COMP LL module driver ****************************************************************************** * @attention @@ -94,7 +92,7 @@ /* the same on all COMP instances. */ /* However, comparator instance kept as macro parameter for */ /* compatibility with other STM32 families. */ -#if defined(COMP_CSR_INMESEL_1) && defined(DAC_CHANNEL2_SUPPORT) +#if defined(COMP_CSR_INMESEL_1) #define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \ ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_2VREFINT) \ @@ -108,30 +106,6 @@ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO4) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO5) \ ) -#elif defined(COMP_CSR_INMESEL_1) -#define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \ - ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_2VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_3_4VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH1) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO1) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO2) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO3) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO4) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO5) \ - ) -#elif defined(DAC_CHANNEL2_SUPPORT) -#define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \ - ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_2VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_3_4VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VREFINT) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH1) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH2) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO1) \ - || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO2) \ - ) #else #define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \ ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \ @@ -139,6 +113,7 @@ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_3_4VREFINT) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VREFINT) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH1) \ + || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH2) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO1) \ || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO2) \ ) @@ -156,14 +131,25 @@ || ((__POLARITY__) == LL_COMP_OUTPUTPOL_INVERTED) \ ) -#define IS_LL_COMP_OUTPUT_BLANKING_SOURCE(__OUTPUT_BLANKING_SOURCE__) \ - ( ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_NONE) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM1_OC5_COMP1) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM2_OC3_COMP1) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC3_COMP1) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC4_COMP2) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM8_OC5_COMP2) \ - || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM15_OC1_COMP2) \ +#define IS_LL_COMP_OUTPUT_BLANKING_SOURCE(__COMP_INSTANCE__, __OUTPUT_BLANKING_SOURCE__) \ + (((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_NONE) \ + ? ( \ + (1U) \ + ) \ + : \ + (((__COMP_INSTANCE__) == COMP1) \ + ? ( \ + ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM1_OC5_COMP1) \ + || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM2_OC3_COMP1) \ + || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC3_COMP1) \ + ) \ + : \ + ( \ + ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC4_COMP2) \ + || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM8_OC5_COMP2) \ + || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM15_OC1_COMP2) \ + ) \ + ) \ ) /** @@ -241,7 +227,7 @@ ErrorStatus LL_COMP_Init(COMP_TypeDef *COMPx, LL_COMP_InitTypeDef *COMP_InitStru assert_param(IS_LL_COMP_INPUT_MINUS(COMPx, COMP_InitStruct->InputMinus)); assert_param(IS_LL_COMP_INPUT_HYSTERESIS(COMP_InitStruct->InputHysteresis)); assert_param(IS_LL_COMP_OUTPUT_POLARITY(COMP_InitStruct->OutputPolarity)); - assert_param(IS_LL_COMP_OUTPUT_BLANKING_SOURCE(COMP_InitStruct->OutputBlankingSource)); + assert_param(IS_LL_COMP_OUTPUT_BLANKING_SOURCE(COMPx, COMP_InitStruct->OutputBlankingSource)); /* Note: Hardware constraint (refer to description of this function) */ /* COMP instance must not be locked. */ @@ -305,8 +291,8 @@ ErrorStatus LL_COMP_Init(COMP_TypeDef *COMPx, LL_COMP_InitTypeDef *COMP_InitStru /** * @brief Set each @ref LL_COMP_InitTypeDef field to default value. - * @param COMP_InitStruct: pointer to a @ref LL_COMP_InitTypeDef structure - * whose fields will be set to default values. + * @param COMP_InitStruct Pointer to a @ref LL_COMP_InitTypeDef structure + * whose fields will be set to default values. * @retval None */ void LL_COMP_StructInit(LL_COMP_InitTypeDef *COMP_InitStruct) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.h index 8d5d8f6ff3..8b02ddb71e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_comp.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_comp.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of COMP LL module. ****************************************************************************** * @attention @@ -64,7 +62,7 @@ extern "C" { */ /* COMP registers bits positions */ -#define LL_COMP_OUTPUT_LEVEL_BITOFFSET_POS ((uint32_t)30U) /* Value equivalent to POSITION_VAL(COMP_CSR_VALUE) */ +#define LL_COMP_OUTPUT_LEVEL_BITOFFSET_POS (30U) /* Value equivalent to POSITION_VAL(COMP_CSR_VALUE) */ /** * @} @@ -127,7 +125,7 @@ typedef struct /** @defgroup COMP_LL_EC_COMMON_WINDOWMODE Comparator common modes - Window mode * @{ */ -#define LL_COMP_WINDOWMODE_DISABLE ((uint32_t)0x00000000U) /*!< Window mode disable: Comparators 1 and 2 are independent */ +#define LL_COMP_WINDOWMODE_DISABLE (0x00000000U) /*!< Window mode disable: Comparators 1 and 2 are independent */ #define LL_COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON (COMP_CSR_WINMODE) /*!< Window mode enable: Comparators instances pair COMP1 and COMP2 have their input plus connected together. The common input is COMP1 input plus (COMP2 input plus is no more accessible). */ /** * @} @@ -136,7 +134,7 @@ typedef struct /** @defgroup COMP_LL_EC_POWERMODE Comparator modes - Power mode * @{ */ -#define LL_COMP_POWERMODE_HIGHSPEED ((uint32_t)0x00000000U) /*!< COMP power mode to high speed */ +#define LL_COMP_POWERMODE_HIGHSPEED (0x00000000U) /*!< COMP power mode to high speed */ #define LL_COMP_POWERMODE_MEDIUMSPEED (COMP_CSR_PWRMODE_0) /*!< COMP power mode to medium speed */ #define LL_COMP_POWERMODE_ULTRALOWPOWER (COMP_CSR_PWRMODE_1 | COMP_CSR_PWRMODE_0) /*!< COMP power mode to ultra-low power */ /** @@ -146,7 +144,7 @@ typedef struct /** @defgroup COMP_LL_EC_INPUT_PLUS Comparator inputs - Input plus (input non-inverting) selection * @{ */ -#define LL_COMP_INPUT_PLUS_IO1 ((uint32_t)0x00000000U) /*!< Comparator input plus connected to IO1 (pin PC5 for COMP1, pin PB4 for COMP2) */ +#define LL_COMP_INPUT_PLUS_IO1 (0x00000000U) /*!< Comparator input plus connected to IO1 (pin PC5 for COMP1, pin PB4 for COMP2) */ #define LL_COMP_INPUT_PLUS_IO2 (COMP_CSR_INPSEL_0) /*!< Comparator input plus connected to IO2 (pin PB2 for COMP1, pin PB6 for COMP2) */ #if defined(COMP_CSR_INPSEL_1) #define LL_COMP_INPUT_PLUS_IO3 (COMP_CSR_INPSEL_1) /*!< Comparator input plus connected to IO3 (pin PA1 for COMP1, pin PA3 for COMP2) */ @@ -163,9 +161,7 @@ typedef struct #define LL_COMP_INPUT_MINUS_3_4VREFINT ( COMP_CSR_INMSEL_1 | COMP_CSR_SCALEN | COMP_CSR_BRGEN) /*!< Comparator input minus connected to 3/4 VrefInt */ #define LL_COMP_INPUT_MINUS_VREFINT ( COMP_CSR_INMSEL_1 | COMP_CSR_INMSEL_0 | COMP_CSR_SCALEN ) /*!< Comparator input minus connected to VrefInt */ #define LL_COMP_INPUT_MINUS_DAC1_CH1 (COMP_CSR_INMSEL_2 ) /*!< Comparator input minus connected to DAC1 channel 1 (DAC_OUT1) */ -#if defined(DAC_CHANNEL2_SUPPORT) #define LL_COMP_INPUT_MINUS_DAC1_CH2 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_0) /*!< Comparator input minus connected to DAC1 channel 2 (DAC_OUT2) */ -#endif #define LL_COMP_INPUT_MINUS_IO1 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 ) /*!< Comparator input minus connected to IO1 (pin PB1 for COMP1, pin PB3 for COMP2) */ #define LL_COMP_INPUT_MINUS_IO2 (COMP_CSR_INMSEL_2 | COMP_CSR_INMSEL_1 | COMP_CSR_INMSEL_0) /*!< Comparator input minus connected to IO2 (pin PC4 for COMP1, pin PB7 for COMP2) */ #if defined(COMP_CSR_INMESEL_1) @@ -187,9 +183,7 @@ typedef struct #define LL_COMP_INVERTINGINPUT_3_4VREFINT LL_COMP_INPUT_MINUS_3_4VREFINT #define LL_COMP_INVERTINGINPUT_VREFINT LL_COMP_INPUT_MINUS_VREFINT #define LL_COMP_INVERTINGINPUT_DAC1 LL_COMP_INPUT_MINUS_DAC1_CH1 -#if defined(DAC_CHANNEL2_SUPPORT) #define LL_COMP_INVERTINGINPUT_DAC2 LL_COMP_INPUT_MINUS_DAC1_CH2 -#endif #define LL_COMP_INVERTINGINPUT_IO1 LL_COMP_INPUT_MINUS_IO1 #define LL_COMP_INVERTINGINPUT_IO2 LL_COMP_INPUT_MINUS_IO2 #if defined(COMP_CSR_INMESEL_1) @@ -210,7 +204,7 @@ typedef struct /** @defgroup COMP_LL_EC_INPUT_HYSTERESIS Comparator input - Hysteresis * @{ */ -#define LL_COMP_HYSTERESIS_NONE ((uint32_t)0x00000000U) /*!< No hysteresis */ +#define LL_COMP_HYSTERESIS_NONE (0x00000000U) /*!< No hysteresis */ #define LL_COMP_HYSTERESIS_LOW ( COMP_CSR_HYST_0) /*!< Hysteresis level low */ #define LL_COMP_HYSTERESIS_MEDIUM (COMP_CSR_HYST_1 ) /*!< Hysteresis level medium */ #define LL_COMP_HYSTERESIS_HIGH (COMP_CSR_HYST_1 | COMP_CSR_HYST_0) /*!< Hysteresis level high */ @@ -221,7 +215,7 @@ typedef struct /** @defgroup COMP_LL_EC_OUTPUT_POLARITY Comparator output - Output polarity * @{ */ -#define LL_COMP_OUTPUTPOL_NONINVERTED ((uint32_t)0x00000000U) /*!< COMP output polarity is not inverted: comparator output is high when the plus (non-inverting) input is at a higher voltage than the minus (inverting) input */ +#define LL_COMP_OUTPUTPOL_NONINVERTED (0x00000000U) /*!< COMP output polarity is not inverted: comparator output is high when the plus (non-inverting) input is at a higher voltage than the minus (inverting) input */ #define LL_COMP_OUTPUTPOL_INVERTED (COMP_CSR_POLARITY) /*!< COMP output polarity is inverted: comparator output is low when the plus (non-inverting) input is at a lower voltage than the minus (inverting) input */ /** * @} @@ -230,7 +224,7 @@ typedef struct /** @defgroup COMP_LL_EC_OUTPUT_BLANKING_SOURCE Comparator output - Blanking source * @{ */ -#define LL_COMP_BLANKINGSRC_NONE ((uint32_t)0x00000000U) /*!__REG__, (__VALUE__)) +#define LL_CRC_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, __VALUE__) /** * @brief Read a value in CRC register @@ -354,7 +352,10 @@ __STATIC_INLINE void LL_CRC_FeedData32(CRC_TypeDef *CRCx, uint32_t InData) */ __STATIC_INLINE void LL_CRC_FeedData16(CRC_TypeDef *CRCx, uint16_t InData) { - *(uint16_t __IO *)(&CRCx->DR) = (uint16_t) InData; + __IO uint16_t *pReg; + + pReg = (__IO uint16_t *)(__IO void *)(&CRCx->DR); + *pReg = InData; } /** @@ -418,10 +419,11 @@ __STATIC_INLINE uint8_t LL_CRC_ReadData7(CRC_TypeDef *CRCx) /** * @brief Return data stored in the Independent Data(IDR) register. - * @note This register can be used as a temporary storage location for one byte. + * @note This register can be used as a temporary storage location. + * @note Refer to the Reference Manual to get the authorized data length in bits. * @rmtoll IDR IDR LL_CRC_Read_IDR * @param CRCx CRC Instance - * @retval Value stored in CRC_IDR register (General-purpose 8-bit data register). + * @retval Value stored in CRC_IDR register */ __STATIC_INLINE uint32_t LL_CRC_Read_IDR(CRC_TypeDef *CRCx) { @@ -430,15 +432,20 @@ __STATIC_INLINE uint32_t LL_CRC_Read_IDR(CRC_TypeDef *CRCx) /** * @brief Store data in the Independent Data(IDR) register. - * @note This register can be used as a temporary storage location for one byte. + * @note This register can be used as a temporary storage location. + * @note Refer to the Reference Manual to get the authorized data length in bits. * @rmtoll IDR IDR LL_CRC_Write_IDR * @param CRCx CRC Instance - * @param InData value to be stored in CRC_IDR register (8-bit) between between Min_Data=0 and Max_Data=0xFF + * @param InData value to be stored in CRC_IDR register * @retval None */ __STATIC_INLINE void LL_CRC_Write_IDR(CRC_TypeDef *CRCx, uint32_t InData) { +#if (CRC_IDR_IDR == 0x0FFU) *((uint8_t __IO *)(&CRCx->IDR)) = (uint8_t) InData; +#else + WRITE_REG(CRCx->IDR, InData); +#endif } /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.c index a0a8108087..83b775ad36 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_crs.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief CRS LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.h index 40267e697e..4eb39e0989 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_crs.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_crs.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of CRS LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.c index 79f8ba4867..30a154f970 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_dac.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DAC LL module driver ****************************************************************************** * @attention @@ -78,6 +76,22 @@ ) #endif /* DAC_CHANNEL2_SUPPORT */ +#if defined (DAC_CR_TSEL1_3) +#define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ + ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM1_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM1_OUT_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_LPTIM2_OUT_TRGO) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ + || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ + ) +#else #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__) \ ( ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE) \ || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO) \ @@ -88,6 +102,7 @@ || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO) \ || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9) \ ) +#endif /* DAC_CR_TSEL1_3 */ #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__) \ ( ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE) \ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.h index 74c41604b7..e312a599c3 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dac.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_dac.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DAC LL module. ****************************************************************************** * @attention @@ -269,14 +267,29 @@ typedef struct /** @defgroup DAC_LL_EC_TRIGGER_SOURCE DAC trigger source * @{ */ -#define LL_DAC_TRIG_SOFTWARE (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger internal (SW start) */ -#define LL_DAC_TRIG_EXT_TIM2_TRGO (DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external IP: TIM2 TRGO. */ -#define LL_DAC_TRIG_EXT_TIM4_TRGO (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM4 TRGO. */ -#define LL_DAC_TRIG_EXT_TIM5_TRGO ( DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM5 TRGO. */ -#define LL_DAC_TRIG_EXT_TIM6_TRGO 0x00000000U /*!< DAC channel conversion trigger from external IP: TIM6 TRGO. */ -#define LL_DAC_TRIG_EXT_TIM7_TRGO ( DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: TIM7 TRGO. */ -#define LL_DAC_TRIG_EXT_TIM8_TRGO ( DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM8 TRGO. */ -#define LL_DAC_TRIG_EXT_EXTI_LINE9 (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: external interrupt line 9. */ +#if defined (DAC_CR_TSEL1_3) +#define LL_DAC_TRIG_EXT_TIM1_TRGO ( DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM1 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM2_TRGO ( DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: TIM2 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM4_TRGO ( DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM4 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM5_TRGO ( DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external IP: TIM4 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM6_TRGO ( DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM6 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM7_TRGO ( DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: TIM7 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM8_TRGO ( DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM8 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM15_TRGO (DAC_CR_TSEL1_3 ) /*!< DAC channel conversion trigger from external IP: TIM15 TRGO. */ +#define LL_DAC_TRIG_EXT_LPTIM1_OUT_TRGO (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: LPTIM1 OUT TRGO. */ +#define LL_DAC_TRIG_EXT_LPTIM2_OUT_TRGO (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external IP: LPTIM2 OUT TRGO. */ +#define LL_DAC_TRIG_EXT_EXTI_LINE9 (DAC_CR_TSEL1_3 | DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: external interrupt line 9. */ +#define LL_DAC_TRIG_SOFTWARE 0x00000000U /*!< DAC channel conversion trigger internal (SW start) */ +#else +#define LL_DAC_TRIG_SOFTWARE (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger internal (SW start) */ +#define LL_DAC_TRIG_EXT_TIM2_TRGO (DAC_CR_TSEL1_2 ) /*!< DAC channel conversion trigger from external IP: TIM2 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM4_TRGO (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM4 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM5_TRGO ( DAC_CR_TSEL1_1 | DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM5 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM6_TRGO 0x00000000U /*!< DAC channel conversion trigger from external IP: TIM6 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM7_TRGO ( DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: TIM7 TRGO. */ +#define LL_DAC_TRIG_EXT_TIM8_TRGO ( DAC_CR_TSEL1_0) /*!< DAC channel conversion trigger from external IP: TIM8 TRGO. */ +#define LL_DAC_TRIG_EXT_EXTI_LINE9 (DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 ) /*!< DAC channel conversion trigger from external IP: external interrupt line 9. */ +#endif /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.c index 88ab69fa2e..c60a79c7e2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.c @@ -2,13 +2,11 @@ ****************************************************************************** * @file stm32l4xx_ll_dma.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DMA LL module driver. ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2017 STMicroelectronics

+ *

© COPYRIGHT(c) 2016 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -83,8 +81,11 @@ ((__VALUE__) == LL_DMA_MDATAALIGN_HALFWORD) || \ ((__VALUE__) == LL_DMA_MDATAALIGN_WORD)) -#define IS_LL_DMA_NBDATA(__VALUE__) ((__VALUE__) <= (uint32_t)0x0000FFFFU) +#define IS_LL_DMA_NBDATA(__VALUE__) ((__VALUE__) <= 0x0000FFFFU) +#if defined(DMAMUX1) +#define IS_LL_DMA_PERIPHREQUEST(__VALUE__) ((__VALUE__) <= 93U) +#else #define IS_LL_DMA_PERIPHREQUEST(__VALUE__) (((__VALUE__) == LL_DMA_REQUEST_0) || \ ((__VALUE__) == LL_DMA_REQUEST_1) || \ ((__VALUE__) == LL_DMA_REQUEST_2) || \ @@ -93,6 +94,7 @@ ((__VALUE__) == LL_DMA_REQUEST_5) || \ ((__VALUE__) == LL_DMA_REQUEST_6) || \ ((__VALUE__) == LL_DMA_REQUEST_7)) +#endif /* DMAMUX1 */ #define IS_LL_DMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_DMA_PRIORITY_LOW) || \ ((__VALUE__) == LL_DMA_PRIORITY_MEDIUM) || \ @@ -226,8 +228,13 @@ uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel) /* Reset DMAx_Channely memory address register */ LL_DMA_WriteReg(tmp, CMAR, 0U); +#if defined(DMAMUX1) + /* Reset Request register field for DMAx Channel */ + LL_DMA_SetPeriphRequest(DMAx, Channel, LL_DMAMUX_REQUEST_MEM2MEM); +#else /* Reset Request register field for DMAx Channel */ LL_DMA_SetPeriphRequest(DMAx, Channel, LL_DMA_REQUEST_0); +#endif /* DMAMUX1 */ if (Channel == LL_DMA_CHANNEL_1) { @@ -347,11 +354,19 @@ uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DM */ LL_DMA_SetDataLength(DMAx, Channel, DMA_InitStruct->NbData); +#if defined(DMAMUX1) + /*--------------------------- DMAMUXx CCR Configuration ---------------------- + * Configure the DMA request for DMA Channels on DMAMUX Channel x with parameter : + * - PeriphRequest: DMA_CxCR[7:0] bits + */ + LL_DMA_SetPeriphRequest(DMAx, Channel, DMA_InitStruct->PeriphRequest); +#else /*--------------------------- DMAx CSELR Configuration ----------------------- - * Configure the peripheral base address with parameter : + * Configure the DMA request for DMA instance on Channel x with parameter : * - PeriphRequest: DMA_CSELR[31:0] bits */ LL_DMA_SetPeriphRequest(DMAx, Channel, DMA_InitStruct->PeriphRequest); +#endif /* DMAMUX1 */ return SUCCESS; } @@ -364,16 +379,20 @@ uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DM void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct) { /* Set DMA_InitStruct fields to default values */ - DMA_InitStruct->PeriphOrM2MSrcAddress = (uint32_t)0x00000000U; - DMA_InitStruct->MemoryOrM2MDstAddress = (uint32_t)0x00000000U; + DMA_InitStruct->PeriphOrM2MSrcAddress = 0x00000000U; + DMA_InitStruct->MemoryOrM2MDstAddress = 0x00000000U; DMA_InitStruct->Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; DMA_InitStruct->Mode = LL_DMA_MODE_NORMAL; DMA_InitStruct->PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; DMA_InitStruct->MemoryOrM2MDstIncMode = LL_DMA_MEMORY_NOINCREMENT; DMA_InitStruct->PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE; DMA_InitStruct->MemoryOrM2MDstDataSize = LL_DMA_MDATAALIGN_BYTE; - DMA_InitStruct->NbData = (uint32_t)0x00000000U; + DMA_InitStruct->NbData = 0x00000000U; +#if defined(DMAMUX1) + DMA_InitStruct->PeriphRequest = LL_DMAMUX_REQUEST_MEM2MEM; +#else DMA_InitStruct->PeriphRequest = LL_DMA_REQUEST_0; +#endif /* DMAMUX1 */ DMA_InitStruct->Priority = LL_DMA_PRIORITY_LOW; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.h index 65ac16c405..f6c75b0416 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_dma.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DMA LL module. ****************************************************************************** * @attention @@ -45,6 +43,9 @@ extern "C" { /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx.h" +#if defined(DMAMUX1) +#include "stm32l4xx_ll_dmamux.h" +#endif /* DMAMUX1 */ /** @addtogroup STM32L4xx_LL_Driver * @{ @@ -77,6 +78,8 @@ static const uint8_t CHANNEL_OFFSET_TAB[] = */ /* Private constants ---------------------------------------------------------*/ +#if defined(DMAMUX1) +#else /** @defgroup DMA_LL_Private_Constants DMA Private Constants * @{ */ @@ -88,8 +91,27 @@ static const uint8_t CHANNEL_OFFSET_TAB[] = /** * @} */ +#endif /* DMAMUX1 */ /* Private macros ------------------------------------------------------------*/ +#if defined(DMAMUX1) +/** @defgroup DMA_LL_Private_Macros DMA Private Macros + * @{ + */ +/** + * @brief Helper macro to convert DMA Instance DMAx into DMAMUX channel + * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7. + * DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7. + * @param __DMA_INSTANCE__ DMAx + * @retval Channel_Offset (LL_DMA_CHANNEL_7 or 0). + */ +#define __LL_DMA_INSTANCE_TO_DMAMUX_CHANNEL(__DMA_INSTANCE__) \ +(((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) ? 0 : LL_DMA_CHANNEL_7) + +/** + * @} + */ +#else #if defined(USE_FULL_LL_DRIVER) /** @defgroup DMA_LL_Private_Macros DMA Private Macros * @{ @@ -98,6 +120,7 @@ static const uint8_t CHANNEL_OFFSET_TAB[] = * @} */ #endif /*USE_FULL_LL_DRIVER*/ +#endif /* DMAMUX1 */ /* Exported types ------------------------------------------------------------*/ #if defined(USE_FULL_LL_DRIVER) @@ -159,11 +182,19 @@ typedef struct This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */ +#if defined(DMAMUX1) + + uint32_t PeriphRequest; /*!< Specifies the peripheral request. + This parameter can be a value of @ref DMAMUX_LL_EC_REQUEST + + This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */ +#else uint32_t PeriphRequest; /*!< Specifies the peripheral request. This parameter can be a value of @ref DMA_LL_EC_REQUEST This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */ +#endif /* DMAMUX1 */ uint32_t Priority; /*!< Specifies the channel priority level. This parameter can be a value of @ref DMA_LL_EC_PRIORITY @@ -266,15 +297,15 @@ typedef struct /** @defgroup DMA_LL_EC_CHANNEL CHANNEL * @{ */ -#define LL_DMA_CHANNEL_1 ((uint32_t)0x00000001U) /*!< DMA Channel 1 */ -#define LL_DMA_CHANNEL_2 ((uint32_t)0x00000002U) /*!< DMA Channel 2 */ -#define LL_DMA_CHANNEL_3 ((uint32_t)0x00000003U) /*!< DMA Channel 3 */ -#define LL_DMA_CHANNEL_4 ((uint32_t)0x00000004U) /*!< DMA Channel 4 */ -#define LL_DMA_CHANNEL_5 ((uint32_t)0x00000005U) /*!< DMA Channel 5 */ -#define LL_DMA_CHANNEL_6 ((uint32_t)0x00000006U) /*!< DMA Channel 6 */ -#define LL_DMA_CHANNEL_7 ((uint32_t)0x00000007U) /*!< DMA Channel 7 */ +#define LL_DMA_CHANNEL_1 0x00000001U /*!< DMA Channel 1 */ +#define LL_DMA_CHANNEL_2 0x00000002U /*!< DMA Channel 2 */ +#define LL_DMA_CHANNEL_3 0x00000003U /*!< DMA Channel 3 */ +#define LL_DMA_CHANNEL_4 0x00000004U /*!< DMA Channel 4 */ +#define LL_DMA_CHANNEL_5 0x00000005U /*!< DMA Channel 5 */ +#define LL_DMA_CHANNEL_6 0x00000006U /*!< DMA Channel 6 */ +#define LL_DMA_CHANNEL_7 0x00000007U /*!< DMA Channel 7 */ #if defined(USE_FULL_LL_DRIVER) -#define LL_DMA_CHANNEL_ALL ((uint32_t)0xFFFF0000U) /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */ +#define LL_DMA_CHANNEL_ALL 0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */ #endif /*USE_FULL_LL_DRIVER*/ /** * @} @@ -283,7 +314,7 @@ typedef struct /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction * @{ */ -#define LL_DMA_DIRECTION_PERIPH_TO_MEMORY ((uint32_t)0x00000000U) /*!< Peripheral to memory direction */ +#define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */ #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR /*!< Memory to peripheral direction */ #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM /*!< Memory to memory direction */ /** @@ -293,7 +324,7 @@ typedef struct /** @defgroup DMA_LL_EC_MODE Transfer mode * @{ */ -#define LL_DMA_MODE_NORMAL ((uint32_t)0x00000000U) /*!< Normal Mode */ +#define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */ #define LL_DMA_MODE_CIRCULAR DMA_CCR_CIRC /*!< Circular Mode */ /** * @} @@ -303,7 +334,7 @@ typedef struct * @{ */ #define LL_DMA_PERIPH_INCREMENT DMA_CCR_PINC /*!< Peripheral increment mode Enable */ -#define LL_DMA_PERIPH_NOINCREMENT ((uint32_t)0x00000000U) /*!< Peripheral increment mode Disable */ +#define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */ /** * @} */ @@ -312,7 +343,7 @@ typedef struct * @{ */ #define LL_DMA_MEMORY_INCREMENT DMA_CCR_MINC /*!< Memory increment mode Enable */ -#define LL_DMA_MEMORY_NOINCREMENT ((uint32_t)0x00000000U) /*!< Memory increment mode Disable */ +#define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */ /** * @} */ @@ -320,7 +351,7 @@ typedef struct /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment * @{ */ -#define LL_DMA_PDATAALIGN_BYTE ((uint32_t)0x00000000U) /*!< Peripheral data alignment : Byte */ +#define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */ #define LL_DMA_PDATAALIGN_HALFWORD DMA_CCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */ #define LL_DMA_PDATAALIGN_WORD DMA_CCR_PSIZE_1 /*!< Peripheral data alignment : Word */ /** @@ -330,7 +361,7 @@ typedef struct /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment * @{ */ -#define LL_DMA_MDATAALIGN_BYTE ((uint32_t)0x00000000U) /*!< Memory data alignment : Byte */ +#define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */ #define LL_DMA_MDATAALIGN_HALFWORD DMA_CCR_MSIZE_0 /*!< Memory data alignment : HalfWord */ #define LL_DMA_MDATAALIGN_WORD DMA_CCR_MSIZE_1 /*!< Memory data alignment : Word */ /** @@ -340,7 +371,7 @@ typedef struct /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level * @{ */ -#define LL_DMA_PRIORITY_LOW ((uint32_t)0x00000000U) /*!< Priority level : Low */ +#define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */ #define LL_DMA_PRIORITY_MEDIUM DMA_CCR_PL_0 /*!< Priority level : Medium */ #define LL_DMA_PRIORITY_HIGH DMA_CCR_PL_1 /*!< Priority level : High */ #define LL_DMA_PRIORITY_VERYHIGH DMA_CCR_PL /*!< Priority level : Very_High */ @@ -348,20 +379,123 @@ typedef struct * @} */ -/** @defgroup DMA_LL_EC_REQUEST Transfer peripheral request +#if defined(DMAMUX1) +/** @defgroup DMAMUX_LL_EC_REQUEST Transfer request * @{ */ -#define LL_DMA_REQUEST_0 ((uint32_t)0x00000000U) /*!< DMA peripheral request 0 */ -#define LL_DMA_REQUEST_1 ((uint32_t)0x00000001U) /*!< DMA peripheral request 1 */ -#define LL_DMA_REQUEST_2 ((uint32_t)0x00000002U) /*!< DMA peripheral request 2 */ -#define LL_DMA_REQUEST_3 ((uint32_t)0x00000003U) /*!< DMA peripheral request 3 */ -#define LL_DMA_REQUEST_4 ((uint32_t)0x00000004U) /*!< DMA peripheral request 4 */ -#define LL_DMA_REQUEST_5 ((uint32_t)0x00000005U) /*!< DMA peripheral request 5 */ -#define LL_DMA_REQUEST_6 ((uint32_t)0x00000006U) /*!< DMA peripheral request 6 */ -#define LL_DMA_REQUEST_7 ((uint32_t)0x00000007U) /*!< DMA peripheral request 7 */ +#define LL_DMAMUX_REQUEST_MEM2MEM 0U /*!< Memory to memory transfer */ +#define LL_DMAMUX_REQUEST_GENERATOR0 1U /*!< DMAMUX request generator 0 */ +#define LL_DMAMUX_REQUEST_GENERATOR1 2U /*!< DMAMUX request generator 1 */ +#define LL_DMAMUX_REQUEST_GENERATOR2 3U /*!< DMAMUX request generator 2 */ +#define LL_DMAMUX_REQUEST_GENERATOR3 4U /*!< DMAMUX request generator 3 */ +#define LL_DMAMUX_REQUEST_ADC1 5U /*!< DMAMUX ADC1 request */ +#define LL_DMAMUX_REQUEST_DAC1_CH1 6U /*!< DMAMUX DAC1 CH1 request */ +#define LL_DMAMUX_REQUEST_DAC1_CH2 7U /*!< DMAMUX DAC1 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM6_UP 8U /*!< DMAMUX TIM6 UP request */ +#define LL_DMAMUX_REQUEST_TIM7_UP 9U /*!< DMAMUX TIM7 UP request */ +#define LL_DMAMUX_REQUEST_SPI1_RX 10U /*!< DMAMUX SPI1 RX request */ +#define LL_DMAMUX_REQUEST_SPI1_TX 11U /*!< DMAMUX SPI1 TX request */ +#define LL_DMAMUX_REQUEST_SPI2_RX 12U /*!< DMAMUX SPI2 RX request */ +#define LL_DMAMUX_REQUEST_SPI2_TX 13U /*!< DMAMUX SPI2 TX request */ +#define LL_DMAMUX_REQUEST_SPI3_RX 14U /*!< DMAMUX SPI3 RX request */ +#define LL_DMAMUX_REQUEST_SPI3_TX 15U /*!< DMAMUX SPI3 TX request */ +#define LL_DMAMUX_REQUEST_I2C1_RX 16U /*!< DMAMUX I2C1 RX request */ +#define LL_DMAMUX_REQUEST_I2C1_TX 17U /*!< DMAMUX I2C1 TX request */ +#define LL_DMAMUX_REQUEST_I2C2_RX 18U /*!< DMAMUX I2C2 RX request */ +#define LL_DMAMUX_REQUEST_I2C2_TX 19U /*!< DMAMUX I2C2 TX request */ +#define LL_DMAMUX_REQUEST_I2C3_RX 20U /*!< DMAMUX I2C3 RX request */ +#define LL_DMAMUX_REQUEST_I2C3_TX 21U /*!< DMAMUX I2C3 TX request */ +#define LL_DMAMUX_REQUEST_I2C4_RX 22U /*!< DMAMUX I2C4 RX request */ +#define LL_DMAMUX_REQUEST_I2C4_TX 23U /*!< DMAMUX I2C4 TX request */ +#define LL_DMAMUX_REQUEST_USART1_RX 24U /*!< DMAMUX USART1 RX request */ +#define LL_DMAMUX_REQUEST_USART1_TX 25U /*!< DMAMUX USART1 TX request */ +#define LL_DMAMUX_REQUEST_USART2_RX 26U /*!< DMAMUX USART2 RX request */ +#define LL_DMAMUX_REQUEST_USART2_TX 27U /*!< DMAMUX USART2 TX request */ +#define LL_DMAMUX_REQUEST_USART3_RX 28U /*!< DMAMUX USART3 RX request */ +#define LL_DMAMUX_REQUEST_USART3_TX 29U /*!< DMAMUX USART3 TX request */ +#define LL_DMAMUX_REQUEST_UART4_RX 30U /*!< DMAMUX UART4 RX request */ +#define LL_DMAMUX_REQUEST_UART4_TX 31U /*!< DMAMUX UART4 TX request */ +#define LL_DMAMUX_REQUEST_UART5_RX 32U /*!< DMAMUX UART5 RX request */ +#define LL_DMAMUX_REQUEST_UART5_TX 33U /*!< DMAMUX UART5 TX request */ +#define LL_DMAMUX_REQUEST_LPUART1_RX 34U /*!< DMAMUX LPUART1 RX request */ +#define LL_DMAMUX_REQUEST_LPUART1_TX 35U /*!< DMAMUX LPUART1 TX request */ +#define LL_DMAMUX_REQUEST_SAI1_A 36U /*!< DMAMUX SAI1 A request */ +#define LL_DMAMUX_REQUEST_SAI1_B 37U /*!< DMAMUX SAI1 B request */ +#define LL_DMAMUX_REQUEST_SAI2_A 38U /*!< DMAMUX SAI2 A request */ +#define LL_DMAMUX_REQUEST_SAI2_B 39U /*!< DMAMUX SAI2 B request */ +#define LL_DMAMUX_REQUEST_OSPI1 40U /*!< DMAMUX OCTOSPI1 request */ +#define LL_DMAMUX_REQUEST_OSPI2 41U /*!< DMAMUX OCTOSPI2 request */ +#define LL_DMAMUX_REQUEST_TIM1_CH1 42U /*!< DMAMUX TIM1 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM1_CH2 43U /*!< DMAMUX TIM1 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM1_CH3 44U /*!< DMAMUX TIM1 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM1_CH4 45U /*!< DMAMUX TIM1 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM1_UP 46U /*!< DMAMUX TIM1 UP request */ +#define LL_DMAMUX_REQUEST_TIM1_TRIG 47U /*!< DMAMUX TIM1 TRIG request */ +#define LL_DMAMUX_REQUEST_TIM1_COM 48U /*!< DMAMUX TIM1 COM request */ +#define LL_DMAMUX_REQUEST_TIM8_CH1 49U /*!< DMAMUX TIM8 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM8_CH2 50U /*!< DMAMUX TIM8 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM8_CH3 51U /*!< DMAMUX TIM8 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM8_CH4 52U /*!< DMAMUX TIM8 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM8_UP 53U /*!< DMAMUX TIM8 UP request */ +#define LL_DMAMUX_REQUEST_TIM8_TRIG 54U /*!< DMAMUX TIM8 TRIG request */ +#define LL_DMAMUX_REQUEST_TIM8_COM 55U /*!< DMAMUX TIM8 COM request */ +#define LL_DMAMUX_REQUEST_TIM2_CH1 56U /*!< DMAMUX TIM2 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM2_CH2 57U /*!< DMAMUX TIM2 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM2_CH3 58U /*!< DMAMUX TIM2 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM2_CH4 59U /*!< DMAMUX TIM2 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM2_UP 60U /*!< DMAMUX TIM2 UP request */ +#define LL_DMAMUX_REQUEST_TIM3_CH1 61U /*!< DMAMUX TIM3 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM3_CH2 62U /*!< DMAMUX TIM3 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM3_CH3 63U /*!< DMAMUX TIM3 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM3_CH4 64U /*!< DMAMUX TIM3 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM3_UP 65U /*!< DMAMUX TIM3 UP request */ +#define LL_DMAMUX_REQUEST_TIM3_TRIG 66U /*!< DMAMUX TIM3 TRIG request */ +#define LL_DMAMUX_REQUEST_TIM4_CH1 67U /*!< DMAMUX TIM4 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM4_CH2 68U /*!< DMAMUX TIM4 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM4_CH3 69U /*!< DMAMUX TIM4 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM4_CH4 70U /*!< DMAMUX TIM4 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM4_UP 71U /*!< DMAMUX TIM4 UP request */ +#define LL_DMAMUX_REQUEST_TIM5_CH1 72U /*!< DMAMUX TIM5 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM5_CH2 73U /*!< DMAMUX TIM5 CH2 request */ +#define LL_DMAMUX_REQUEST_TIM5_CH3 74U /*!< DMAMUX TIM5 CH3 request */ +#define LL_DMAMUX_REQUEST_TIM5_CH4 75U /*!< DMAMUX TIM5 CH4 request */ +#define LL_DMAMUX_REQUEST_TIM5_UP 76U /*!< DMAMUX TIM5 UP request */ +#define LL_DMAMUX_REQUEST_TIM5_TRIG 77U /*!< DMAMUX TIM5 TRIG request */ +#define LL_DMAMUX_REQUEST_TIM15_CH1 78U /*!< DMAMUX TIM15 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM15_UP 79U /*!< DMAMUX TIM15 UP request */ +#define LL_DMAMUX_REQUEST_TIM15_TRIG 80U /*!< DMAMUX TIM15 TRIG request */ +#define LL_DMAMUX_REQUEST_TIM15_COM 81U /*!< DMAMUX TIM15 COM request */ +#define LL_DMAMUX_REQUEST_TIM16_CH1 82U /*!< DMAMUX TIM16 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM16_UP 83U /*!< DMAMUX TIM16 UP request */ +#define LL_DMAMUX_REQUEST_TIM17_CH1 84U /*!< DMAMUX TIM17 CH1 request */ +#define LL_DMAMUX_REQUEST_TIM17_UP 85U /*!< DMAMUX TIM17 UP request */ +#define LL_DMAMUX_REQUEST_DFSDM1_FLT0 86U /*!< DMAMUX DFSDM1_FLT0 request */ +#define LL_DMAMUX_REQUEST_DFSDM1_FLT1 87U /*!< DMAMUX DFSDM1_FLT1 request */ +#define LL_DMAMUX_REQUEST_DFSDM1_FLT2 88U /*!< DMAMUX DFSDM1_FLT2 request */ +#define LL_DMAMUX_REQUEST_DFSDM1_FLT3 89U /*!< DMAMUX DFSDM1_FLT3 request */ +#define LL_DMAMUX_REQUEST_DCMI 90U /*!< DMAMUX DCMI request */ +#define LL_DMAMUX_REQUEST_AES_IN 91U /*!< DMAMUX AES_IN request */ +#define LL_DMAMUX_REQUEST_AES_OUT 92U /*!< DMAMUX AES_OUT request */ +#define LL_DMAMUX_REQUEST_HASH_IN 93U /*!< DMAMUX HASH_IN request */ /** * @} */ +#else +/** @defgroup DMA_LL_EC_REQUEST Transfer peripheral request + * @{ + */ +#define LL_DMA_REQUEST_0 0x00000000U /*!< DMA peripheral request 0 */ +#define LL_DMA_REQUEST_1 0x00000001U /*!< DMA peripheral request 1 */ +#define LL_DMA_REQUEST_2 0x00000002U /*!< DMA peripheral request 2 */ +#define LL_DMA_REQUEST_3 0x00000003U /*!< DMA peripheral request 3 */ +#define LL_DMA_REQUEST_4 0x00000004U /*!< DMA peripheral request 4 */ +#define LL_DMA_REQUEST_5 0x00000005U /*!< DMA peripheral request 5 */ +#define LL_DMA_REQUEST_6 0x00000006U /*!< DMA peripheral request 6 */ +#define LL_DMA_REQUEST_7 0x00000007U /*!< DMA peripheral request 7 */ +/** + * @} + */ +#endif /* DMAMUX1 */ /** * @} @@ -1198,6 +1332,238 @@ __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Cha return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR)); } +#if defined(DMAMUX1) +/** + * @brief Set DMA request for DMA Channels on DMAMUX Channel x. + * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7. + * DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7. + * @rmtoll CxCR DMAREQ_ID LL_DMA_SetPeriphRequest + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + * @param Request This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQUEST_MEM2MEM + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR0 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR1 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR2 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR3 + * @arg @ref LL_DMAMUX_REQUEST_ADC1 + * @arg @ref LL_DMAMUX_REQUEST_DAC1_CH1 + * @arg @ref LL_DMAMUX_REQUEST_DAC1_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM6_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM7_UP + * @arg @ref LL_DMAMUX_REQUEST_SPI1_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI1_TX + * @arg @ref LL_DMAMUX_REQUEST_SPI2_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI2_TX + * @arg @ref LL_DMAMUX_REQUEST_SPI3_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI3_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C1_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C1_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C2_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C2_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C3_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C3_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C4_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C4_TX + * @arg @ref LL_DMAMUX_REQUEST_USART1_RX + * @arg @ref LL_DMAMUX_REQUEST_USART1_TX + * @arg @ref LL_DMAMUX_REQUEST_USART2_RX + * @arg @ref LL_DMAMUX_REQUEST_USART2_TX + * @arg @ref LL_DMAMUX_REQUEST_USART3_RX + * @arg @ref LL_DMAMUX_REQUEST_USART3_TX + * @arg @ref LL_DMAMUX_REQUEST_UART4_RX + * @arg @ref LL_DMAMUX_REQUEST_UART4_TX + * @arg @ref LL_DMAMUX_REQUEST_UART5_RX + * @arg @ref LL_DMAMUX_REQUEST_UART5_TX + * @arg @ref LL_DMAMUX_REQUEST_LPUART1_RX + * @arg @ref LL_DMAMUX_REQUEST_LPUART1_TX + * @arg @ref LL_DMAMUX_REQUEST_SAI1_A + * @arg @ref LL_DMAMUX_REQUEST_SAI1_B + * @arg @ref LL_DMAMUX_REQUEST_SAI2_A + * @arg @ref LL_DMAMUX_REQUEST_SAI2_B + * @arg @ref LL_DMAMUX_REQUEST_OSPI1 + * @arg @ref LL_DMAMUX_REQUEST_OSPI2 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM1_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM1_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM8_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM8_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM3_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM5_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM15_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM15_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM15_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM15_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM16_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM16_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM17_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM17_UP + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT0 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT1 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT2 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT3 + * @arg @ref LL_DMAMUX_REQUEST_DCMI + * @arg @ref LL_DMAMUX_REQUEST_AES_IN + * @arg @ref LL_DMAMUX_REQUEST_AES_OUT + * @arg @ref LL_DMAMUX_REQUEST_HASH_IN + * @retval None + */ +__STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request) +{ + MODIFY_REG(((DMAMUX_Channel_TypeDef*)(uint32_t)((uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE*(Channel-1U)) + (uint32_t)(DMAMUX_CCR_SIZE*__LL_DMA_INSTANCE_TO_DMAMUX_CHANNEL(DMAx))))->CCR, DMAMUX_CxCR_DMAREQ_ID, Request); +} + +/** + * @brief Get DMA request for DMA Channels on DMAMUX Channel x. + * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7. + * DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7. + * @rmtoll CxCR DMAREQ_ID LL_DMA_GetPeriphRequest + * @param DMAx DMAx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMA_CHANNEL_1 + * @arg @ref LL_DMA_CHANNEL_2 + * @arg @ref LL_DMA_CHANNEL_3 + * @arg @ref LL_DMA_CHANNEL_4 + * @arg @ref LL_DMA_CHANNEL_5 + * @arg @ref LL_DMA_CHANNEL_6 + * @arg @ref LL_DMA_CHANNEL_7 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_REQUEST_MEM2MEM + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR0 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR1 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR2 + * @arg @ref LL_DMAMUX_REQUEST_GENERATOR3 + * @arg @ref LL_DMAMUX_REQUEST_ADC1 + * @arg @ref LL_DMAMUX_REQUEST_DAC1_CH1 + * @arg @ref LL_DMAMUX_REQUEST_DAC1_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM6_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM7_UP + * @arg @ref LL_DMAMUX_REQUEST_SPI1_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI1_TX + * @arg @ref LL_DMAMUX_REQUEST_SPI2_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI2_TX + * @arg @ref LL_DMAMUX_REQUEST_SPI3_RX + * @arg @ref LL_DMAMUX_REQUEST_SPI3_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C1_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C1_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C2_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C2_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C3_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C3_TX + * @arg @ref LL_DMAMUX_REQUEST_I2C4_RX + * @arg @ref LL_DMAMUX_REQUEST_I2C4_TX + * @arg @ref LL_DMAMUX_REQUEST_USART1_RX + * @arg @ref LL_DMAMUX_REQUEST_USART1_TX + * @arg @ref LL_DMAMUX_REQUEST_USART2_RX + * @arg @ref LL_DMAMUX_REQUEST_USART2_TX + * @arg @ref LL_DMAMUX_REQUEST_USART3_RX + * @arg @ref LL_DMAMUX_REQUEST_USART3_TX + * @arg @ref LL_DMAMUX_REQUEST_UART4_RX + * @arg @ref LL_DMAMUX_REQUEST_UART4_TX + * @arg @ref LL_DMAMUX_REQUEST_UART5_RX + * @arg @ref LL_DMAMUX_REQUEST_UART5_TX + * @arg @ref LL_DMAMUX_REQUEST_LPUART1_RX + * @arg @ref LL_DMAMUX_REQUEST_LPUART1_TX + * @arg @ref LL_DMAMUX_REQUEST_SAI1_A + * @arg @ref LL_DMAMUX_REQUEST_SAI1_B + * @arg @ref LL_DMAMUX_REQUEST_SAI2_A + * @arg @ref LL_DMAMUX_REQUEST_SAI2_B + * @arg @ref LL_DMAMUX_REQUEST_OSPI1 + * @arg @ref LL_DMAMUX_REQUEST_OSPI2 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM1_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM1_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM1_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM8_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM8_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM8_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM2_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM3_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM3_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM4_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH2 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH3 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_CH4 + * @arg @ref LL_DMAMUX_REQUEST_TIM5_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM5_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM15_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM15_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM15_TRIG + * @arg @ref LL_DMAMUX_REQUEST_TIM15_COM + * @arg @ref LL_DMAMUX_REQUEST_TIM16_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM16_UP + * @arg @ref LL_DMAMUX_REQUEST_TIM17_CH1 + * @arg @ref LL_DMAMUX_REQUEST_TIM17_UP + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT0 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT1 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT2 + * @arg @ref LL_DMAMUX_REQUEST_DFSDM1_FLT3 + * @arg @ref LL_DMAMUX_REQUEST_DCMI + * @arg @ref LL_DMAMUX_REQUEST_AES_IN + * @arg @ref LL_DMAMUX_REQUEST_AES_OUT + * @arg @ref LL_DMAMUX_REQUEST_HASH_IN + */ +__STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel) +{ + return (READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_Channel0 + (DMAMUX_CCR_SIZE*(Channel-1U)) + (uint32_t)(DMAMUX_CCR_SIZE*__LL_DMA_INSTANCE_TO_DMAMUX_CHANNEL(DMAx)))))->CCR, DMAMUX_CxCR_DMAREQ_ID)); +} +#else /** * @brief Set DMA request for DMA instance on Channel x. * @note Please refer to Reference Manual to get the available mapping of Request value link to Channel Selection. @@ -1267,6 +1633,7 @@ __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Cha return (READ_BIT(((DMA_Request_TypeDef *)((uint32_t)((uint32_t)DMAx + DMA_CSELR_OFFSET)))->CSELR, DMA_CSELR_C1S << ((Channel - 1U) * 4U)) >> DMA_POSITION_CSELR_CXS); } +#endif /* DMAMUX1 */ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.c index 2bdd4e5aaa..3f1012ea3e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_dma2d.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief DMA2D LL module driver. ****************************************************************************** * @attention @@ -73,10 +71,19 @@ /** @addtogroup DMA2D_LL_Private_Macros * @{ */ +#if defined(DMA2D_M2M_BLEND_FIXED_COLOR_FG_BG_SUPPORT) +#define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \ + ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \ + ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \ + ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG) || \ + ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG) || \ + ((MODE) == LL_DMA2D_MODE_R2M)) +#else #define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \ ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \ ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \ ((MODE) == LL_DMA2D_MODE_R2M)) +#endif #define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \ ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \ @@ -202,6 +209,12 @@ ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_Ini assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed)); assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue)); assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha)); +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) + assert_param(IS_LL_DMA2D_SWAP_MODE(DMA2D_InitStruct->OutputSwapMode)); +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) + assert_param(IS_LL_DMA2D_OFFSET_MODE(DMA2D_InitStruct->LineOffsetMode)); +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset)); assert_param(IS_LL_DMA2D_ALPHAINV(DMA2D_InitStruct->AlphaInversionMode)); assert_param(IS_LL_DMA2D_RBSWAP(DMA2D_InitStruct->RBSwapMode)); @@ -213,11 +226,21 @@ ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_Ini if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U)) { /* DMA2D CR register configuration -------------------------------------------*/ +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) + MODIFY_REG(DMA2Dx->CR, (DMA2D_CR_MODE | DMA2D_CR_LOM), \ + (DMA2D_InitStruct->Mode | DMA2D_InitStruct->LineOffsetMode)); +#else LL_DMA2D_SetMode(DMA2Dx, DMA2D_InitStruct->Mode); +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ /* DMA2D OPFCCR register configuration ---------------------------------------*/ +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) + MODIFY_REG(DMA2Dx->OPFCCR, (DMA2D_OPFCCR_CM | DMA2D_OPFCCR_SB | DMA2D_OPFCCR_AI | DMA2D_OPFCCR_RBS), \ + (DMA2D_InitStruct->ColorMode | DMA2D_InitStruct->OutputSwapMode | DMA2D_InitStruct->AlphaInversionMode | DMA2D_InitStruct->RBSwapMode)); +#else MODIFY_REG(DMA2Dx->OPFCCR, (DMA2D_OPFCCR_CM | DMA2D_OPFCCR_RBS | DMA2D_OPFCCR_AI), \ (DMA2D_InitStruct->ColorMode | DMA2D_InitStruct->AlphaInversionMode | DMA2D_InitStruct->RBSwapMode)); +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ /* DMA2D OOR register configuration ------------------------------------------*/ LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset); @@ -256,12 +279,18 @@ void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct) DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888; DMA2D_InitStruct->NbrOfLines = 0x0U; DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U; +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) + DMA2D_InitStruct->LineOffsetMode = LL_DMA2D_LINE_OFFSET_PIXELS; +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ DMA2D_InitStruct->LineOffset = 0x0U; DMA2D_InitStruct->OutputBlue = 0x0U; DMA2D_InitStruct->OutputGreen = 0x0U; DMA2D_InitStruct->OutputRed = 0x0U; DMA2D_InitStruct->OutputAlpha = 0x0U; DMA2D_InitStruct->OutputMemoryAddress = 0x0U; +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) + DMA2D_InitStruct->OutputSwapMode = LL_DMA2D_SWAP_MODE_REGULAR; +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ DMA2D_InitStruct->AlphaInversionMode = LL_DMA2D_ALPHA_REGULAR; DMA2D_InitStruct->RBSwapMode = LL_DMA2D_RB_MODE_REGULAR; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.h index d0069d03b4..3cf689e711 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dma2d.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_dma2d.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of DMA2D LL module. ****************************************************************************** * @attention @@ -135,8 +133,23 @@ typedef struct This parameter can be modified afterwards using unitary function @ref LL_DMA2D_SetOutputMemAddr(). */ +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) + uint32_t OutputSwapMode; /*!< Specifies the output swap mode color format of the output image. + - This parameter can be one value of @ref DMA2D_LL_EC_OUTPUT_SWAP_MODE. + + This parameter can be modified afterwards using unitary function @ref LL_DMA2D_SetOutputSwapMode(). */ +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ + +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) + uint32_t LineOffsetMode; /*!< Specifies the output line offset mode. + - This parameter can be one value of @ref DMA2D_LL_EC_LINE_OFFSET_MODE. + + This parameter can be modified afterwards using unitary function @ref LL_DMA2D_SetLineOffsetMode(). */ +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ + uint32_t LineOffset; /*!< Specifies the output line offset value. - - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x3FFF. + - This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x3FFF on STM32L496xx/STM32L4A6xx + else between Min_Data = 0x0000 and Max_Data = 0xFFFF on other devices. This parameter can be modified afterwards using unitary function @ref LL_DMA2D_SetLineOffset(). */ @@ -355,7 +368,11 @@ typedef struct #define LL_DMA2D_MODE_M2M 0x00000000U /*!< DMA2D memory to memory transfer mode */ #define LL_DMA2D_MODE_M2M_PFC DMA2D_CR_MODE_0 /*!< DMA2D memory to memory with pixel format conversion transfer mode */ #define LL_DMA2D_MODE_M2M_BLEND DMA2D_CR_MODE_1 /*!< DMA2D memory to memory with blending transfer mode */ -#define LL_DMA2D_MODE_R2M DMA2D_CR_MODE /*!< DMA2D register to memory transfer mode */ +#define LL_DMA2D_MODE_R2M (DMA2D_CR_MODE_0|DMA2D_CR_MODE_1) /*!< DMA2D register to memory transfer mode */ +#if defined(DMA2D_M2M_BLEND_FIXED_COLOR_FG_BG_SUPPORT) +#define LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG DMA2D_CR_MODE_2 /*!< DMA2D memory to memory with blending transfer mode and fixed color foreground */ +#define LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG (DMA2D_CR_MODE_0|DMA2D_CR_MODE_2) /*!< DMA2D memory to memory with blending transfer mode and fixed color background */ +#endif /* DMA2D_M2M_BLEND_FIXED_COLOR_FG_BG_SUPPORT */ /** * @} */ @@ -401,6 +418,17 @@ typedef struct * @} */ +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) +/** @defgroup DMA2D_LL_EC_OUTPUT_SWAP_MODE Swap Mode + * @{ + */ +#define LL_DMA2D_SWAP_MODE_REGULAR ((uint32_t)0x00000000) /*!< Regular order */ +#define LL_DMA2D_SWAP_MODE_TWO_BY_TWO DMA2D_OPFCCR_SB /*!< Bytes swapped two by two */ +/** + * @} + */ +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ + /** @defgroup DMA2D_LL_EC_RED_BLUE_SWAP Red Blue Swap * @{ */ @@ -419,6 +447,17 @@ typedef struct * @} */ +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) +/** @defgroup DMA2D_LL_EC_LINE_OFFSET_MODE Line Offset Mode + * @{ + */ +#define LL_DMA2D_LINE_OFFSET_PIXELS ((uint32_t)0x00000000) /*!< Line offsets are expressed in pixels */ +#define LL_DMA2D_LINE_OFFSET_BYTES DMA2D_CR_LOM /*!< Line offsets are expressed in bytes */ +/** + * @} + */ +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ + /** @defgroup DMA2D_LL_EC_CLUT_COLOR_MODE CLUT Color Mode * @{ */ @@ -567,6 +606,10 @@ __STATIC_INLINE uint32_t LL_DMA2D_IsAborted(DMA2D_TypeDef *DMA2Dx) * @arg @ref LL_DMA2D_MODE_M2M_PFC * @arg @ref LL_DMA2D_MODE_M2M_BLEND * @arg @ref LL_DMA2D_MODE_R2M + * @arg @ref LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG (*) + * @arg @ref LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG (*) + * + * (*) value not defined in all devices. * @retval None */ __STATIC_INLINE void LL_DMA2D_SetMode(DMA2D_TypeDef *DMA2Dx, uint32_t Mode) @@ -583,6 +626,10 @@ __STATIC_INLINE void LL_DMA2D_SetMode(DMA2D_TypeDef *DMA2Dx, uint32_t Mode) * @arg @ref LL_DMA2D_MODE_M2M_PFC * @arg @ref LL_DMA2D_MODE_M2M_BLEND * @arg @ref LL_DMA2D_MODE_R2M + * @arg @ref LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG (*) + * @arg @ref LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG (*) + * + * (*) value not defined in all devices. */ __STATIC_INLINE uint32_t LL_DMA2D_GetMode(DMA2D_TypeDef *DMA2Dx) { @@ -676,11 +723,73 @@ __STATIC_INLINE uint32_t LL_DMA2D_GetOutputAlphaInvMode(DMA2D_TypeDef *DMA2Dx) return (uint32_t)(READ_BIT(DMA2Dx->OPFCCR, DMA2D_OPFCCR_AI)); } +#if defined(DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT) +/** + * @brief Set DMA2D output swap mode. + * @rmtoll OPFCCR SB LL_DMA2D_SetOutputSwapMode + * @param DMA2Dx DMA2D Instance + * @param OutputSwapMode This parameter can be one of the following values: + * @arg @ref LL_DMA2D_SWAP_MODE_REGULAR + * @arg @ref LL_DMA2D_SWAP_MODE_TWO_BY_TWO + * @retval None + */ +__STATIC_INLINE void LL_DMA2D_SetOutputSwapMode(DMA2D_TypeDef *DMA2Dx, uint32_t OutputSwapMode) +{ + MODIFY_REG(DMA2Dx->OPFCCR, DMA2D_OPFCCR_SB, OutputSwapMode); +} + +/** + * @brief Return DMA2D output swap mode. + * @rmtoll OPFCCR SB LL_DMA2D_GetOutputSwapMode + * @param DMA2Dx DMA2D Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA2D_SWAP_MODE_REGULAR + * @arg @ref LL_DMA2D_SWAP_MODE_TWO_BY_TWO + */ +__STATIC_INLINE uint32_t LL_DMA2D_GetOutputSwapMode(DMA2D_TypeDef *DMA2Dx) +{ + return (uint32_t)(READ_BIT(DMA2Dx->OPFCCR, DMA2D_OPFCCR_SB)); +} +#endif /* DMA2D_OUTPUT_TWO_BY_TWO_SWAP_SUPPORT */ + +#if defined(DMA2D_LINE_OFFSET_MODE_SUPPORT) +/** + * @brief Set DMA2D line offset mode. + * @rmtoll CR LOM LL_DMA2D_SetLineOffsetMode + * @param DMA2Dx DMA2D Instance + * @param LineOffsetMode This parameter can be one of the following values: + * @arg @ref LL_DMA2D_LINE_OFFSET_PIXELS + * @arg @ref LL_DMA2D_LINE_OFFSET_BYTES + * @retval None + */ +__STATIC_INLINE void LL_DMA2D_SetLineOffsetMode(DMA2D_TypeDef *DMA2Dx, uint32_t LineOffsetMode) +{ + MODIFY_REG(DMA2Dx->CR, DMA2D_CR_LOM, LineOffsetMode); +} + +/** + * @brief Return DMA2D line offset mode. + * @rmtoll CR LOM LL_DMA2D_GetLineOffsetMode + * @param DMA2Dx DMA2D Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMA2D_LINE_OFFSET_PIXELS + * @arg @ref LL_DMA2D_LINE_OFFSET_BYTES + */ +__STATIC_INLINE uint32_t LL_DMA2D_GetLineOffsetMode(DMA2D_TypeDef *DMA2Dx) +{ + return (uint32_t)(READ_BIT(DMA2Dx->CR, DMA2D_CR_LOM)); +} +#endif /* DMA2D_LINE_OFFSET_MODE_SUPPORT */ + /** * @brief Set DMA2D line offset, expressed on 14 bits ([13:0] bits). * @rmtoll OOR LO LL_DMA2D_SetLineOffset * @param DMA2Dx DMA2D Instance + @if DMA2D_LINE_OFFSET_MODE_SUPPORT + * @param LineOffset Value between Min_Data=0 and Max_Data=0xFFFF + @else * @param LineOffset Value between Min_Data=0 and Max_Data=0x3FFF + @endif * @retval None */ __STATIC_INLINE void LL_DMA2D_SetLineOffset(DMA2D_TypeDef *DMA2Dx, uint32_t LineOffset) @@ -692,7 +801,11 @@ __STATIC_INLINE void LL_DMA2D_SetLineOffset(DMA2D_TypeDef *DMA2Dx, uint32_t Line * @brief Return DMA2D line offset, expressed on 14 bits ([13:0] bits). * @rmtoll OOR LO LL_DMA2D_GetLineOffset * @param DMA2Dx DMA2D Instance + @if DMA2D_LINE_OFFSET_MODE_SUPPORT + * @retval Line offset value between Min_Data=0 and Max_Data=0xFFFF + @else * @retval Line offset value between Min_Data=0 and Max_Data=0x3FFF + @endif */ __STATIC_INLINE uint32_t LL_DMA2D_GetLineOffset(DMA2D_TypeDef *DMA2Dx) { diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dmamux.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dmamux.h new file mode 100644 index 0000000000..66a10c9d19 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_dmamux.h @@ -0,0 +1,1795 @@ +/** + ****************************************************************************** + * @file stm32l4xx_ll_dmamux.h + * @author MCD Application Team + * @brief Header file of DMAMUX LL module. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32L4xx_LL_DMAMUX_H +#define __STM32L4xx_LL_DMAMUX_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx.h" + +/** @addtogroup STM32L4xx_LL_Driver + * @{ + */ + +#if defined (DMAMUX1) + +/** @defgroup DMAMUX_LL DMAMUX + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup DMAMUX_LL_Private_Constants DMAMUX Private Constants + * @{ + */ +/* Define used to get DMAMUX CCR register size */ +#define DMAMUX_CCR_SIZE 0x00000004U + +/* Define used to get DMAMUX RGCR register size */ +#define DMAMUX_RGCR_SIZE 0x00000004U +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/** @defgroup DMAMUX_LL_Exported_Constants DMAMUX Exported Constants + * @{ + */ +/** @defgroup DMAMUX_LL_EC_CLEAR_FLAG Clear Flags Defines + * @brief Flags defines which can be used with LL_DMAMUX_WriteReg function + * @{ + */ +#define LL_DMAMUX_CFR_CSOF0 DMAMUX_CFR_CSOF0 /*!< Synchronization Event Overrun Flag Channel 0 */ +#define LL_DMAMUX_CFR_CSOF1 DMAMUX_CFR_CSOF1 /*!< Synchronization Event Overrun Flag Channel 1 */ +#define LL_DMAMUX_CFR_CSOF2 DMAMUX_CFR_CSOF2 /*!< Synchronization Event Overrun Flag Channel 2 */ +#define LL_DMAMUX_CFR_CSOF3 DMAMUX_CFR_CSOF3 /*!< Synchronization Event Overrun Flag Channel 3 */ +#define LL_DMAMUX_CFR_CSOF4 DMAMUX_CFR_CSOF4 /*!< Synchronization Event Overrun Flag Channel 4 */ +#define LL_DMAMUX_CFR_CSOF5 DMAMUX_CFR_CSOF5 /*!< Synchronization Event Overrun Flag Channel 5 */ +#define LL_DMAMUX_CFR_CSOF6 DMAMUX_CFR_CSOF6 /*!< Synchronization Event Overrun Flag Channel 6 */ +#define LL_DMAMUX_CFR_CSOF7 DMAMUX_CFR_CSOF7 /*!< Synchronization Event Overrun Flag Channel 7 */ +#define LL_DMAMUX_CFR_CSOF8 DMAMUX_CFR_CSOF8 /*!< Synchronization Event Overrun Flag Channel 8 */ +#define LL_DMAMUX_CFR_CSOF9 DMAMUX_CFR_CSOF9 /*!< Synchronization Event Overrun Flag Channel 9 */ +#define LL_DMAMUX_CFR_CSOF10 DMAMUX_CFR_CSOF10 /*!< Synchronization Event Overrun Flag Channel 10 */ +#define LL_DMAMUX_CFR_CSOF11 DMAMUX_CFR_CSOF11 /*!< Synchronization Event Overrun Flag Channel 11 */ +#define LL_DMAMUX_CFR_CSOF12 DMAMUX_CFR_CSOF12 /*!< Synchronization Event Overrun Flag Channel 12 */ +#define LL_DMAMUX_CFR_CSOF13 DMAMUX_CFR_CSOF13 /*!< Synchronization Event Overrun Flag Channel 13 */ +#define LL_DMAMUX_RGCFR_RGCOF0 DMAMUX_RGCFR_COF0 /*!< Request Generator 0 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGCFR_RGCOF1 DMAMUX_RGCFR_COF1 /*!< Request Generator 1 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGCFR_RGCOF2 DMAMUX_RGCFR_COF2 /*!< Request Generator 2 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGCFR_RGCOF3 DMAMUX_RGCFR_COF3 /*!< Request Generator 3 Trigger Event Overrun Flag */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_DMAMUX_ReadReg function + * @{ + */ +#define LL_DMAMUX_CSR_SOF0 DMAMUX_CSR_SOF0 /*!< Synchronization Event Overrun Flag Channel 0 */ +#define LL_DMAMUX_CSR_SOF1 DMAMUX_CSR_SOF1 /*!< Synchronization Event Overrun Flag Channel 1 */ +#define LL_DMAMUX_CSR_SOF2 DMAMUX_CSR_SOF2 /*!< Synchronization Event Overrun Flag Channel 2 */ +#define LL_DMAMUX_CSR_SOF3 DMAMUX_CSR_SOF3 /*!< Synchronization Event Overrun Flag Channel 3 */ +#define LL_DMAMUX_CSR_SOF4 DMAMUX_CSR_SOF4 /*!< Synchronization Event Overrun Flag Channel 4 */ +#define LL_DMAMUX_CSR_SOF5 DMAMUX_CSR_SOF5 /*!< Synchronization Event Overrun Flag Channel 5 */ +#define LL_DMAMUX_CSR_SOF6 DMAMUX_CSR_SOF6 /*!< Synchronization Event Overrun Flag Channel 6 */ +#define LL_DMAMUX_CSR_SOF7 DMAMUX_CSR_SOF7 /*!< Synchronization Event Overrun Flag Channel 7 */ +#define LL_DMAMUX_CSR_SOF8 DMAMUX_CSR_SOF8 /*!< Synchronization Event Overrun Flag Channel 8 */ +#define LL_DMAMUX_CSR_SOF9 DMAMUX_CSR_SOF9 /*!< Synchronization Event Overrun Flag Channel 9 */ +#define LL_DMAMUX_CSR_SOF10 DMAMUX_CSR_SOF10 /*!< Synchronization Event Overrun Flag Channel 10 */ +#define LL_DMAMUX_CSR_SOF11 DMAMUX_CSR_SOF11 /*!< Synchronization Event Overrun Flag Channel 11 */ +#define LL_DMAMUX_CSR_SOF12 DMAMUX_CSR_SOF12 /*!< Synchronization Event Overrun Flag Channel 12 */ +#define LL_DMAMUX_CSR_SOF13 DMAMUX_CSR_SOF13 /*!< Synchronization Event Overrun Flag Channel 13 */ +#define LL_DMAMUX_RGSR_RGOF0 DMAMUX_RGSR_OF0 /*!< Request Generator 0 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGSR_RGOF1 DMAMUX_RGSR_OF1 /*!< Request Generator 1 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGSR_RGOF2 DMAMUX_RGSR_OF2 /*!< Request Generator 2 Trigger Event Overrun Flag */ +#define LL_DMAMUX_RGSR_RGOF3 DMAMUX_RGSR_OF3 /*!< Request Generator 3 Trigger Event Overrun Flag */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_DMA_ReadReg and LL_DMAMUX_WriteReg functions + * @{ + */ +#define LL_DMAMUX_CCR_SOIE DMAMUX_CxCR_SOIE /*!< Synchronization Event Overrun Interrupt */ +#define LL_DMAMUX_RGCR_RGOIE DMAMUX_RGxCR_OIE /*!< Request Generation Trigger Event Overrun Interrupt */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_REQUEST Transfer request + * @{ + */ +#define LL_DMAMUX_REQ_MEM2MEM 0U /*!< Memory to memory transfer */ +#define LL_DMAMUX_REQ_GENERATOR0 1U /*!< DMAMUX request generator 0 */ +#define LL_DMAMUX_REQ_GENERATOR1 2U /*!< DMAMUX request generator 1 */ +#define LL_DMAMUX_REQ_GENERATOR2 3U /*!< DMAMUX request generator 2 */ +#define LL_DMAMUX_REQ_GENERATOR3 4U /*!< DMAMUX request generator 3 */ +#define LL_DMAMUX_REQ_ADC1 5U /*!< DMAMUX ADC1 request */ +#define LL_DMAMUX_REQ_DAC1_CH1 6U /*!< DMAMUX DAC1 CH1 request */ +#define LL_DMAMUX_REQ_DAC1_CH2 7U /*!< DMAMUX DAC1 CH2 request */ +#define LL_DMAMUX_REQ_TIM6_UP 8U /*!< DMAMUX TIM6 UP request */ +#define LL_DMAMUX_REQ_TIM7_UP 9U /*!< DMAMUX TIM7 UP request */ +#define LL_DMAMUX_REQ_SPI1_RX 10U /*!< DMAMUX SPI1 RX request */ +#define LL_DMAMUX_REQ_SPI1_TX 11U /*!< DMAMUX SPI1 TX request */ +#define LL_DMAMUX_REQ_SPI2_RX 12U /*!< DMAMUX SPI2 RX request */ +#define LL_DMAMUX_REQ_SPI2_TX 13U /*!< DMAMUX SPI2 TX request */ +#define LL_DMAMUX_REQ_SPI3_RX 14U /*!< DMAMUX SPI3 RX request */ +#define LL_DMAMUX_REQ_SPI3_TX 15U /*!< DMAMUX SPI3 TX request */ +#define LL_DMAMUX_REQ_I2C1_RX 16U /*!< DMAMUX I2C1 RX request */ +#define LL_DMAMUX_REQ_I2C1_TX 17U /*!< DMAMUX I2C1 TX request */ +#define LL_DMAMUX_REQ_I2C2_RX 18U /*!< DMAMUX I2C2 RX request */ +#define LL_DMAMUX_REQ_I2C2_TX 19U /*!< DMAMUX I2C2 TX request */ +#define LL_DMAMUX_REQ_I2C3_RX 20U /*!< DMAMUX I2C3 RX request */ +#define LL_DMAMUX_REQ_I2C3_TX 21U /*!< DMAMUX I2C3 TX request */ +#define LL_DMAMUX_REQ_I2C4_RX 22U /*!< DMAMUX I2C4 RX request */ +#define LL_DMAMUX_REQ_I2C4_TX 23U /*!< DMAMUX I2C4 TX request */ +#define LL_DMAMUX_REQ_USART1_RX 24U /*!< DMAMUX USART1 RX request */ +#define LL_DMAMUX_REQ_USART1_TX 25U /*!< DMAMUX USART1 TX request */ +#define LL_DMAMUX_REQ_USART2_RX 26U /*!< DMAMUX USART2 RX request */ +#define LL_DMAMUX_REQ_USART2_TX 27U /*!< DMAMUX USART2 TX request */ +#define LL_DMAMUX_REQ_USART3_RX 28U /*!< DMAMUX USART3 RX request */ +#define LL_DMAMUX_REQ_USART3_TX 29U /*!< DMAMUX USART3 TX request */ +#define LL_DMAMUX_REQ_UART4_RX 30U /*!< DMAMUX UART4 RX request */ +#define LL_DMAMUX_REQ_UART4_TX 31U /*!< DMAMUX UART4 TX request */ +#define LL_DMAMUX_REQ_UART5_RX 32U /*!< DMAMUX UART5 RX request */ +#define LL_DMAMUX_REQ_UART5_TX 33U /*!< DMAMUX UART5 TX request */ +#define LL_DMAMUX_REQ_LPUART1_RX 34U /*!< DMAMUX LPUART1 RX request */ +#define LL_DMAMUX_REQ_LPUART1_TX 35U /*!< DMAMUX LPUART1 TX request */ +#define LL_DMAMUX_REQ_SAI1_A 36U /*!< DMAMUX SAI1 A request */ +#define LL_DMAMUX_REQ_SAI1_B 37U /*!< DMAMUX SAI1 B request */ +#define LL_DMAMUX_REQ_SAI2_A 38U /*!< DMAMUX SAI2 A request */ +#define LL_DMAMUX_REQ_SAI2_B 39U /*!< DMAMUX SAI2 B request */ +#define LL_DMAMUX_REQ_OSPI1 40U /*!< DMAMUX OCTOSPI1 request */ +#define LL_DMAMUX_REQ_OSPI2 41U /*!< DMAMUX OCTOSPI2 request */ +#define LL_DMAMUX_REQ_TIM1_CH1 42U /*!< DMAMUX TIM1 CH1 request */ +#define LL_DMAMUX_REQ_TIM1_CH2 43U /*!< DMAMUX TIM1 CH2 request */ +#define LL_DMAMUX_REQ_TIM1_CH3 44U /*!< DMAMUX TIM1 CH3 request */ +#define LL_DMAMUX_REQ_TIM1_CH4 45U /*!< DMAMUX TIM1 CH4 request */ +#define LL_DMAMUX_REQ_TIM1_UP 46U /*!< DMAMUX TIM1 UP request */ +#define LL_DMAMUX_REQ_TIM1_TRIG 47U /*!< DMAMUX TIM1 TRIG request */ +#define LL_DMAMUX_REQ_TIM1_COM 48U /*!< DMAMUX TIM1 COM request */ +#define LL_DMAMUX_REQ_TIM8_CH1 49U /*!< DMAMUX TIM8 CH1 request */ +#define LL_DMAMUX_REQ_TIM8_CH2 50U /*!< DMAMUX TIM8 CH2 request */ +#define LL_DMAMUX_REQ_TIM8_CH3 51U /*!< DMAMUX TIM8 CH3 request */ +#define LL_DMAMUX_REQ_TIM8_CH4 52U /*!< DMAMUX TIM8 CH4 request */ +#define LL_DMAMUX_REQ_TIM8_UP 53U /*!< DMAMUX TIM8 UP request */ +#define LL_DMAMUX_REQ_TIM8_TRIG 54U /*!< DMAMUX TIM8 TRIG request */ +#define LL_DMAMUX_REQ_TIM8_COM 55U /*!< DMAMUX TIM8 COM request */ +#define LL_DMAMUX_REQ_TIM2_CH1 56U /*!< DMAMUX TIM2 CH1 request */ +#define LL_DMAMUX_REQ_TIM2_CH2 57U /*!< DMAMUX TIM2 CH2 request */ +#define LL_DMAMUX_REQ_TIM2_CH3 58U /*!< DMAMUX TIM2 CH3 request */ +#define LL_DMAMUX_REQ_TIM2_CH4 59U /*!< DMAMUX TIM2 CH4 request */ +#define LL_DMAMUX_REQ_TIM2_UP 60U /*!< DMAMUX TIM2 UP request */ +#define LL_DMAMUX_REQ_TIM3_CH1 61U /*!< DMAMUX TIM3 CH1 request */ +#define LL_DMAMUX_REQ_TIM3_CH2 62U /*!< DMAMUX TIM3 CH2 request */ +#define LL_DMAMUX_REQ_TIM3_CH3 63U /*!< DMAMUX TIM3 CH3 request */ +#define LL_DMAMUX_REQ_TIM3_CH4 64U /*!< DMAMUX TIM3 CH4 request */ +#define LL_DMAMUX_REQ_TIM3_UP 65U /*!< DMAMUX TIM3 UP request */ +#define LL_DMAMUX_REQ_TIM3_TRIG 66U /*!< DMAMUX TIM3 TRIG request */ +#define LL_DMAMUX_REQ_TIM4_CH1 67U /*!< DMAMUX TIM4 CH1 request */ +#define LL_DMAMUX_REQ_TIM4_CH2 68U /*!< DMAMUX TIM4 CH2 request */ +#define LL_DMAMUX_REQ_TIM4_CH3 69U /*!< DMAMUX TIM4 CH3 request */ +#define LL_DMAMUX_REQ_TIM4_CH4 70U /*!< DMAMUX TIM4 CH4 request */ +#define LL_DMAMUX_REQ_TIM4_UP 71U /*!< DMAMUX TIM4 UP request */ +#define LL_DMAMUX_REQ_TIM5_CH1 72U /*!< DMAMUX TIM5 CH1 request */ +#define LL_DMAMUX_REQ_TIM5_CH2 73U /*!< DMAMUX TIM5 CH2 request */ +#define LL_DMAMUX_REQ_TIM5_CH3 74U /*!< DMAMUX TIM5 CH3 request */ +#define LL_DMAMUX_REQ_TIM5_CH4 75U /*!< DMAMUX TIM5 CH4 request */ +#define LL_DMAMUX_REQ_TIM5_UP 76U /*!< DMAMUX TIM5 UP request */ +#define LL_DMAMUX_REQ_TIM5_TRIG 77U /*!< DMAMUX TIM5 TRIG request */ +#define LL_DMAMUX_REQ_TIM15_CH1 78U /*!< DMAMUX TIM15 CH1 request */ +#define LL_DMAMUX_REQ_TIM15_UP 79U /*!< DMAMUX TIM15 UP request */ +#define LL_DMAMUX_REQ_TIM15_TRIG 80U /*!< DMAMUX TIM15 TRIG request */ +#define LL_DMAMUX_REQ_TIM15_COM 81U /*!< DMAMUX TIM15 COM request */ +#define LL_DMAMUX_REQ_TIM16_CH1 82U /*!< DMAMUX TIM16 CH1 request */ +#define LL_DMAMUX_REQ_TIM16_UP 83U /*!< DMAMUX TIM16 UP request */ +#define LL_DMAMUX_REQ_TIM17_CH1 84U /*!< DMAMUX TIM17 CH1 request */ +#define LL_DMAMUX_REQ_TIM17_UP 85U /*!< DMAMUX TIM17 UP request */ +#define LL_DMAMUX_REQ_DFSDM1_FLT0 86U /*!< DMAMUX DFSDM1_FLT0 request */ +#define LL_DMAMUX_REQ_DFSDM1_FLT1 87U /*!< DMAMUX DFSDM1_FLT1 request */ +#define LL_DMAMUX_REQ_DFSDM1_FLT2 88U /*!< DMAMUX DFSDM1_FLT2 request */ +#define LL_DMAMUX_REQ_DFSDM1_FLT3 89U /*!< DMAMUX DFSDM1_FLT3 request */ +#define LL_DMAMUX_REQ_DCMI 90U /*!< DMAMUX DCMI request */ +#define LL_DMAMUX_REQ_AES_IN 91U /*!< DMAMUX AES_IN request */ +#define LL_DMAMUX_REQ_AES_OUT 92U /*!< DMAMUX AES_OUT request */ +#define LL_DMAMUX_REQ_HASH_IN 93U /*!< DMAMUX HASH_IN request */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_CHANNEL DMAMUX Channel + * @{ + */ +#define LL_DMAMUX_CHANNEL_0 0x00000000U /*!< DMAMUX Channel 0 connected to DMA1 Channel 1 */ +#define LL_DMAMUX_CHANNEL_1 0x00000001U /*!< DMAMUX Channel 1 connected to DMA1 Channel 2 */ +#define LL_DMAMUX_CHANNEL_2 0x00000002U /*!< DMAMUX Channel 2 connected to DMA1 Channel 3 */ +#define LL_DMAMUX_CHANNEL_3 0x00000003U /*!< DMAMUX Channel 3 connected to DMA1 Channel 4 */ +#define LL_DMAMUX_CHANNEL_4 0x00000004U /*!< DMAMUX Channel 4 connected to DMA1 Channel 5 */ +#define LL_DMAMUX_CHANNEL_5 0x00000005U /*!< DMAMUX Channel 5 connected to DMA1 Channel 6 */ +#define LL_DMAMUX_CHANNEL_6 0x00000006U /*!< DMAMUX Channel 6 connected to DMA1 Channel 7 */ +#define LL_DMAMUX_CHANNEL_7 0x00000007U /*!< DMAMUX Channel 7 connected to DMA2 Channel 1 */ +#define LL_DMAMUX_CHANNEL_8 0x00000008U /*!< DMAMUX Channel 8 connected to DMA2 Channel 2 */ +#define LL_DMAMUX_CHANNEL_9 0x00000009U /*!< DMAMUX Channel 9 connected to DMA2 Channel 3 */ +#define LL_DMAMUX_CHANNEL_10 0x0000000AU /*!< DMAMUX Channel 10 connected to DMA2 Channel 4 */ +#define LL_DMAMUX_CHANNEL_11 0x0000000BU /*!< DMAMUX Channel 11 connected to DMA2 Channel 5 */ +#define LL_DMAMUX_CHANNEL_12 0x0000000CU /*!< DMAMUX Channel 12 connected to DMA2 Channel 6 */ +#define LL_DMAMUX_CHANNEL_13 0x0000000DU /*!< DMAMUX Channel 13 connected to DMA2 Channel 7 */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_SYNC_NO Synchronization Signal Polarity + * @{ + */ +#define LL_DMAMUX_SYNC_NO_EVENT 0x00000000U /*!< All requests are blocked */ +#define LL_DMAMUX_SYNC_POL_RISING DMAMUX_CxCR_SPOL_0 /*!< Synchronization on event on rising edge */ +#define LL_DMAMUX_SYNC_POL_FALLING DMAMUX_CxCR_SPOL_1 /*!< Synchronization on event on falling edge */ +#define LL_DMAMUX_SYNC_POL_RISING_FALLING (DMAMUX_CxCR_SPOL_0 | DMAMUX_CxCR_SPOL_1) /*!< Synchronization on event on rising and falling edge */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_SYNC_EVT Synchronization Signal Event + * @{ + */ +#define LL_DMAMUX_SYNC_EXTI_LINE0 0U /*!< Synchronization signal from EXTI Line0 */ +#define LL_DMAMUX_SYNC_EXTI_LINE1 1U /*!< Synchronization signal from EXTI Line1 */ +#define LL_DMAMUX_SYNC_EXTI_LINE2 2U /*!< Synchronization signal from EXTI Line2 */ +#define LL_DMAMUX_SYNC_EXTI_LINE3 3U /*!< Synchronization signal from EXTI Line3 */ +#define LL_DMAMUX_SYNC_EXTI_LINE4 4U /*!< Synchronization signal from EXTI Line4 */ +#define LL_DMAMUX_SYNC_EXTI_LINE5 5U /*!< Synchronization signal from EXTI Line5 */ +#define LL_DMAMUX_SYNC_EXTI_LINE6 6U /*!< Synchronization signal from EXTI Line6 */ +#define LL_DMAMUX_SYNC_EXTI_LINE7 7U /*!< Synchronization signal from EXTI Line7 */ +#define LL_DMAMUX_SYNC_EXTI_LINE8 8U /*!< Synchronization signal from EXTI Line8 */ +#define LL_DMAMUX_SYNC_EXTI_LINE9 9U /*!< Synchronization signal from EXTI Line9 */ +#define LL_DMAMUX_SYNC_EXTI_LINE10 10U /*!< Synchronization signal from EXTI Line10 */ +#define LL_DMAMUX_SYNC_EXTI_LINE11 11U /*!< Synchronization signal from EXTI Line11 */ +#define LL_DMAMUX_SYNC_EXTI_LINE12 12U /*!< Synchronization signal from EXTI Line12 */ +#define LL_DMAMUX_SYNC_EXTI_LINE13 13U /*!< Synchronization signal from EXTI Line13 */ +#define LL_DMAMUX_SYNC_EXTI_LINE14 14U /*!< Synchronization signal from EXTI Line14 */ +#define LL_DMAMUX_SYNC_EXTI_LINE15 15U /*!< Synchronization signal from EXTI Line15 */ +#define LL_DMAMUX_SYNC_DMAMUX_CH0 16U /*!< Synchronization signal from DMAMUX channel0 Event */ +#define LL_DMAMUX_SYNC_DMAMUX_CH1 17U /*!< Synchronization signal from DMAMUX channel1 Event */ +#define LL_DMAMUX_SYNC_DMAMUX_CH2 18U /*!< Synchronization signal from DMAMUX channel2 Event */ +#define LL_DMAMUX_SYNC_DMAMUX_CH3 19U /*!< Synchronization signal from DMAMUX channel3 Event */ +#define LL_DMAMUX_SYNC_LPTIM1_OUT 20U /*!< Synchronization signal from LPTIM1 Ouput */ +#define LL_DMAMUX_SYNC_LPTIM2_OUT 21U /*!< Synchronization signal from LPTIM2 Ouput */ +#define LL_DMAMUX_SYNC_DSI_TE 22U /*!< Synchronization signal from DSI Tearing Effect */ +#define LL_DMAMUX_SYNC_DSI_REFRESH_END 23U /*!< Synchronization signal from DSI End of Refresh */ +#define LL_DMAMUX_SYNC_DMA2D_TX_END 24U /*!< Synchronization signal from DMA2D End of Transfer */ +#define LL_DMAMUX_SYNC_LTDC_LINE_IT 25U /*!< Synchronization signal from LTDC Line Interrupt */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_REQUEST_GENERATOR Request Generator Channel + * @{ + */ +#define LL_DMAMUX_REQ_GEN_0 0x00000000U +#define LL_DMAMUX_REQ_GEN_1 0x00000001U +#define LL_DMAMUX_REQ_GEN_2 0x00000002U +#define LL_DMAMUX_REQ_GEN_3 0x00000003U +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_REQUEST_GEN_POLARITY External Request Signal Generation Polarity + * @{ + */ +#define LL_DMAMUX_REQ_GEN_NO_EVENT 0x00000000U /*!< No external DMA request generation */ +#define LL_DMAMUX_REQ_GEN_POL_RISING DMAMUX_RGxCR_GPOL_0 /*!< External DMA request generation on event on rising edge */ +#define LL_DMAMUX_REQ_GEN_POL_FALLING DMAMUX_RGxCR_GPOL_1 /*!< External DMA request generation on event on falling edge */ +#define LL_DMAMUX_REQ_GEN_POL_RISING_FALLING (DMAMUX_RGxCR_GPOL_0 | DMAMUX_RGxCR_GPOL_1) /*!< External DMA request generation on rising and falling edge */ +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EC_REQUEST_GEN External Request Signal Generation + * @{ + */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE0 0U /*!< Request signal generation from EXTI Line0 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE1 1U /*!< Request signal generation from EXTI Line1 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE2 2U /*!< Request signal generation from EXTI Line2 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE3 3U /*!< Request signal generation from EXTI Line3 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE4 4U /*!< Request signal generation from EXTI Line4 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE5 5U /*!< Request signal generation from EXTI Line5 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE6 6U /*!< Request signal generation from EXTI Line6 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE7 7U /*!< Request signal generation from EXTI Line7 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE8 8U /*!< Request signal generation from EXTI Line8 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE9 9U /*!< Request signal generation from EXTI Line9 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE10 10U /*!< Request signal generation from EXTI Line10 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE11 11U /*!< Request signal generation from EXTI Line11 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE12 12U /*!< Request signal generation from EXTI Line12 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE13 13U /*!< Request signal generation from EXTI Line13 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE14 14U /*!< Request signal generation from EXTI Line14 */ +#define LL_DMAMUX_REQ_GEN_EXTI_LINE15 15U /*!< Request signal generation from EXTI Line15 */ +#define LL_DMAMUX_REQ_GEN_DMAMUX_CH0 16U /*!< Request signal generation from DMAMUX channel0 Event */ +#define LL_DMAMUX_REQ_GEN_DMAMUX_CH1 17U /*!< Request signal generation from DMAMUX channel1 Event */ +#define LL_DMAMUX_REQ_GEN_DMAMUX_CH2 18U /*!< Request signal generation from DMAMUX channel2 Event */ +#define LL_DMAMUX_REQ_GEN_DMAMUX_CH3 19U /*!< Request signal generation from DMAMUX channel3 Event */ +#define LL_DMAMUX_REQ_GEN_LPTIM1_OUT 20U /*!< Request signal generation from LPTIM1 Ouput */ +#define LL_DMAMUX_REQ_GEN_LPTIM2_OUT 21U /*!< Request signal generation from LPTIM2 Ouput */ +#define LL_DMAMUX_REQ_GEN_DSI_TE 22U /*!< Request signal generation from DSI Tearing Effect */ +#define LL_DMAMUX_REQ_GEN_DSI_REFRESH_END 23U /*!< Request signal generation from DSI End of Refresh */ +#define LL_DMAMUX_REQ_GEN_DMA2D_TX_END 24U /*!< Request signal generation from DMA2D End of Transfer */ +#define LL_DMAMUX_REQ_GEN_LTDC_LINE_IT 25U /*!< Request signal generation from LTDC Line Interrupt */ +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup DMAMUX_LL_Exported_Macros DMAMUX Exported Macros + * @{ + */ + +/** @defgroup DMAMUX_LL_EM_WRITE_READ Common Write and read registers macros + * @{ + */ +/** + * @brief Write a value in DMAMUX register + * @param __INSTANCE__ DMAMUX Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_DMAMUX_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in DMAMUX register + * @param __INSTANCE__ DMAMUX Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_DMAMUX_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup DMAMUX_LL_Exported_Functions DMAMUX Exported Functions + * @{ + */ + +/** @defgroup DMAMUX_LL_EF_Configuration Configuration + * @{ + */ +/** + * @brief Set DMAMUX request ID for DMAMUX Channel x. + * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7. + * DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7. + * @rmtoll CxCR DMAREQ_ID LL_DMAMUX_SetRequestID + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @param Request This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_MEM2MEM + * @arg @ref LL_DMAMUX_REQ_GENERATOR0 + * @arg @ref LL_DMAMUX_REQ_GENERATOR1 + * @arg @ref LL_DMAMUX_REQ_GENERATOR2 + * @arg @ref LL_DMAMUX_REQ_GENERATOR3 + * @arg @ref LL_DMAMUX_REQ_ADC1 + * @arg @ref LL_DMAMUX_REQ_DAC1_CH1 + * @arg @ref LL_DMAMUX_REQ_DAC1_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM6_UP + * @arg @ref LL_DMAMUX_REQ_TIM7_UP + * @arg @ref LL_DMAMUX_REQ_SPI1_RX + * @arg @ref LL_DMAMUX_REQ_SPI1_TX + * @arg @ref LL_DMAMUX_REQ_SPI2_RX + * @arg @ref LL_DMAMUX_REQ_SPI2_TX + * @arg @ref LL_DMAMUX_REQ_SPI3_RX + * @arg @ref LL_DMAMUX_REQ_SPI3_TX + * @arg @ref LL_DMAMUX_REQ_I2C1_RX + * @arg @ref LL_DMAMUX_REQ_I2C1_TX + * @arg @ref LL_DMAMUX_REQ_I2C2_RX + * @arg @ref LL_DMAMUX_REQ_I2C2_TX + * @arg @ref LL_DMAMUX_REQ_I2C3_RX + * @arg @ref LL_DMAMUX_REQ_I2C3_TX + * @arg @ref LL_DMAMUX_REQ_I2C4_RX + * @arg @ref LL_DMAMUX_REQ_I2C4_TX + * @arg @ref LL_DMAMUX_REQ_USART1_RX + * @arg @ref LL_DMAMUX_REQ_USART1_TX + * @arg @ref LL_DMAMUX_REQ_USART2_RX + * @arg @ref LL_DMAMUX_REQ_USART2_TX + * @arg @ref LL_DMAMUX_REQ_USART3_RX + * @arg @ref LL_DMAMUX_REQ_USART3_TX + * @arg @ref LL_DMAMUX_REQ_UART4_RX + * @arg @ref LL_DMAMUX_REQ_UART4_TX + * @arg @ref LL_DMAMUX_REQ_UART5_RX + * @arg @ref LL_DMAMUX_REQ_UART5_TX + * @arg @ref LL_DMAMUX_REQ_LPUART1_RX + * @arg @ref LL_DMAMUX_REQ_LPUART1_TX + * @arg @ref LL_DMAMUX_REQ_SAI1_A + * @arg @ref LL_DMAMUX_REQ_SAI1_B + * @arg @ref LL_DMAMUX_REQ_SAI2_A + * @arg @ref LL_DMAMUX_REQ_SAI2_B + * @arg @ref LL_DMAMUX_REQ_OSPI1 + * @arg @ref LL_DMAMUX_REQ_OSPI2 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM1_UP + * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM1_COM + * @arg @ref LL_DMAMUX_REQ_TIM8_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM8_UP + * @arg @ref LL_DMAMUX_REQ_TIM8_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM8_COM + * @arg @ref LL_DMAMUX_REQ_TIM2_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM2_UP + * @arg @ref LL_DMAMUX_REQ_TIM3_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM3_UP + * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM4_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM4_UP + * @arg @ref LL_DMAMUX_REQ_TIM5_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM5_UP + * @arg @ref LL_DMAMUX_REQ_TIM5_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM15_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM15_UP + * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM15_COM + * @arg @ref LL_DMAMUX_REQ_TIM16_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM16_UP + * @arg @ref LL_DMAMUX_REQ_TIM17_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM17_UP + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3 + * @arg @ref LL_DMAMUX_REQ_DCMI + * @arg @ref LL_DMAMUX_REQ_AES_IN + * @arg @ref LL_DMAMUX_REQ_AES_OUT + * @arg @ref LL_DMAMUX_REQ_HASH_IN + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetRequestID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel, uint32_t Request) +{ + MODIFY_REG(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_DMAREQ_ID, Request); +} + +/** + * @brief Get DMAMUX request ID for DMAMUX Channel x. + * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7. + * DMAMUX channel 7 to 13 are mapped to DMA2 channel 1 to 7. + * @rmtoll CxCR DMAREQ_ID LL_DMAMUX_GetRequestID + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_MEM2MEM + * @arg @ref LL_DMAMUX_REQ_GENERATOR0 + * @arg @ref LL_DMAMUX_REQ_GENERATOR1 + * @arg @ref LL_DMAMUX_REQ_GENERATOR2 + * @arg @ref LL_DMAMUX_REQ_GENERATOR3 + * @arg @ref LL_DMAMUX_REQ_ADC1 + * @arg @ref LL_DMAMUX_REQ_DAC1_CH1 + * @arg @ref LL_DMAMUX_REQ_DAC1_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM6_UP + * @arg @ref LL_DMAMUX_REQ_TIM7_UP + * @arg @ref LL_DMAMUX_REQ_SPI1_RX + * @arg @ref LL_DMAMUX_REQ_SPI1_TX + * @arg @ref LL_DMAMUX_REQ_SPI2_RX + * @arg @ref LL_DMAMUX_REQ_SPI2_TX + * @arg @ref LL_DMAMUX_REQ_SPI3_RX + * @arg @ref LL_DMAMUX_REQ_SPI3_TX + * @arg @ref LL_DMAMUX_REQ_I2C1_RX + * @arg @ref LL_DMAMUX_REQ_I2C1_TX + * @arg @ref LL_DMAMUX_REQ_I2C2_RX + * @arg @ref LL_DMAMUX_REQ_I2C2_TX + * @arg @ref LL_DMAMUX_REQ_I2C3_RX + * @arg @ref LL_DMAMUX_REQ_I2C3_TX + * @arg @ref LL_DMAMUX_REQ_I2C4_RX + * @arg @ref LL_DMAMUX_REQ_I2C4_TX + * @arg @ref LL_DMAMUX_REQ_USART1_RX + * @arg @ref LL_DMAMUX_REQ_USART1_TX + * @arg @ref LL_DMAMUX_REQ_USART2_RX + * @arg @ref LL_DMAMUX_REQ_USART2_TX + * @arg @ref LL_DMAMUX_REQ_USART3_RX + * @arg @ref LL_DMAMUX_REQ_USART3_TX + * @arg @ref LL_DMAMUX_REQ_UART4_RX + * @arg @ref LL_DMAMUX_REQ_UART4_TX + * @arg @ref LL_DMAMUX_REQ_UART5_RX + * @arg @ref LL_DMAMUX_REQ_UART5_TX + * @arg @ref LL_DMAMUX_REQ_LPUART1_RX + * @arg @ref LL_DMAMUX_REQ_LPUART1_TX + * @arg @ref LL_DMAMUX_REQ_SAI1_A + * @arg @ref LL_DMAMUX_REQ_SAI1_B + * @arg @ref LL_DMAMUX_REQ_SAI2_A + * @arg @ref LL_DMAMUX_REQ_SAI2_B + * @arg @ref LL_DMAMUX_REQ_OSPI1 + * @arg @ref LL_DMAMUX_REQ_OSPI2 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM1_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM1_UP + * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM1_COM + * @arg @ref LL_DMAMUX_REQ_TIM8_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM8_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM8_UP + * @arg @ref LL_DMAMUX_REQ_TIM8_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM8_COM + * @arg @ref LL_DMAMUX_REQ_TIM2_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM2_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM2_UP + * @arg @ref LL_DMAMUX_REQ_TIM3_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM3_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM3_UP + * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM4_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM4_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM4_UP + * @arg @ref LL_DMAMUX_REQ_TIM5_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH2 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH3 + * @arg @ref LL_DMAMUX_REQ_TIM5_CH4 + * @arg @ref LL_DMAMUX_REQ_TIM5_UP + * @arg @ref LL_DMAMUX_REQ_TIM5_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM15_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM15_UP + * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG + * @arg @ref LL_DMAMUX_REQ_TIM15_COM + * @arg @ref LL_DMAMUX_REQ_TIM16_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM16_UP + * @arg @ref LL_DMAMUX_REQ_TIM17_CH1 + * @arg @ref LL_DMAMUX_REQ_TIM17_UP + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2 + * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3 + * @arg @ref LL_DMAMUX_REQ_DCMI + * @arg @ref LL_DMAMUX_REQ_AES_IN + * @arg @ref LL_DMAMUX_REQ_AES_OUT + * @arg @ref LL_DMAMUX_REQ_HASH_IN + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetRequestID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel-1)))))->CCR, DMAMUX_CxCR_DMAREQ_ID)); +} + +/** + * @brief Set the number of DMA request that will be autorized after a synchronization event and/or the number of DMA request needed to generate an event. + * @rmtoll CxCR NBREQ LL_DMAMUX_SetSyncRequestNb + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @param RequestNb This parameter must be a value between Min_Data = 1 and Max_Data = 32. + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetSyncRequestNb(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel, uint32_t RequestNb) +{ + MODIFY_REG(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_NBREQ, RequestNb - 1); +} + +/** + * @brief Get the number of DMA request that will be autorized after a synchronization event and/or the number of DMA request needed to generate an event. + * @rmtoll CxCR NBREQ LL_DMAMUX_GetSyncRequestNb + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval Between Min_Data = 1 and Max_Data = 32 + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetSyncRequestNb(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_NBREQ) + 1); +} + +/** + * @brief Set the polarity of the signal on which the DMA request is synchronized. + * @rmtoll CxCR SPOL LL_DMAMUX_SetSyncPolarity + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_SYNC_NO_EVENT + * @arg @ref LL_DMAMUX_SYNC_POL_RISING + * @arg @ref LL_DMAMUX_SYNC_POL_FALLING + * @arg @ref LL_DMAMUX_SYNC_POL_RISING_FALLING + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetSyncPolarity(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel, uint32_t Polarity) +{ + MODIFY_REG(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SPOL, Polarity); +} + +/** + * @brief Get the polarity of the signal on which the DMA request is synchronized. + * @rmtoll CxCR SPOL LL_DMAMUX_GetSyncPolarity + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_SYNC_NO_EVENT + * @arg @ref LL_DMAMUX_SYNC_POL_RISING + * @arg @ref LL_DMAMUX_SYNC_POL_FALLING + * @arg @ref LL_DMAMUX_SYNC_POL_RISING_FALLING + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetSyncPolarity(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SPOL)); +} + +/** + * @brief Enable the Event Generation on DMAMUX channel x. + * @rmtoll CxCR EGE LL_DMAMUX_EnableEventGeneration + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_EnableEventGeneration(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + SET_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_EGE); +} + +/** + * @brief Disable the Event Generation on DMAMUX channel x. + * @rmtoll CxCR EGE LL_DMAMUX_DisableEventGeneration + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_DisableEventGeneration(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + CLEAR_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_EGE); +} + +/** + * @brief Check if the Event Generation on DMAMUX channel x is enabled or disabled. + * @rmtoll CxCR EGE LL_DMAMUX_IsEnabledEventGeneration + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsEnabledEventGeneration(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_EGE) == (DMAMUX_CxCR_EGE)); +} + +/** + * @brief Enable the synchronization mode. + * @rmtoll CxCR SE LL_DMAMUX_EnableSync + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_EnableSync(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + SET_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SE); +} + +/** + * @brief Disable the synchronization mode. + * @rmtoll CxCR SE LL_DMAMUX_DisableSync + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_DisableSync(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + CLEAR_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SE); +} + +/** + * @brief Check if the synchronization mode is enabled or disabled. + * @rmtoll CxCR SE LL_DMAMUX_IsEnabledSync + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsEnabledSync(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SE) == (DMAMUX_CxCR_SE)); +} + +/** + * @brief Set DMAMUX synchronization ID on DMAMUX Channel x. + * @rmtoll CxCR SYNC_ID LL_DMAMUX_SetSyncID + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @param SyncID This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE0 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE1 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE2 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE3 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE4 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE5 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE6 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE7 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE8 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE9 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE10 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE11 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE12 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE13 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE14 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE15 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH0 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH1 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH2 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH3 + * @arg @ref LL_DMAMUX_SYNC_LPTIM1_OUT + * @arg @ref LL_DMAMUX_SYNC_LPTIM2_OUT + * @arg @ref LL_DMAMUX_SYNC_DSI_TE + * @arg @ref LL_DMAMUX_SYNC_DSI_REFRESH_END + * @arg @ref LL_DMAMUX_SYNC_DMA2D_TX_END + * @arg @ref LL_DMAMUX_SYNC_LTDC_LINE_IT + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetSyncID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel, uint32_t SyncID) +{ + MODIFY_REG(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SYNC_ID, SyncID); +} + +/** + * @brief Get DMAMUX synchronization ID on DMAMUX Channel x. + * @rmtoll CxCR SYNC_ID LL_DMAMUX_GetSyncID + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE0 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE1 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE2 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE3 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE4 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE5 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE6 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE7 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE8 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE9 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE10 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE11 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE12 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE13 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE14 + * @arg @ref LL_DMAMUX_SYNC_EXTI_LINE15 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH0 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH1 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH2 + * @arg @ref LL_DMAMUX_SYNC_DMAMUX_CH3 + * @arg @ref LL_DMAMUX_SYNC_LPTIM1_OUT + * @arg @ref LL_DMAMUX_SYNC_LPTIM2_OUT + * @arg @ref LL_DMAMUX_SYNC_DSI_TE + * @arg @ref LL_DMAMUX_SYNC_DSI_REFRESH_END + * @arg @ref LL_DMAMUX_SYNC_DMA2D_TX_END + * @arg @ref LL_DMAMUX_SYNC_LTDC_LINE_IT + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetSyncID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SYNC_ID)); +} + +/** + * @brief Enable the Request Generator. + * @rmtoll RGxCR GE LL_DMAMUX_EnableRequestGen + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_EnableRequestGen(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + SET_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GE); +} + +/** + * @brief Disable the Request Generator. + * @rmtoll RGxCR GE LL_DMAMUX_DisableRequestGen + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_DisableRequestGen(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + CLEAR_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GE); +} + +/** + * @brief Check if the Request Generator is enabled or disabled. + * @rmtoll RGxCR GE LL_DMAMUX_IsEnabledRequestGen + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsEnabledRequestGen(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + return (READ_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GE) == (DMAMUX_RGxCR_GE)); +} + +/** + * @brief Set the polarity of the signal on which the DMA request is generated. + * @rmtoll RGxCR GPOL LL_DMAMUX_SetRequestGenPolarity + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @param Polarity This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_NO_EVENT + * @arg @ref LL_DMAMUX_REQ_GEN_POL_RISING + * @arg @ref LL_DMAMUX_REQ_GEN_POL_FALLING + * @arg @ref LL_DMAMUX_REQ_GEN_POL_RISING_FALLING + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetRequestGenPolarity(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel, uint32_t Polarity) +{ + MODIFY_REG(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GPOL, Polarity); +} + +/** + * @brief Get the polarity of the signal on which the DMA request is generated. + * @rmtoll RGxCR GPOL LL_DMAMUX_GetRequestGenPolarity + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_NO_EVENT + * @arg @ref LL_DMAMUX_REQ_GEN_POL_RISING + * @arg @ref LL_DMAMUX_REQ_GEN_POL_FALLING + * @arg @ref LL_DMAMUX_REQ_GEN_POL_RISING_FALLING + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetRequestGenPolarity(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GPOL)); +} + +/** + * @brief Set the number of DMA request that will be autorized after a generation event. + * @note This field can only be written when Generator is disabled. + * @rmtoll RGxCR GNBREQ LL_DMAMUX_SetGenRequestNb + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @param RequestNb This parameter must be a value between Min_Data = 1 and Max_Data = 32. + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetGenRequestNb(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel, uint32_t RequestNb) +{ + MODIFY_REG(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GNBREQ, (RequestNb - 1) << DMAMUX_RGxCR_GNBREQ_Pos); +} + +/** + * @brief Get the number of DMA request that will be autorized after a generation event. + * @rmtoll RGxCR GNBREQ LL_DMAMUX_GetGenRequestNb + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval Between Min_Data = 1 and Max_Data = 32 + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetGenRequestNb(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + return (uint32_t)((READ_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_GNBREQ) >> DMAMUX_RGxCR_GNBREQ_Pos) + 1); +} + +/** + * @brief Set DMAMUX external Request Signal ID on DMAMUX Request Generation Trigger Event Channel x. + * @rmtoll RGxCR SIG_ID LL_DMAMUX_SetRequestSignalID + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @param RequestSignalID This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE0 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE1 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE2 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE3 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE4 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE5 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE6 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE7 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE8 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE9 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE10 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE11 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE12 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE13 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE14 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE15 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH0 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH1 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH2 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH3 + * @arg @ref LL_DMAMUX_REQ_GEN_LPTIM1_OUT + * @arg @ref LL_DMAMUX_REQ_GEN_LPTIM2_OUT + * @arg @ref LL_DMAMUX_REQ_GEN_DSI_TE + * @arg @ref LL_DMAMUX_REQ_GEN_DSI_REFRESH_END + * @arg @ref LL_DMAMUX_REQ_GEN_DMA2D_TX_END + * @arg @ref LL_DMAMUX_REQ_GEN_LTDC_LINE_IT + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_SetRequestSignalID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel, uint32_t RequestSignalID) +{ + MODIFY_REG(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_SIG_ID, RequestSignalID); +} + +/** + * @brief Get DMAMUX external Request Signal ID set on DMAMUX Channel x. + * @rmtoll RGxCR SIG_ID LL_DMAMUX_GetRequestSignalID + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval Returned value can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE0 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE1 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE2 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE3 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE4 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE5 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE6 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE7 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE8 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE9 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE10 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE11 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE12 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE13 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE14 + * @arg @ref LL_DMAMUX_REQ_GEN_EXTI_LINE15 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH0 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH1 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH2 + * @arg @ref LL_DMAMUX_REQ_GEN_DMAMUX_CH3 + * @arg @ref LL_DMAMUX_REQ_GEN_LPTIM1_OUT + * @arg @ref LL_DMAMUX_REQ_GEN_LPTIM2_OUT + * @arg @ref LL_DMAMUX_REQ_GEN_DSI_TE + * @arg @ref LL_DMAMUX_REQ_GEN_DSI_REFRESH_END + * @arg @ref LL_DMAMUX_REQ_GEN_DMA2D_TX_END + * @arg @ref LL_DMAMUX_REQ_GEN_LTDC_LINE_IT + */ +__STATIC_INLINE uint32_t LL_DMAMUX_GetRequestSignalID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + return (uint32_t)(READ_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_SIG_ID)); +} + +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EF_FLAG_Management FLAG_Management + * @{ + */ + +/** + * @brief Get Synchronization Event Overrun Flag Channel 0. + * @rmtoll CSR SOF0 LL_DMAMUX_IsActiveFlag_SO0 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO0(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF0) == (DMAMUX_CSR_SOF0)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 1. + * @rmtoll CSR SOF1 LL_DMAMUX_IsActiveFlag_SO1 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO1(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF1) == (DMAMUX_CSR_SOF1)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 2. + * @rmtoll CSR SOF2 LL_DMAMUX_IsActiveFlag_SO2 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO2(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF2) == (DMAMUX_CSR_SOF2)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 3. + * @rmtoll CSR SOF3 LL_DMAMUX_IsActiveFlag_SO3 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO3(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF3) == (DMAMUX_CSR_SOF3)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 4. + * @rmtoll CSR SOF4 LL_DMAMUX_IsActiveFlag_SO4 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO4(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF4) == (DMAMUX_CSR_SOF4)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 5. + * @rmtoll CSR SOF5 LL_DMAMUX_IsActiveFlag_SO5 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO5(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF5) == (DMAMUX_CSR_SOF5)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 6. + * @rmtoll CSR SOF6 LL_DMAMUX_IsActiveFlag_SO6 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO6(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF6) == (DMAMUX_CSR_SOF6)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 7. + * @rmtoll CSR SOF7 LL_DMAMUX_IsActiveFlag_SO7 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO7(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF7) == (DMAMUX_CSR_SOF7)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 8. + * @rmtoll CSR SOF8 LL_DMAMUX_IsActiveFlag_SO8 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO8(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF8) == (DMAMUX_CSR_SOF8)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 9. + * @rmtoll CSR SOF9 LL_DMAMUX_IsActiveFlag_SO9 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO9(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF9) == (DMAMUX_CSR_SOF9)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 10. + * @rmtoll CSR SOF10 LL_DMAMUX_IsActiveFlag_SO10 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO10(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF10) == (DMAMUX_CSR_SOF10)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 11. + * @rmtoll CSR SOF11 LL_DMAMUX_IsActiveFlag_SO11 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO11(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF11) == (DMAMUX_CSR_SOF11)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 12. + * @rmtoll CSR SOF12 LL_DMAMUX_IsActiveFlag_SO12 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO12(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF12) == (DMAMUX_CSR_SOF12)); +} + +/** + * @brief Get Synchronization Event Overrun Flag Channel 13. + * @rmtoll CSR SOF13 LL_DMAMUX_IsActiveFlag_SO13 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_SO13(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_ChannelStatus->CSR, DMAMUX_CSR_SOF13) == (DMAMUX_CSR_SOF13)); +} + +/** + * @brief Get Request Generator 0 Trigger Event Overrun Flag. + * @rmtoll RGSR OF0 LL_DMAMUX_IsActiveFlag_RGO0 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_RGO0(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_RequestGenStatus->RGSR, DMAMUX_RGSR_OF0) == (DMAMUX_RGSR_OF0)); +} + +/** + * @brief Get Request Generator 1 Trigger Event Overrun Flag. + * @rmtoll RGSR OF1 LL_DMAMUX_IsActiveFlag_RGO1 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_RGO1(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_RequestGenStatus->RGSR, DMAMUX_RGSR_OF1) == (DMAMUX_RGSR_OF1)); +} + +/** + * @brief Get Request Generator 2 Trigger Event Overrun Flag. + * @rmtoll RGSR OF2 LL_DMAMUX_IsActiveFlag_RGO2 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_RGO2(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_RequestGenStatus->RGSR, DMAMUX_RGSR_OF2) == (DMAMUX_RGSR_OF2)); +} + +/** + * @brief Get Request Generator 3 Trigger Event Overrun Flag. + * @rmtoll RGSR OF3 LL_DMAMUX_IsActiveFlag_RGO3 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsActiveFlag_RGO3(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + return (READ_BIT(DMAMUX1_RequestGenStatus->RGSR, DMAMUX_RGSR_OF3) == (DMAMUX_RGSR_OF3)); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 0. + * @rmtoll CFR CSOF0 LL_DMAMUX_ClearFlag_SO0 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO0(DMAMUX_Channel_TypeDef * DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF0); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 1. + * @rmtoll CFR CSOF1 LL_DMAMUX_ClearFlag_SO1 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO1(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF1); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 2. + * @rmtoll CFR CSOF2 LL_DMAMUX_ClearFlag_SO2 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO2(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF2); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 3. + * @rmtoll CFR CSOF3 LL_DMAMUX_ClearFlag_SO3 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO3(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF3); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 4. + * @rmtoll CFR CSOF4 LL_DMAMUX_ClearFlag_SO4 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO4(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF4); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 5. + * @rmtoll CFR CSOF5 LL_DMAMUX_ClearFlag_SO5 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO5(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF5); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 6. + * @rmtoll CFR CSOF6 LL_DMAMUX_ClearFlag_SO6 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO6(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF6); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 7. + * @rmtoll CFR CSOF7 LL_DMAMUX_ClearFlag_SO7 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO7(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF7); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 8. + * @rmtoll CFR CSOF8 LL_DMAMUX_ClearFlag_SO8 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO8(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF8); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 9. + * @rmtoll CFR CSOF9 LL_DMAMUX_ClearFlag_SO9 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO9(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF9); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 10. + * @rmtoll CFR CSOF10 LL_DMAMUX_ClearFlag_SO10 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO10(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF10); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 11. + * @rmtoll CFR CSOF11 LL_DMAMUX_ClearFlag_SO11 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO11(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF11); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 12. + * @rmtoll CFR CSOF12 LL_DMAMUX_ClearFlag_SO12 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO12(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF12); +} + +/** + * @brief Clear Synchronization Event Overrun Flag Channel 13. + * @rmtoll CFR CSOF13 LL_DMAMUX_ClearFlag_SO13 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_SO13(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_ChannelStatus->CFR, DMAMUX_CFR_CSOF13); +} + +/** + * @brief Clear Request Generator 0 Trigger Event Overrun Flag. + * @rmtoll RGCFR COF0 LL_DMAMUX_ClearFlag_RGO0 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_RGO0(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_RequestGenStatus->RGCFR, DMAMUX_RGCFR_COF0); +} + +/** + * @brief Clear Request Generator 1 Trigger Event Overrun Flag. + * @rmtoll RGCFR COF1 LL_DMAMUX_ClearFlag_RGO1 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_RGO1(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_RequestGenStatus->RGCFR, DMAMUX_RGCFR_COF1); +} + +/** + * @brief Clear Request Generator 2 Trigger Event Overrun Flag. + * @rmtoll RGCFR COF2 LL_DMAMUX_ClearFlag_RGO2 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_RGO2(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_RequestGenStatus->RGCFR, DMAMUX_RGCFR_COF2); +} + +/** + * @brief Clear Request Generator 3 Trigger Event Overrun Flag. + * @rmtoll RGCFR COF3 LL_DMAMUX_ClearFlag_RGO3 + * @param DMAMUXx DMAMUXx DMAMUXx Instance + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_ClearFlag_RGO3(DMAMUX_Channel_TypeDef *DMAMUXx) +{ + SET_BIT(DMAMUX1_RequestGenStatus->RGCFR, DMAMUX_RGCFR_COF3); +} + +/** + * @} + */ + +/** @defgroup DMAMUX_LL_EF_IT_Management IT_Management + * @{ + */ + +/** + * @brief Enable the Synchronization Event Overrun Interrupt on DMAMUX channel x. + * @rmtoll CxCR SOIE LL_DMAMUX_EnableIT_SO + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_EnableIT_SO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + SET_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SOIE); +} + +/** + * @brief Disable the Synchronization Event Overrun Interrupt on DMAMUX channel x. + * @rmtoll CxCR SOIE LL_DMAMUX_DisableIT_SO + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_DisableIT_SO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + CLEAR_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SOIE); +} + +/** + * @brief Check if the Synchronization Event Overrun Interrupt on DMAMUX channel x is enabled or disabled. + * @rmtoll CxCR SOIE LL_DMAMUX_IsEnabledIT_SO + * @param DMAMUXx DMAMUXx Instance + * @param Channel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_CHANNEL_0 + * @arg @ref LL_DMAMUX_CHANNEL_1 + * @arg @ref LL_DMAMUX_CHANNEL_2 + * @arg @ref LL_DMAMUX_CHANNEL_3 + * @arg @ref LL_DMAMUX_CHANNEL_4 + * @arg @ref LL_DMAMUX_CHANNEL_5 + * @arg @ref LL_DMAMUX_CHANNEL_6 + * @arg @ref LL_DMAMUX_CHANNEL_7 + * @arg @ref LL_DMAMUX_CHANNEL_8 + * @arg @ref LL_DMAMUX_CHANNEL_9 + * @arg @ref LL_DMAMUX_CHANNEL_10 + * @arg @ref LL_DMAMUX_CHANNEL_11 + * @arg @ref LL_DMAMUX_CHANNEL_12 + * @arg @ref LL_DMAMUX_CHANNEL_13 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsEnabledIT_SO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel) +{ + return (READ_BIT(((DMAMUX_Channel_TypeDef*)((uint32_t)((uint32_t)DMAMUXx + (DMAMUX_CCR_SIZE*(Channel)))))->CCR, DMAMUX_CxCR_SOIE)); +} + +/** + * @brief Enable the Request Generation Trigger Event Overrun Interrupt on DMAMUX channel x. + * @rmtoll RGxCR OIE LL_DMAMUX_EnableIT_RGO + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_EnableIT_RGO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + SET_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_OIE); +} + +/** + * @brief Disable the Request Generation Trigger Event Overrun Interrupt on DMAMUX channel x. + * @rmtoll RGxCR OIE LL_DMAMUX_DisableIT_RGO + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval None + */ +__STATIC_INLINE void LL_DMAMUX_DisableIT_RGO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + CLEAR_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_OIE); +} + +/** + * @brief Check if the Request Generation Trigger Event Overrun Interrupt on DMAMUX channel x is enabled or disabled. + * @rmtoll RGxCR OIE LL_DMAMUX_IsEnabledIT_RGO + * @param DMAMUXx DMAMUXx Instance + * @param RequestGenChannel This parameter can be one of the following values: + * @arg @ref LL_DMAMUX_REQ_GEN_0 + * @arg @ref LL_DMAMUX_REQ_GEN_1 + * @arg @ref LL_DMAMUX_REQ_GEN_2 + * @arg @ref LL_DMAMUX_REQ_GEN_3 + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_DMAMUX_IsEnabledIT_RGO(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t RequestGenChannel) +{ + return (READ_BIT(((DMAMUX_RequestGen_TypeDef*)((uint32_t)((uint32_t)DMAMUX1_RequestGenerator0 + (DMAMUX_RGCR_SIZE*(RequestGenChannel)))))->RGCR, DMAMUX_RGxCR_OIE) == (DMAMUX_RGxCR_OIE)); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* DMAMUX1 */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32L4xx_LL_DMAMUX_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.c index e94a1192ba..c97b41c126 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_exti.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief EXTI LL module driver. ****************************************************************************** * @attention @@ -108,11 +106,15 @@ uint32_t LL_EXTI_DeInit(void) LL_EXTI_WriteReg(FTSR1, 0x00000000U); /* Software interrupt event register set to default reset values */ LL_EXTI_WriteReg(SWIER1, 0x00000000U); - /* Pending register set to default reset values */ + /* Pending register clear */ LL_EXTI_WriteReg(PR1, 0x007DFFFFU); /* Interrupt mask register 2 set to default reset values */ +#if defined(LL_EXTI_LINE_40) + LL_EXTI_WriteReg(IMR2, 0x00000187U); +#else LL_EXTI_WriteReg(IMR2, 0x00000087U); +#endif /* Event mask register 2 set to default reset values */ LL_EXTI_WriteReg(EMR2, 0x00000000U); /* Rising Trigger selection register 2 set to default reset values */ @@ -121,7 +123,7 @@ uint32_t LL_EXTI_DeInit(void) LL_EXTI_WriteReg(FTSR2, 0x00000000U); /* Software interrupt event register 2 set to default reset values */ LL_EXTI_WriteReg(SWIER2, 0x00000000U); - /* Pending register 2 set to default reset values */ + /* Pending register 2 clear */ LL_EXTI_WriteReg(PR2, 0x00000078U); return SUCCESS; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.h index 8e31cc7a09..9127ab2f91 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_exti.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_exti.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of EXTI LL module. ****************************************************************************** * @attention @@ -187,6 +185,9 @@ typedef struct #if defined(EXTI_IMR2_IM39) #define LL_EXTI_LINE_39 EXTI_IMR2_IM39 /*!< Extended line 39 */ #endif +#if defined(EXTI_IMR2_IM40) +#define LL_EXTI_LINE_40 EXTI_IMR2_IM40 /*!< Extended line 40 */ +#endif #define LL_EXTI_LINE_ALL_32_63 EXTI_IMR2_IM /*!< All Extended line not reserved*/ @@ -329,13 +330,15 @@ __STATIC_INLINE void LL_EXTI_EnableIT_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be one of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval None */ __STATIC_INLINE void LL_EXTI_EnableIT_32_63(uint32_t ExtiLine) @@ -400,13 +403,15 @@ __STATIC_INLINE void LL_EXTI_DisableIT_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be one of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval None */ __STATIC_INLINE void LL_EXTI_DisableIT_32_63(uint32_t ExtiLine) @@ -471,13 +476,15 @@ __STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be one of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_32_63(uint32_t ExtiLine) @@ -545,13 +552,15 @@ __STATIC_INLINE void LL_EXTI_EnableEvent_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be a combination of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval None */ __STATIC_INLINE void LL_EXTI_EnableEvent_32_63(uint32_t ExtiLine) @@ -610,13 +619,15 @@ __STATIC_INLINE void LL_EXTI_DisableEvent_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be a combination of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval None */ __STATIC_INLINE void LL_EXTI_DisableEvent_32_63(uint32_t ExtiLine) @@ -676,13 +687,15 @@ __STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_0_31(uint32_t ExtiLine) * @param ExtiLine This parameter can be a combination of the following values: * @arg @ref LL_EXTI_LINE_32 * @arg @ref LL_EXTI_LINE_33 - * @arg @ref LL_EXTI_LINE_34 + * @arg @ref LL_EXTI_LINE_34(*) * @arg @ref LL_EXTI_LINE_35 * @arg @ref LL_EXTI_LINE_36 * @arg @ref LL_EXTI_LINE_37 * @arg @ref LL_EXTI_LINE_38 - * @arg @ref LL_EXTI_LINE_39 + * @arg @ref LL_EXTI_LINE_39(*) + * @arg @ref LL_EXTI_LINE_40(*) * @arg @ref LL_EXTI_LINE_ALL_32_63 + * @note (*): Available in some devices * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_32_63(uint32_t ExtiLine) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.c index 509f8b2c72..c052ded246 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_fmc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief FMC Low Layer HAL module driver. * * This file provides firmware functions to manage the following @@ -111,7 +109,17 @@ /* --- BCR Register ---*/ /* BCR register clear mask */ -#if defined(FMC_BCR1_WFDIS) +#if defined(FMC_BCRx_NBLSET) +#define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\ + FMC_BCRx_MTYP | FMC_BCRx_MWID |\ + FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\ + FMC_BCRx_WAITPOL | FMC_BCRx_WAITCFG |\ + FMC_BCRx_WREN | FMC_BCRx_WAITEN |\ + FMC_BCRx_EXTMOD | FMC_BCRx_ASYNCWAIT |\ + FMC_BCRx_CPSIZE | FMC_BCRx_CBURSTRW |\ + FMC_BCR1_CCLKEN | FMC_BCR1_WFDIS |\ + FMC_BCRx_NBLSET)) +#elif defined(FMC_BCR1_WFDIS) #define BCR_CLEAR_MASK ((uint32_t)(FMC_BCRx_MBKEN | FMC_BCRx_MUXEN |\ FMC_BCRx_MTYP | FMC_BCRx_MWID |\ FMC_BCRx_FACCEN | FMC_BCRx_BURSTEN |\ @@ -133,16 +141,29 @@ /* --- BTR Register ---*/ /* BTR register clear mask */ -#define BTR_CLEAR_MASK ((uint32_t)(FMC_BTRx_ADDSET | FMC_BTRx_ADDHLD |\ - FMC_BTRx_DATAST | FMC_BTRx_BUSTURN |\ - FMC_BTRx_CLKDIV | FMC_BTRx_DATLAT |\ - FMC_BTRx_ACCMOD)) +#if defined(FMC_BTRx_DATAHLD) +#define BTR_CLEAR_MASK ((uint32_t)(FMC_BTRx_ADDSET | FMC_BTRx_ADDHLD |\ + FMC_BTRx_DATAST | FMC_BTRx_BUSTURN |\ + FMC_BTRx_CLKDIV | FMC_BTRx_DATLAT |\ + FMC_BTRx_ACCMOD | FMC_BTRx_DATAHLD)) +#else +#define BTR_CLEAR_MASK ((uint32_t)(FMC_BTRx_ADDSET | FMC_BTRx_ADDHLD |\ + FMC_BTRx_DATAST | FMC_BTRx_BUSTURN |\ + FMC_BTRx_CLKDIV | FMC_BTRx_DATLAT |\ + FMC_BTRx_ACCMOD)) +#endif /* FMC_BTRx_DATAHLD */ /* --- BWTR Register ---*/ /* BWTR register clear mask */ -#define BWTR_CLEAR_MASK ((uint32_t)(FMC_BWTRx_ADDSET | FMC_BWTRx_ADDHLD | \ - FMC_BWTRx_DATAST | FMC_BWTRx_ACCMOD | \ - FMC_BWTRx_BUSTURN)) +#if defined(FMC_BWTRx_DATAHLD) +#define BWTR_CLEAR_MASK ((uint32_t)(FMC_BWTRx_ADDSET | FMC_BWTRx_ADDHLD |\ + FMC_BWTRx_DATAST | FMC_BWTRx_BUSTURN |\ + FMC_BWTRx_ACCMOD | FMC_BWTRx_DATAHLD)) +#else +#define BWTR_CLEAR_MASK ((uint32_t)(FMC_BWTRx_ADDSET | FMC_BWTRx_ADDHLD |\ + FMC_BWTRx_DATAST | FMC_BWTRx_BUSTURN |\ + FMC_BWTRx_ACCMOD)) +#endif /* FMC_BWTRx_DATAHLD */ /** * @} @@ -234,6 +255,9 @@ HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_Ini #if defined(FMC_BCR1_WFDIS) assert_param(IS_FMC_WRITE_FIFO(Init->WriteFifo)); #endif /* FMC_BCR1_WFDIS */ +#if defined(FMC_BCRx_NBLSET) + assert_param(IS_FMC_NBLSETUP_TIME(Init->NBLSetupTime)); +#endif /* FMC_BCRx_NBLSET */ assert_param(IS_FMC_PAGESIZE(Init->PageSize)); /* Disable NORSRAM Device */ @@ -258,6 +282,9 @@ HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_Ini #if defined(FMC_BCR1_WFDIS) | Init->WriteFifo #endif /* FMC_BCR1_WFDIS */ +#if defined(FMC_BCRx_NBLSET) + | Init->NBLSetupTime << POSITION_VAL(FMC_BCRx_NBLSET) +#endif /* FMC_BCRx_NBLSET */ | Init->PageSize ) ); @@ -280,6 +307,9 @@ HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_Ini #if defined(FMC_BCR1_WFDIS) | Init->WriteFifo #endif /* FMC_BCR1_WFDIS */ +#if defined(FMC_BCRx_NBLSET) + | Init->NBLSetupTime << POSITION_VAL(FMC_BCRx_NBLSET) +#endif /* FMC_BCRx_NBLSET */ | Init->PageSize ) ); @@ -297,8 +327,8 @@ HAL_StatusTypeDef FMC_NORSRAM_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSRAM_Ini /* Configure Write FIFO mode when Write Fifo is enabled for bank2..4 */ SET_BIT(Device->BTCR[FMC_NORSRAM_BANK1], (uint32_t)(Init->WriteFifo)); } - #endif /* FMC_BCR1_WFDIS */ + return HAL_OK; } @@ -356,6 +386,9 @@ HAL_StatusTypeDef FMC_NORSRAM_Timing_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSR assert_param(IS_FMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime)); assert_param(IS_FMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime)); assert_param(IS_FMC_DATASETUP_TIME(Timing->DataSetupTime)); +#if defined(FMC_BTRx_DATAHLD) + assert_param(IS_FMC_DATAHOLD_TIME(Timing->DataHoldTime)); +#endif /* FMC_BTRx_DATAHLD */ assert_param(IS_FMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration)); assert_param(IS_FMC_CLK_DIV(Timing->CLKDivision)); assert_param(IS_FMC_DATA_LATENCY(Timing->DataLatency)); @@ -363,14 +396,17 @@ HAL_StatusTypeDef FMC_NORSRAM_Timing_Init(FMC_NORSRAM_TypeDef *Device, FMC_NORSR assert_param(IS_FMC_NORSRAM_BANK(Bank)); /* Set FMC_NORSRAM device timing parameters */ - MODIFY_REG(Device->BTCR[Bank + 1], \ - BTR_CLEAR_MASK, \ - (uint32_t)(Timing->AddressSetupTime | \ - ((Timing->AddressHoldTime) << POSITION_VAL(FMC_BTRx_ADDHLD)) | \ - ((Timing->DataSetupTime) << POSITION_VAL(FMC_BTRx_DATAST)) | \ - ((Timing->BusTurnAroundDuration) << POSITION_VAL(FMC_BTRx_BUSTURN)) | \ - (((Timing->CLKDivision) - 1) << POSITION_VAL(FMC_BTRx_CLKDIV)) | \ - (((Timing->DataLatency) - 2) << POSITION_VAL(FMC_BTRx_DATLAT)) | \ + MODIFY_REG(Device->BTCR[Bank + 1], + BTR_CLEAR_MASK, + (uint32_t)(Timing->AddressSetupTime | + ((Timing->AddressHoldTime) << POSITION_VAL(FMC_BTRx_ADDHLD)) | + ((Timing->DataSetupTime) << POSITION_VAL(FMC_BTRx_DATAST)) | +#if defined(FMC_BTRx_DATAHLD) + ((Timing->DataHoldTime) << POSITION_VAL(FMC_BTRx_DATAHLD)) | +#endif /* FMC_BTRx_DATAHLD */ + ((Timing->BusTurnAroundDuration) << POSITION_VAL(FMC_BTRx_BUSTURN)) | + (((Timing->CLKDivision) - 1) << POSITION_VAL(FMC_BTRx_CLKDIV)) | + (((Timing->DataLatency) - 2) << POSITION_VAL(FMC_BTRx_DATLAT)) | (Timing->AccessMode))); /* Configure Clock division value (in NORSRAM bank 1) when continuous clock is enabled */ @@ -408,18 +444,24 @@ HAL_StatusTypeDef FMC_NORSRAM_Extended_Timing_Init(FMC_NORSRAM_EXTENDED_TypeDef assert_param(IS_FMC_NORSRAM_EXTENDED_DEVICE(Device)); assert_param(IS_FMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime)); assert_param(IS_FMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime)); +#if defined(FMC_BTRx_DATAHLD) + assert_param(IS_FMC_DATAHOLD_TIME(Timing->DataHoldTime)); +#endif /* FMC_BTRx_DATAHLD */ assert_param(IS_FMC_DATASETUP_TIME(Timing->DataSetupTime)); assert_param(IS_FMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration)); assert_param(IS_FMC_ACCESS_MODE(Timing->AccessMode)); assert_param(IS_FMC_NORSRAM_BANK(Bank)); /* Set NORSRAM device timing register for write configuration, if extended mode is used */ - MODIFY_REG(Device->BWTR[Bank], \ - BWTR_CLEAR_MASK, \ - (uint32_t)(Timing->AddressSetupTime | \ - ((Timing->AddressHoldTime) << POSITION_VAL(FMC_BWTRx_ADDHLD)) | \ - ((Timing->DataSetupTime) << POSITION_VAL(FMC_BWTRx_DATAST)) | \ - Timing->AccessMode | \ + MODIFY_REG(Device->BWTR[Bank], + BWTR_CLEAR_MASK, + (uint32_t)(Timing->AddressSetupTime | + ((Timing->AddressHoldTime) << POSITION_VAL(FMC_BWTRx_ADDHLD)) | + ((Timing->DataSetupTime) << POSITION_VAL(FMC_BWTRx_DATAST)) | +#if defined(FMC_BTRx_DATAHLD) + ((Timing->DataHoldTime) << POSITION_VAL(FMC_BTRx_DATAHLD)) | +#endif /* FMC_BTRx_DATAHLD */ + Timing->AccessMode | ((Timing->BusTurnAroundDuration) << POSITION_VAL(FMC_BWTRx_BUSTURN)))); } else diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.h index c6e66f07c7..e22ecd214d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_fmc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_fmc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of FMC HAL module. ****************************************************************************** * @attention @@ -91,8 +89,12 @@ extern "C" { #if defined(FMC_BCR1_WFDIS) #define IS_FMC_WRITE_FIFO(__FIFO__) (((__FIFO__) == FMC_WRITE_FIFO_DISABLE) || \ ((__FIFO__) == FMC_WRITE_FIFO_ENABLE)) - #endif /* FMC_BCR1_WFDIS */ + +#if defined(FMC_BCRx_NBLSET) +#define IS_FMC_NBLSETUP_TIME(__TIME__) ((__TIME__) <= 3) +#endif /* FMC_BCRx_NBLSET */ + #define IS_FMC_ACCESS_MODE(__MODE__) (((__MODE__) == FMC_ACCESS_MODE_A) || \ ((__MODE__) == FMC_ACCESS_MODE_B) || \ ((__MODE__) == FMC_ACCESS_MODE_C) || \ @@ -247,6 +249,16 @@ extern "C" { * @} */ +#if defined(FMC_BTRx_DATAHLD) +/** @defgroup FMC_Data_Hold_Time + * @{ + */ +#define IS_FMC_DATAHOLD_TIME(__TIME__) ((__TIME__) <= 3) +/** + * @} + */ +#endif /* FMC_BTRx_DATAHLD */ + /** @defgroup FMC_Bus_Turn_around_Duration FMC Bus Turn around Duration * @{ */ @@ -333,6 +345,13 @@ typedef struct This parameter can be a value of @ref FMC_Write_FIFO. @note This Parameter is not available for STM32L47x/L48x devices. */ +#if defined(FMC_BCRx_NBLSET) + uint32_t NBLSetupTime; /*!< Defines the number of HCLK cycles to configure + the duration of the byte lane (NBL) setup time from NBLx low to Chip select NEx low. + This parameter can be a value between Min_Data = 0 and Max_Data = 3. + @note This parameter is used for SRAMs, ROMs and NOR Flash memories. */ +#endif /* FMC_BCRx_NBLSET */ + uint32_t PageSize; /*!< Specifies the memory page size. This parameter can be a value of @ref FMC_Page_Size */ }FMC_NORSRAM_InitTypeDef; @@ -358,6 +377,16 @@ typedef struct @note This parameter is used for SRAMs, ROMs and asynchronous multiplexed NOR Flash memories. */ +#if defined(FMC_BTRx_DATAHLD) + uint32_t DataHoldTime; /*!< Defines the number of HCLK cycles to configure + the duration of the data hold time. + This parameter can be a value between Min_Data = 0 and Max_Data = 3. + @note This parameter value corresponds to x HCLK cycles for read and + x+1 HCLK cycles for write. + @note This parameter is used for SRAMs, ROMs and asynchronous multiplexed + NOR Flash memories. */ +#endif /* FMC_BTRx_DATAHLD */ + uint32_t BusTurnAroundDuration; /*!< Defines the number of HCLK cycles to configure the duration of the bus turnaround. This parameter can be a value between Min_Data = 0 and Max_Data = 15. @@ -725,9 +754,9 @@ typedef struct * @brief FMC Interrupt definition * @{ */ -#define FMC_IT_RISING_EDGE ((uint32_t)FMC_SR_IREN) -#define FMC_IT_LEVEL ((uint32_t)FMC_SR_ILEN) -#define FMC_IT_FALLING_EDGE ((uint32_t)FMC_SR_IFEN) +#define FMC_IT_RISING_EDGE ((uint32_t)FMC_SR_IREN) +#define FMC_IT_LEVEL ((uint32_t)FMC_SR_ILEN) +#define FMC_IT_FALLING_EDGE ((uint32_t)FMC_SR_IFEN) /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.c index ea68657a92..0bd742a8d2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_gpio.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief GPIO LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.h index 0b0a30722c..ae61d32827 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_gpio.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_gpio.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of GPIO LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.c index 123155a1b4..8d8105b0de 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_i2c.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief I2C LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.h index bcb74180e8..564210d489 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_i2c.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_i2c.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of I2C LL module. ****************************************************************************** * @attention @@ -283,14 +281,14 @@ typedef struct /** @defgroup I2C_LL_EC_GENERATE Start And Stop Generation * @{ */ -#define LL_I2C_GENERATE_NOSTARTSTOP 0x00000000U /*!< Don't Generate Stop and Start condition. */ -#define LL_I2C_GENERATE_STOP I2C_CR2_STOP /*!< Generate Stop condition (Size should be set to 0). */ -#define LL_I2C_GENERATE_START_READ (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN) /*!< Generate Start for read request. */ -#define LL_I2C_GENERATE_START_WRITE I2C_CR2_START /*!< Generate Start for write request. */ -#define LL_I2C_GENERATE_RESTART_7BIT_READ (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN) /*!< Generate Restart for read request, slave 7Bit address. */ -#define LL_I2C_GENERATE_RESTART_7BIT_WRITE I2C_CR2_START /*!< Generate Restart for write request, slave 7Bit address. */ -#define LL_I2C_GENERATE_RESTART_10BIT_READ (uint32_t)(I2C_CR2_START | I2C_CR2_RD_WRN | I2C_CR2_HEAD10R) /*!< Generate Restart for read request, slave 10Bit address. */ -#define LL_I2C_GENERATE_RESTART_10BIT_WRITE I2C_CR2_START /*!< Generate Restart for write request, slave 10Bit address.*/ +#define LL_I2C_GENERATE_NOSTARTSTOP 0x00000000U /*!< Don't Generate Stop and Start condition. */ +#define LL_I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP) /*!< Generate Stop condition (Size should be set to 0). */ +#define LL_I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) /*!< Generate Start for read request. */ +#define LL_I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) /*!< Generate Start for write request. */ +#define LL_I2C_GENERATE_RESTART_7BIT_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN) /*!< Generate Restart for read request, slave 7Bit address. */ +#define LL_I2C_GENERATE_RESTART_7BIT_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) /*!< Generate Restart for write request, slave 7Bit address. */ +#define LL_I2C_GENERATE_RESTART_10BIT_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN | I2C_CR2_HEAD10R) /*!< Generate Restart for read request, slave 10Bit address. */ +#define LL_I2C_GENERATE_RESTART_10BIT_WRITE (uint32_t)(0x80000000U | I2C_CR2_START) /*!< Generate Restart for write request, slave 10Bit address.*/ /** * @} */ @@ -1099,7 +1097,7 @@ __STATIC_INLINE uint32_t LL_I2C_IsEnabledSMBusPEC(I2C_TypeDef *I2Cx) * @retval None */ __STATIC_INLINE void LL_I2C_ConfigSMBusTimeout(I2C_TypeDef *I2Cx, uint32_t TimeoutA, uint32_t TimeoutAMode, - uint32_t TimeoutB) + uint32_t TimeoutB) { MODIFY_REG(I2Cx->TIMEOUTR, I2C_TIMEOUTR_TIMEOUTA | I2C_TIMEOUTR_TIDLE | I2C_TIMEOUTR_TIMEOUTB, TimeoutA | TimeoutAMode | (TimeoutB << I2C_TIMEOUTR_TIMEOUTB_Pos)); @@ -2106,9 +2104,9 @@ __STATIC_INLINE uint32_t LL_I2C_GetSlaveAddr(I2C_TypeDef *I2Cx) * @retval None */ __STATIC_INLINE void LL_I2C_HandleTransfer(I2C_TypeDef *I2Cx, uint32_t SlaveAddr, uint32_t SlaveAddrSize, - uint32_t TransferSize, uint32_t EndMode, uint32_t Request) + uint32_t TransferSize, uint32_t EndMode, uint32_t Request) { - MODIFY_REG(I2Cx->CR2, I2C_CR2_SADD | I2C_CR2_ADD10 | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP | I2C_CR2_RELOAD | + MODIFY_REG(I2Cx->CR2, I2C_CR2_SADD | I2C_CR2_ADD10 | (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - I2C_CR2_RD_WRN_Pos))) | I2C_CR2_START | I2C_CR2_STOP | I2C_CR2_RELOAD | I2C_CR2_NBYTES | I2C_CR2_AUTOEND | I2C_CR2_HEAD10R, SlaveAddr | SlaveAddrSize | TransferSize << I2C_CR2_NBYTES_Pos | EndMode | Request); } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_iwdg.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_iwdg.h index d691da4efa..0ab5630db2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_iwdg.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_iwdg.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_iwdg.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of IWDG LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.c index 5eef8c67ee..c776c5c67c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_lptim.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief LPTIM LL module driver. ****************************************************************************** * @attention @@ -63,23 +61,23 @@ /** @addtogroup LPTIM_LL_Private_Macros * @{ */ -#define IS_LPTIM_CLOCK_SOURCE(__VALUE__) (((__VALUE__) == LL_LPTIM_CLK_SOURCE_INTERNAL) \ - || ((__VALUE__) == LL_LPTIM_CLK_SOURCE_EXTERNAL)) +#define IS_LL_LPTIM_CLOCK_SOURCE(__VALUE__) (((__VALUE__) == LL_LPTIM_CLK_SOURCE_INTERNAL) \ + || ((__VALUE__) == LL_LPTIM_CLK_SOURCE_EXTERNAL)) -#define IS_LPTIM_CLOCK_PRESCALER(__VALUE__) (((__VALUE__) == LL_LPTIM_PRESCALER_DIV1) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV2) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV4) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV8) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV16) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV32) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV64) \ - || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV128)) +#define IS_LL_LPTIM_CLOCK_PRESCALER(__VALUE__) (((__VALUE__) == LL_LPTIM_PRESCALER_DIV1) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV2) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV4) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV8) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV16) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV32) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV64) \ + || ((__VALUE__) == LL_LPTIM_PRESCALER_DIV128)) -#define IS_LPTIM_WAVEFORM(__VALUE__) (((__VALUE__) == LL_LPTIM_OUTPUT_WAVEFORM_PWM) \ - || ((__VALUE__) == LL_LPTIM_OUTPUT_WAVEFORM_SETONCE)) +#define IS_LL_LPTIM_WAVEFORM(__VALUE__) (((__VALUE__) == LL_LPTIM_OUTPUT_WAVEFORM_PWM) \ + || ((__VALUE__) == LL_LPTIM_OUTPUT_WAVEFORM_SETONCE)) -#define IS_LPTIM_OUTPUT_POLARITY(__VALUE__) (((__VALUE__) == LL_LPTIM_OUTPUT_POLARITY_REGULAR) \ - || ((__VALUE__) == LL_LPTIM_OUTPUT_POLARITY_INVERSE)) +#define IS_LL_LPTIM_OUTPUT_POLARITY(__VALUE__) (((__VALUE__) == LL_LPTIM_OUTPUT_POLARITY_REGULAR) \ + || ((__VALUE__) == LL_LPTIM_OUTPUT_POLARITY_INVERSE)) /** * @} */ @@ -169,10 +167,10 @@ ErrorStatus LL_LPTIM_Init(LPTIM_TypeDef * LPTIMx, LL_LPTIM_InitTypeDef* LPTIM_In { /* Check the parameters */ assert_param(IS_LPTIM_INSTANCE(LPTIMx)); - assert_param(IS_LPTIM_CLOCK_SOURCE(LPTIM_InitStruct->ClockSource)); - assert_param(IS_LPTIM_CLOCK_PRESCALER(LPTIM_InitStruct->Prescaler)); - assert_param(IS_LPTIM_WAVEFORM(LPTIM_InitStruct->Waveform)); - assert_param(IS_LPTIM_OUTPUT_POLARITY(LPTIM_InitStruct->Polarity)); + assert_param(IS_LL_LPTIM_CLOCK_SOURCE(LPTIM_InitStruct->ClockSource)); + assert_param(IS_LL_LPTIM_CLOCK_PRESCALER(LPTIM_InitStruct->Prescaler)); + assert_param(IS_LL_LPTIM_WAVEFORM(LPTIM_InitStruct->Waveform)); + assert_param(IS_LL_LPTIM_OUTPUT_POLARITY(LPTIM_InitStruct->Polarity)); /* Set CKSEL bitfield according to ClockSource value */ /* Set PRESC bitfield according to Prescaler value */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.h index 3edb39542b..fc04402a39 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lptim.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_lptim.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of LPTIM LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.c index 7b1459a329..dc74d16025 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_lpuart.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief LPUART LL module driver. ****************************************************************************** * @attention @@ -75,6 +73,21 @@ /* Check of parameters for configuration of LPUART registers */ +#if defined(USART_PRESC_PRESCALER) +#define IS_LL_LPUART_PRESCALER(__VALUE__) (((__VALUE__) == LL_LPUART_PRESCALER_DIV1) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV2) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV4) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV6) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV8) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV10) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV12) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV16) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV32) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV64) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV128) \ + || ((__VALUE__) == LL_LPUART_PRESCALER_DIV256)) + +#endif /* __BAUDRATE__ Depending on constraints applicable for LPUART BRR register */ /* value : */ /* - fck must be in the range [3 x baudrate, 4096 x baudrate] */ @@ -172,6 +185,9 @@ ErrorStatus LL_LPUART_Init(USART_TypeDef *LPUARTx, LL_LPUART_InitTypeDef *LPUART /* Check the parameters */ assert_param(IS_LPUART_INSTANCE(LPUARTx)); +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_LL_LPUART_PRESCALER(LPUART_InitStruct->PrescalerValue)); +#endif assert_param(IS_LL_LPUART_BAUDRATE(LPUART_InitStruct->BaudRate)); assert_param(IS_LL_LPUART_DATAWIDTH(LPUART_InitStruct->DataWidth)); assert_param(IS_LL_LPUART_STOPBITS(LPUART_InitStruct->StopBits)); @@ -211,6 +227,9 @@ ErrorStatus LL_LPUART_Init(USART_TypeDef *LPUARTx, LL_LPUART_InitTypeDef *LPUART periphclk = LL_RCC_GetLPUARTClockFreq(LL_RCC_LPUART1_CLKSOURCE); /* Configure the LPUART Baud Rate : +#if defined(USART_PRESC_PRESCALER) + - prescaler value is required +#endif - valid baud rate value (different from 0) is required - Peripheral clock as returned by RCC service, should be valid (different from 0). */ @@ -220,11 +239,22 @@ ErrorStatus LL_LPUART_Init(USART_TypeDef *LPUARTx, LL_LPUART_InitTypeDef *LPUART status = SUCCESS; LL_LPUART_SetBaudRate(LPUARTx, periphclk, +#if defined(USART_PRESC_PRESCALER) + LPUART_InitStruct->PrescalerValue, +#endif LPUART_InitStruct->BaudRate); /* Check BRR is greater than or equal to 0x300 */ assert_param(IS_LL_LPUART_BRR(LPUARTx->BRR)); } +#if defined(USART_PRESC_PRESCALER) + + /*---------------------------- LPUART PRESC Configuration ----------------------- + * Configure LPUARTx PRESC (Prescaler) with parameters: + * - PrescalerValue: LPUART_PRESC_PRESCALER bits according to LPUART_InitStruct->PrescalerValue value. + */ + LL_LPUART_SetPrescaler(LPUARTx, LPUART_InitStruct->PrescalerValue); +#endif } return (status); @@ -240,6 +270,9 @@ ErrorStatus LL_LPUART_Init(USART_TypeDef *LPUARTx, LL_LPUART_InitTypeDef *LPUART void LL_LPUART_StructInit(LL_LPUART_InitTypeDef *LPUART_InitStruct) { /* Set LPUART_InitStruct fields to default values */ +#if defined(USART_PRESC_PRESCALER) + LPUART_InitStruct->PrescalerValue = LL_LPUART_PRESCALER_DIV1; +#endif LPUART_InitStruct->BaudRate = 9600U; LPUART_InitStruct->DataWidth = LL_LPUART_DATAWIDTH_8B; LPUART_InitStruct->StopBits = LL_LPUART_STOPBITS_1; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.h index 076c3bd388..d91b729458 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_lpuart.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_lpuart.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of LPUART LL module. ****************************************************************************** * @attention @@ -58,6 +56,30 @@ extern "C" { /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup LPUART_LL_Private_Variables LPUART Private Variables + * @{ + */ +/* Array used to get the LPUART prescaler division decimal values versus @ref LPUART_LL_EC_PRESCALER values */ +static const uint16_t LPUART_PRESCALER_TAB[] = +{ + (uint16_t)1, + (uint16_t)2, + (uint16_t)4, + (uint16_t)6, + (uint16_t)8, + (uint16_t)10, + (uint16_t)12, + (uint16_t)16, + (uint16_t)32, + (uint16_t)64, + (uint16_t)128, + (uint16_t)256 +}; +/** + * @} + */ +#endif /* Private constants ---------------------------------------------------------*/ /** @defgroup LPUART_LL_Private_Constants LPUART Private Constants @@ -93,6 +115,13 @@ extern "C" { */ typedef struct { +#if defined(USART_PRESC_PRESCALER) + uint32_t PrescalerValue; /*!< Specifies the Prescaler to compute the communication baud rate. + This parameter can be a value of @ref LPUART_LL_EC_PRESCALER. + + This feature can be modified afterwards using unitary function @ref LL_LPUART_SetPrescaler().*/ + +#endif uint32_t BaudRate; /*!< This field defines expected LPUART communication baud rate. This feature can be modified afterwards using unitary function @ref LL_LPUART_SetBaudRate().*/ @@ -143,6 +172,9 @@ typedef struct #define LL_LPUART_ICR_NCF USART_ICR_NCF /*!< Noise detected flag */ #define LL_LPUART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */ #define LL_LPUART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_ICR_TXFECF USART_ICR_TXFECF /*!< TX FIFO Empty Clear flag */ +#endif #define LL_LPUART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */ #define LL_LPUART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */ #define LL_LPUART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */ @@ -160,9 +192,17 @@ typedef struct #define LL_LPUART_ISR_NE USART_ISR_NE /*!< Noise detected flag */ #define LL_LPUART_ISR_ORE USART_ISR_ORE /*!< Overrun error flag */ #define LL_LPUART_ISR_IDLE USART_ISR_IDLE /*!< Idle line detected flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_ISR_RXNE_RXFNE USART_ISR_RXNE_RXFNE /*!< Read data register or RX FIFO not empty flag */ +#else #define LL_LPUART_ISR_RXNE USART_ISR_RXNE /*!< Read data register not empty flag */ +#endif #define LL_LPUART_ISR_TC USART_ISR_TC /*!< Transmission complete flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_ISR_TXE_TXFNF USART_ISR_TXE_TXFNF /*!< Transmit data register empty or TX FIFO Not Full flag*/ +#else #define LL_LPUART_ISR_TXE USART_ISR_TXE /*!< Transmit data register empty flag */ +#endif #define LL_LPUART_ISR_CTSIF USART_ISR_CTSIF /*!< CTS interrupt flag */ #define LL_LPUART_ISR_CTS USART_ISR_CTS /*!< CTS flag */ #define LL_LPUART_ISR_BUSY USART_ISR_BUSY /*!< Busy flag */ @@ -172,6 +212,12 @@ typedef struct #define LL_LPUART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */ #define LL_LPUART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */ #define LL_LPUART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_ISR_TXFE USART_ISR_TXFE /*!< TX FIFO empty flag */ +#define LL_LPUART_ISR_RXFF USART_ISR_RXFF /*!< RX FIFO full flag */ +#define LL_LPUART_ISR_RXFT USART_ISR_RXFT /*!< RX FIFO threshold flag */ +#define LL_LPUART_ISR_TXFT USART_ISR_TXFT /*!< TX FIFO threshold flag */ +#endif /** * @} */ @@ -181,17 +227,48 @@ typedef struct * @{ */ #define LL_LPUART_CR1_IDLEIE USART_CR1_IDLEIE /*!< IDLE interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_CR1_RXNEIE_RXFNEIE USART_CR1_RXNEIE_RXFNEIE /*!< Read data register and RXFIFO not empty interrupt enable */ +#else #define LL_LPUART_CR1_RXNEIE USART_CR1_RXNEIE /*!< Read data register not empty interrupt enable */ +#endif #define LL_LPUART_CR1_TCIE USART_CR1_TCIE /*!< Transmission complete interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_CR1_TXEIE_TXFNFIE USART_CR1_TXEIE_TXFNFIE /*!< Transmit data register empty and TX FIFO not full interrupt enable */ +#else #define LL_LPUART_CR1_TXEIE USART_CR1_TXEIE /*!< Transmit data register empty interrupt enable */ +#endif #define LL_LPUART_CR1_PEIE USART_CR1_PEIE /*!< Parity error */ #define LL_LPUART_CR1_CMIE USART_CR1_CMIE /*!< Character match interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_CR1_TXFEIE USART_CR1_TXFEIE /*!< TX FIFO empty interrupt enable */ +#define LL_LPUART_CR1_RXFFIE USART_CR1_RXFFIE /*!< RX FIFO full interrupt enable */ +#endif #define LL_LPUART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ #define LL_LPUART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ #define LL_LPUART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_LPUART_CR3_TXFTIE USART_CR3_TXFTIE /*!< TX FIFO threshold interrupt enable */ +#define LL_LPUART_CR3_RXFTIE USART_CR3_RXFTIE /*!< RX FIFO threshold interrupt enable */ +#endif /** * @} */ +#if defined(USART_CR1_FIFOEN) + +/** @defgroup LPUART_LL_EC_FIFOTHRESHOLD FIFO Threshold + * @{ + */ +#define LL_LPUART_FIFOTHRESHOLD_1_8 0x00000000U /*!< FIFO reaches 1/8 of its depth */ +#define LL_LPUART_FIFOTHRESHOLD_1_4 0x00000001U /*!< FIFO reaches 1/4 of its depth */ +#define LL_LPUART_FIFOTHRESHOLD_1_2 0x00000002U /*!< FIFO reaches 1/2 of its depth */ +#define LL_LPUART_FIFOTHRESHOLD_3_4 0x00000003U /*!< FIFO reaches 3/4 of its depth */ +#define LL_LPUART_FIFOTHRESHOLD_7_8 0x00000004U /*!< FIFO reaches 7/8 of its depth */ +#define LL_LPUART_FIFOTHRESHOLD_8_8 0x00000005U /*!< FIFO becomes empty for TX and full for RX */ +/** + * @} + */ +#endif /** @defgroup LPUART_LL_EC_DIRECTION Direction * @{ @@ -232,6 +309,27 @@ typedef struct /** * @} */ +#if defined(USART_PRESC_PRESCALER) + +/** @defgroup LPUART_LL_EC_PRESCALER Clock Source Prescaler + * @{ + */ +#define LL_LPUART_PRESCALER_DIV1 0x00000000U /*!< Input clock not devided */ +#define LL_LPUART_PRESCALER_DIV2 (USART_PRESC_PRESCALER_0) /*!< Input clock devided by 2 */ +#define LL_LPUART_PRESCALER_DIV4 (USART_PRESC_PRESCALER_1) /*!< Input clock devided by 4 */ +#define LL_LPUART_PRESCALER_DIV6 (USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 6 */ +#define LL_LPUART_PRESCALER_DIV8 (USART_PRESC_PRESCALER_2) /*!< Input clock devided by 8 */ +#define LL_LPUART_PRESCALER_DIV10 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 10 */ +#define LL_LPUART_PRESCALER_DIV12 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1) /*!< Input clock devided by 12 */ +#define LL_LPUART_PRESCALER_DIV16 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 16 */ +#define LL_LPUART_PRESCALER_DIV32 (USART_PRESC_PRESCALER_3) /*!< Input clock devided by 32 */ +#define LL_LPUART_PRESCALER_DIV64 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 64 */ +#define LL_LPUART_PRESCALER_DIV128 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1) /*!< Input clock devided by 128 */ +#define LL_LPUART_PRESCALER_DIV256 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 256 */ +/** + * @} + */ +#endif /** @defgroup LPUART_LL_EC_STOPBITS Stop Bits * @{ @@ -376,10 +474,30 @@ typedef struct * @brief Compute LPUARTDIV value according to Peripheral Clock and * expected Baud Rate (20-bit value of LPUARTDIV is returned) * @param __PERIPHCLK__ Peripheral Clock frequency used for LPUART Instance + @if USART_PRESC_PRESCALER + * @param __PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_LPUART_PRESCALER_DIV1 + * @arg @ref LL_LPUART_PRESCALER_DIV2 + * @arg @ref LL_LPUART_PRESCALER_DIV4 + * @arg @ref LL_LPUART_PRESCALER_DIV6 + * @arg @ref LL_LPUART_PRESCALER_DIV8 + * @arg @ref LL_LPUART_PRESCALER_DIV10 + * @arg @ref LL_LPUART_PRESCALER_DIV12 + * @arg @ref LL_LPUART_PRESCALER_DIV16 + * @arg @ref LL_LPUART_PRESCALER_DIV32 + * @arg @ref LL_LPUART_PRESCALER_DIV64 + * @arg @ref LL_LPUART_PRESCALER_DIV128 + * @arg @ref LL_LPUART_PRESCALER_DIV256 + * @param __PRESCALER__ Prescaler value + @endif * @param __BAUDRATE__ Baud Rate value to achieve * @retval LPUARTDIV value to be used for BRR register filling */ +#if defined(USART_PRESC_PRESCALER) +#define __LL_LPUART_DIV(__PERIPHCLK__, __PRESCALER__, __BAUDRATE__) ((((((uint64_t)(__PERIPHCLK__)/(uint64_t)(LPUART_PRESCALER_TAB[(__PRESCALER__)]))*LPUART_LPUARTDIV_FREQ_MUL) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) & LPUART_BRR_MASK) +#else #define __LL_LPUART_DIV(__PERIPHCLK__, __BAUDRATE__) (((((uint64_t)(__PERIPHCLK__)*LPUART_LPUARTDIV_FREQ_MUL) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) & LPUART_BRR_MASK) +#endif /** * @} @@ -439,6 +557,137 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabled(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); } +#if defined(USART_CR1_FIFOEN) +/** + * @brief FIFO Mode Enable + * @rmtoll CR1 FIFOEN LL_LPUART_EnableFIFO + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableFIFO(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR1, USART_CR1_FIFOEN); +} + +/** + * @brief FIFO Mode Disable + * @rmtoll CR1 FIFOEN LL_LPUART_DisableFIFO + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableFIFO(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR1, USART_CR1_FIFOEN); +} + +/** + * @brief Indicate if FIFO Mode is enabled + * @rmtoll CR1 FIFOEN LL_LPUART_IsEnabledFIFO + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledFIFO(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR1, USART_CR1_FIFOEN) == (USART_CR1_FIFOEN)); +} + +/** + * @brief Configure TX FIFO Threshold + * @rmtoll CR3 TXFTCFG LL_LPUART_SetTXFIFOThreshold + * @param LPUARTx LPUART Instance + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_LPUART_SetTXFIFOThreshold(USART_TypeDef *LPUARTx, uint32_t Threshold) +{ + MODIFY_REG(LPUARTx->CR3, USART_CR3_TXFTCFG, Threshold << USART_CR3_TXFTCFG_Pos); +} + +/** + * @brief Return TX FIFO Threshold Configuration + * @rmtoll CR3 TXFTCFG LL_LPUART_GetTXFIFOThreshold + * @param LPUARTx LPUART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + */ +__STATIC_INLINE uint32_t LL_LPUART_GetTXFIFOThreshold(USART_TypeDef *LPUARTx) +{ + return (uint32_t)(READ_BIT(LPUARTx->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos); +} + +/** + * @brief Configure RX FIFO Threshold + * @rmtoll CR3 RXFTCFG LL_LPUART_SetRXFIFOThreshold + * @param LPUARTx LPUART Instance + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_LPUART_SetRXFIFOThreshold(USART_TypeDef *LPUARTx, uint32_t Threshold) +{ + MODIFY_REG(LPUARTx->CR3, USART_CR3_RXFTCFG, Threshold << USART_CR3_RXFTCFG_Pos); +} + +/** + * @brief Return RX FIFO Threshold Configuration + * @rmtoll CR3 RXFTCFG LL_LPUART_GetRXFIFOThreshold + * @param LPUARTx LPUART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + */ +__STATIC_INLINE uint32_t LL_LPUART_GetRXFIFOThreshold(USART_TypeDef *LPUARTx) +{ + return (uint32_t)(READ_BIT(LPUARTx->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos); +} + +/** + * @brief Configure TX and RX FIFOs Threshold + * @rmtoll CR3 TXFTCFG LL_LPUART_ConfigFIFOsThreshold\n + * CR3 RXFTCFG LL_LPUART_ConfigFIFOsThreshold + * @param LPUARTx LPUART Instance + * @param TXThreshold This parameter can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + * @param RXThreshold This parameter can be one of the following values: + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_LPUART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_LPUART_ConfigFIFOsThreshold(USART_TypeDef *LPUARTx, uint32_t TXThreshold, uint32_t RXThreshold) +{ + MODIFY_REG(LPUARTx->CR3, USART_CR3_TXFTCFG | USART_CR3_RXFTCFG, TXThreshold << USART_CR3_TXFTCFG_Pos | RXThreshold << USART_CR3_RXFTCFG_Pos); +} +#endif + /** * @brief LPUART enabled in STOP Mode * @note When this function is enabled, LPUART is able to wake up the MCU from Stop mode, provided that @@ -677,6 +926,55 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledMuteMode(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->CR1, USART_CR1_MME) == (USART_CR1_MME)); } +#if defined(USART_PRESC_PRESCALER) +/** + * @brief Configure Clock source prescaler for baudrate generator and oversampling + * @rmtoll PRESC PRESCALER LL_LPUART_SetPrescaler + * @param LPUARTx LPUART Instance + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_LPUART_PRESCALER_DIV1 + * @arg @ref LL_LPUART_PRESCALER_DIV2 + * @arg @ref LL_LPUART_PRESCALER_DIV4 + * @arg @ref LL_LPUART_PRESCALER_DIV6 + * @arg @ref LL_LPUART_PRESCALER_DIV8 + * @arg @ref LL_LPUART_PRESCALER_DIV10 + * @arg @ref LL_LPUART_PRESCALER_DIV12 + * @arg @ref LL_LPUART_PRESCALER_DIV16 + * @arg @ref LL_LPUART_PRESCALER_DIV32 + * @arg @ref LL_LPUART_PRESCALER_DIV64 + * @arg @ref LL_LPUART_PRESCALER_DIV128 + * @arg @ref LL_LPUART_PRESCALER_DIV256 + * @retval None + */ +__STATIC_INLINE void LL_LPUART_SetPrescaler(USART_TypeDef *LPUARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(LPUARTx->PRESC, USART_PRESC_PRESCALER, PrescalerValue); +} + +/** + * @brief Retrieve the Clock source prescaler for baudrate generator and oversampling + * @rmtoll PRESC PRESCALER LL_LPUART_GetPrescaler + * @param LPUARTx LPUART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_LPUART_PRESCALER_DIV1 + * @arg @ref LL_LPUART_PRESCALER_DIV2 + * @arg @ref LL_LPUART_PRESCALER_DIV4 + * @arg @ref LL_LPUART_PRESCALER_DIV6 + * @arg @ref LL_LPUART_PRESCALER_DIV8 + * @arg @ref LL_LPUART_PRESCALER_DIV10 + * @arg @ref LL_LPUART_PRESCALER_DIV12 + * @arg @ref LL_LPUART_PRESCALER_DIV16 + * @arg @ref LL_LPUART_PRESCALER_DIV32 + * @arg @ref LL_LPUART_PRESCALER_DIV64 + * @arg @ref LL_LPUART_PRESCALER_DIV128 + * @arg @ref LL_LPUART_PRESCALER_DIV256 + */ +__STATIC_INLINE uint32_t LL_LPUART_GetPrescaler(USART_TypeDef *LPUARTx) +{ + return (uint32_t)(READ_BIT(LPUARTx->PRESC, USART_PRESC_PRESCALER)); +} +#endif + /** * @brief Set the length of the stop bits * @rmtoll CR2 STOP LL_LPUART_SetStopBitsLength @@ -1086,12 +1384,35 @@ __STATIC_INLINE uint32_t LL_LPUART_GetWKUPType(USART_TypeDef *LPUARTx) * @rmtoll BRR BRR LL_LPUART_SetBaudRate * @param LPUARTx LPUART Instance * @param PeriphClk Peripheral Clock + @if USART_PRESC_PRESCALER + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_LPUART_PRESCALER_DIV1 + * @arg @ref LL_LPUART_PRESCALER_DIV2 + * @arg @ref LL_LPUART_PRESCALER_DIV4 + * @arg @ref LL_LPUART_PRESCALER_DIV6 + * @arg @ref LL_LPUART_PRESCALER_DIV8 + * @arg @ref LL_LPUART_PRESCALER_DIV10 + * @arg @ref LL_LPUART_PRESCALER_DIV12 + * @arg @ref LL_LPUART_PRESCALER_DIV16 + * @arg @ref LL_LPUART_PRESCALER_DIV32 + * @arg @ref LL_LPUART_PRESCALER_DIV64 + * @arg @ref LL_LPUART_PRESCALER_DIV128 + * @arg @ref LL_LPUART_PRESCALER_DIV256 + @endif * @param BaudRate Baud Rate * @retval None */ +#if defined(USART_PRESC_PRESCALER) +__STATIC_INLINE void LL_LPUART_SetBaudRate(USART_TypeDef *LPUARTx, uint32_t PeriphClk, uint32_t PrescalerValue, uint32_t BaudRate) +#else __STATIC_INLINE void LL_LPUART_SetBaudRate(USART_TypeDef *LPUARTx, uint32_t PeriphClk, uint32_t BaudRate) +#endif { +#if defined(USART_PRESC_PRESCALER) + LPUARTx->BRR = __LL_LPUART_DIV(PeriphClk, PrescalerValue, BaudRate); +#else LPUARTx->BRR = __LL_LPUART_DIV(PeriphClk, BaudRate); +#endif } /** @@ -1101,18 +1422,44 @@ __STATIC_INLINE void LL_LPUART_SetBaudRate(USART_TypeDef *LPUARTx, uint32_t Peri * @rmtoll BRR BRR LL_LPUART_GetBaudRate * @param LPUARTx LPUART Instance * @param PeriphClk Peripheral Clock + @if USART_PRESC_PRESCALER + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_LPUART_PRESCALER_DIV1 + * @arg @ref LL_LPUART_PRESCALER_DIV2 + * @arg @ref LL_LPUART_PRESCALER_DIV4 + * @arg @ref LL_LPUART_PRESCALER_DIV6 + * @arg @ref LL_LPUART_PRESCALER_DIV8 + * @arg @ref LL_LPUART_PRESCALER_DIV10 + * @arg @ref LL_LPUART_PRESCALER_DIV12 + * @arg @ref LL_LPUART_PRESCALER_DIV16 + * @arg @ref LL_LPUART_PRESCALER_DIV32 + * @arg @ref LL_LPUART_PRESCALER_DIV64 + * @arg @ref LL_LPUART_PRESCALER_DIV128 + * @arg @ref LL_LPUART_PRESCALER_DIV256 + @endif * @retval Baud Rate */ +#if defined(USART_PRESC_PRESCALER) +__STATIC_INLINE uint32_t LL_LPUART_GetBaudRate(USART_TypeDef *LPUARTx, uint32_t PeriphClk, uint32_t PrescalerValue) +#else __STATIC_INLINE uint32_t LL_LPUART_GetBaudRate(USART_TypeDef *LPUARTx, uint32_t PeriphClk) +#endif { register uint32_t lpuartdiv = 0x0U; register uint32_t brrresult = 0x0U; +#if defined(USART_PRESC_PRESCALER) + register uint32_t periphclkpresc = (uint32_t)(PeriphClk / (LPUART_PRESCALER_TAB[PrescalerValue])); +#endif lpuartdiv = LPUARTx->BRR & LPUART_BRR_MASK; if (lpuartdiv >= LPUART_BRR_MIN_VALUE) { +#if defined(USART_PRESC_PRESCALER) + brrresult = (uint32_t)(((uint64_t)(periphclkpresc) * LPUART_LPUARTDIV_FREQ_MUL) / lpuartdiv); +#else brrresult = (uint32_t)(((uint64_t)(PeriphClk) * LPUART_LPUARTDIV_FREQ_MUL) / lpuartdiv); +#endif } return (brrresult); @@ -1336,6 +1683,23 @@ __STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_IDLE(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->ISR, USART_ISR_IDLE) == (USART_ISR_IDLE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_IsActiveFlag_RXNE LL_LPUART_IsActiveFlag_RXNE_RXFNE + +/** + * @brief Check if the LPUART Read Data Register or LPUART RX FIFO Not Empty Flag is set or not + * @rmtoll ISR RXNE_RXFNE LL_LPUART_IsActiveFlag_RXNE_RXFNE + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_RXNE_RXFNE(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_RXNE_RXFNE) == (USART_ISR_RXNE_RXFNE)); +} +#else + /** * @brief Check if the LPUART Read Data Register Not Empty Flag is set or not * @rmtoll ISR RXNE LL_LPUART_IsActiveFlag_RXNE @@ -1346,6 +1710,7 @@ __STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_RXNE(USART_TypeDef *LPUARTx) { return (READ_BIT(LPUARTx->ISR, USART_ISR_RXNE) == (USART_ISR_RXNE)); } +#endif /** * @brief Check if the LPUART Transmission Complete Flag is set or not @@ -1358,6 +1723,23 @@ __STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_TC(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->ISR, USART_ISR_TC) == (USART_ISR_TC)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_IsActiveFlag_TXE LL_LPUART_IsActiveFlag_TXE_TXFNF + +/** + * @brief Check if the LPUART Transmit Data Register Empty or LPUART TX FIFO Not Full Flag is set or not + * @rmtoll ISR TXE_TXFNF LL_LPUART_IsActiveFlag_TXE_TXFNF + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_TXE_TXFNF(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_TXE_TXFNF) == (USART_ISR_TXE_TXFNF)); +} +#else + /** * @brief Check if the LPUART Transmit Data Register Empty Flag is set or not * @rmtoll ISR TXE LL_LPUART_IsActiveFlag_TXE @@ -1368,6 +1750,7 @@ __STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_TXE(USART_TypeDef *LPUARTx) { return (READ_BIT(LPUARTx->ISR, USART_ISR_TXE) == (USART_ISR_TXE)); } +#endif /** * @brief Check if the LPUART CTS interrupt Flag is set or not @@ -1468,6 +1851,53 @@ __STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_REACK(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if the LPUART TX FIFO Empty Flag is set or not + * @rmtoll ISR TXFE LL_LPUART_IsActiveFlag_TXFE + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_TXFE(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_TXFE) == (USART_ISR_TXFE)); +} + +/** + * @brief Check if the LPUART RX FIFO Full Flag is set or not + * @rmtoll ISR RXFF LL_LPUART_IsActiveFlag_RXFF + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_RXFF(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_RXFF) == (USART_ISR_RXFF)); +} + +/** + * @brief Check if the LPUART TX FIFO Threshold Flag is set or not + * @rmtoll ISR TXFT LL_LPUART_IsActiveFlag_TXFT + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_TXFT(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_TXFT) == (USART_ISR_TXFT)); +} + +/** + * @brief Check if the LPUART RX FIFO Threshold Flag is set or not + * @rmtoll ISR RXFT LL_LPUART_IsActiveFlag_RXFT + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsActiveFlag_RXFT(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->ISR, USART_ISR_RXFT) == (USART_ISR_RXFT)); +} +#endif + /** * @brief Clear Parity Error Flag * @rmtoll ICR PECF LL_LPUART_ClearFlag_PE @@ -1523,6 +1953,20 @@ __STATIC_INLINE void LL_LPUART_ClearFlag_IDLE(USART_TypeDef *LPUARTx) WRITE_REG(LPUARTx->ICR, USART_ICR_IDLECF); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Clear TX FIFO Empty Flag + * @rmtoll ICR TXFECF LL_LPUART_ClearFlag_TXFE + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_ClearFlag_TXFE(USART_TypeDef *LPUARTx) +{ + WRITE_REG(LPUARTx->ICR, USART_ICR_TXFECF); +} +#endif + /** * @brief Clear Transmission Complete Flag * @rmtoll ICR TCCF LL_LPUART_ClearFlag_TC @@ -1586,6 +2030,23 @@ __STATIC_INLINE void LL_LPUART_EnableIT_IDLE(USART_TypeDef *LPUARTx) SET_BIT(LPUARTx->CR1, USART_CR1_IDLEIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_EnableIT_RXNE LL_LPUART_EnableIT_RXNE_RXFNE + +/** + * @brief Enable RX Not Empty and RX FIFO Not Empty Interrupt + * @rmtoll CR1 RXNEIE_RXFNEIE LL_LPUART_EnableIT_RXNE_RXFNE + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_RXNE_RXFNE(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR1, USART_CR1_RXNEIE_RXFNEIE); +} +#else + /** * @brief Enable RX Not Empty Interrupt * @rmtoll CR1 RXNEIE LL_LPUART_EnableIT_RXNE @@ -1596,6 +2057,7 @@ __STATIC_INLINE void LL_LPUART_EnableIT_RXNE(USART_TypeDef *LPUARTx) { SET_BIT(LPUARTx->CR1, USART_CR1_RXNEIE); } +#endif /** * @brief Enable Transmission Complete Interrupt @@ -1608,6 +2070,23 @@ __STATIC_INLINE void LL_LPUART_EnableIT_TC(USART_TypeDef *LPUARTx) SET_BIT(LPUARTx->CR1, USART_CR1_TCIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_EnableIT_TXE LL_LPUART_EnableIT_TXE_TXFNF + +/** + * @brief Enable TX Empty and TX FIFO Not Full Interrupt + * @rmtoll CR1 TXEIE_TXFNFIE LL_LPUART_EnableIT_TXE_TXFNF + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_TXE_TXFNF(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR1, USART_CR1_TXEIE_TXFNFIE); +} +#else + /** * @brief Enable TX Empty Interrupt * @rmtoll CR1 TXEIE LL_LPUART_EnableIT_TXE @@ -1618,6 +2097,7 @@ __STATIC_INLINE void LL_LPUART_EnableIT_TXE(USART_TypeDef *LPUARTx) { SET_BIT(LPUARTx->CR1, USART_CR1_TXEIE); } +#endif /** * @brief Enable Parity Error Interrupt @@ -1641,6 +2121,31 @@ __STATIC_INLINE void LL_LPUART_EnableIT_CM(USART_TypeDef *LPUARTx) SET_BIT(LPUARTx->CR1, USART_CR1_CMIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Enable TX FIFO Empty Interrupt + * @rmtoll CR1 TXFEIE LL_LPUART_EnableIT_TXFE + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_TXFE(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR1, USART_CR1_TXFEIE); +} + +/** + * @brief Enable RX FIFO Full Interrupt + * @rmtoll CR1 RXFFIE LL_LPUART_EnableIT_RXFF + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_RXFF(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR1, USART_CR1_RXFFIE); +} +#endif + /** * @brief Enable Error Interrupt * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing @@ -1678,6 +2183,31 @@ __STATIC_INLINE void LL_LPUART_EnableIT_WKUP(USART_TypeDef *LPUARTx) SET_BIT(LPUARTx->CR3, USART_CR3_WUFIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Enable TX FIFO Threshold Interrupt + * @rmtoll CR3 TXFTIE LL_LPUART_EnableIT_TXFT + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_TXFT(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR3, USART_CR3_TXFTIE); +} + +/** + * @brief Enable RX FIFO Threshold Interrupt + * @rmtoll CR3 RXFTIE LL_LPUART_EnableIT_RXFT + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_EnableIT_RXFT(USART_TypeDef *LPUARTx) +{ + SET_BIT(LPUARTx->CR3, USART_CR3_RXFTIE); +} +#endif + /** * @brief Disable IDLE Interrupt * @rmtoll CR1 IDLEIE LL_LPUART_DisableIT_IDLE @@ -1689,6 +2219,23 @@ __STATIC_INLINE void LL_LPUART_DisableIT_IDLE(USART_TypeDef *LPUARTx) CLEAR_BIT(LPUARTx->CR1, USART_CR1_IDLEIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_DisableIT_RXNE LL_LPUART_DisableIT_RXNE_RXFNE + +/** + * @brief Disable RX Not Empty and RX FIFO Not Empty Interrupt + * @rmtoll CR1 RXNEIE_RXFNEIE LL_LPUART_DisableIT_RXNE_RXFNE + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_RXNE_RXFNE(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR1, USART_CR1_RXNEIE_RXFNEIE); +} +#else + /** * @brief Disable RX Not Empty Interrupt * @rmtoll CR1 RXNEIE LL_LPUART_DisableIT_RXNE @@ -1699,6 +2246,7 @@ __STATIC_INLINE void LL_LPUART_DisableIT_RXNE(USART_TypeDef *LPUARTx) { CLEAR_BIT(LPUARTx->CR1, USART_CR1_RXNEIE); } +#endif /** * @brief Disable Transmission Complete Interrupt @@ -1711,6 +2259,23 @@ __STATIC_INLINE void LL_LPUART_DisableIT_TC(USART_TypeDef *LPUARTx) CLEAR_BIT(LPUARTx->CR1, USART_CR1_TCIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_DisableIT_TXE LL_LPUART_DisableIT_TXE_TXFNF + +/** + * @brief Disable TX Empty and TX FIFO Not Full Interrupt + * @rmtoll CR1 TXEIE_TXFNFIE LL_LPUART_DisableIT_TXE_TXFNF + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_TXE_TXFNF(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR1, USART_CR1_TXEIE_TXFNFIE); +} +#else + /** * @brief Disable TX Empty Interrupt * @rmtoll CR1 TXEIE LL_LPUART_DisableIT_TXE @@ -1721,6 +2286,7 @@ __STATIC_INLINE void LL_LPUART_DisableIT_TXE(USART_TypeDef *LPUARTx) { CLEAR_BIT(LPUARTx->CR1, USART_CR1_TXEIE); } +#endif /** * @brief Disable Parity Error Interrupt @@ -1744,6 +2310,31 @@ __STATIC_INLINE void LL_LPUART_DisableIT_CM(USART_TypeDef *LPUARTx) CLEAR_BIT(LPUARTx->CR1, USART_CR1_CMIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Disable TX FIFO Empty Interrupt + * @rmtoll CR1 TXFEIE LL_LPUART_DisableIT_TXFE + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_TXFE(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR1, USART_CR1_TXFEIE); +} + +/** + * @brief Disable RX FIFO Full Interrupt + * @rmtoll CR1 RXFFIE LL_LPUART_DisableIT_RXFF + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_RXFF(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR1, USART_CR1_RXFFIE); +} +#endif + /** * @brief Disable Error Interrupt * @note When set, Error Interrupt Enable Bit is enabling interrupt generation in case of a framing @@ -1781,6 +2372,31 @@ __STATIC_INLINE void LL_LPUART_DisableIT_WKUP(USART_TypeDef *LPUARTx) CLEAR_BIT(LPUARTx->CR3, USART_CR3_WUFIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Disable TX FIFO Threshold Interrupt + * @rmtoll CR3 TXFTIE LL_LPUART_DisableIT_TXFT + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_TXFT(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR3, USART_CR3_TXFTIE); +} + +/** + * @brief Disable RX FIFO Threshold Interrupt + * @rmtoll CR3 RXFTIE LL_LPUART_DisableIT_RXFT + * @param LPUARTx LPUART Instance + * @retval None + */ +__STATIC_INLINE void LL_LPUART_DisableIT_RXFT(USART_TypeDef *LPUARTx) +{ + CLEAR_BIT(LPUARTx->CR3, USART_CR3_RXFTIE); +} +#endif + /** * @brief Check if the LPUART IDLE Interrupt source is enabled or disabled. * @rmtoll CR1 IDLEIE LL_LPUART_IsEnabledIT_IDLE @@ -1792,6 +2408,23 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_IDLE(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_IsEnabledIT_RXNE LL_LPUART_IsEnabledIT_RXNE_RXFNE + +/** + * @brief Check if the LPUART RX Not Empty and LPUART RX FIFO Not Empty Interrupt is enabled or disabled. + * @rmtoll CR1 RXNEIE_RXFNEIE LL_LPUART_IsEnabledIT_RXNE_RXFNE + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_RXNE_RXFNE(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR1, USART_CR1_RXNEIE_RXFNEIE) == (USART_CR1_RXNEIE_RXFNEIE)); +} +#else + /** * @brief Check if the LPUART RX Not Empty Interrupt is enabled or disabled. * @rmtoll CR1 RXNEIE LL_LPUART_IsEnabledIT_RXNE @@ -1802,6 +2435,7 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_RXNE(USART_TypeDef *LPUARTx) { return (READ_BIT(LPUARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)); } +#endif /** * @brief Check if the LPUART Transmission Complete Interrupt is enabled or disabled. @@ -1814,6 +2448,23 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_TC(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_LPUART_IsEnabledIT_TXE LL_LPUART_IsEnabledIT_TXE_TXFNF + +/** + * @brief Check if the LPUART TX Empty and LPUART TX FIFO Not Full Interrupt is enabled or disabled + * @rmtoll CR1 TXEIE_TXFNFIE LL_LPUART_IsEnabledIT_TXE_TXFNF + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_TXE_TXFNF(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR1, USART_CR1_TXEIE_TXFNFIE) == (USART_CR1_TXEIE_TXFNFIE)); +} +#else + /** * @brief Check if the LPUART TX Empty Interrupt is enabled or disabled. * @rmtoll CR1 TXEIE LL_LPUART_IsEnabledIT_TXE @@ -1824,6 +2475,7 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_TXE(USART_TypeDef *LPUARTx) { return (READ_BIT(LPUARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)); } +#endif /** * @brief Check if the LPUART Parity Error Interrupt is enabled or disabled. @@ -1846,6 +2498,30 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_CM(USART_TypeDef *LPUARTx) { return (READ_BIT(LPUARTx->CR1, USART_CR1_CMIE) == (USART_CR1_CMIE)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if the LPUART TX FIFO Empty Interrupt is enabled or disabled + * @rmtoll CR1 TXFEIE LL_LPUART_IsEnabledIT_TXFE + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_TXFE(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR1, USART_CR1_TXFEIE) == (USART_CR1_TXFEIE)); +} + +/** + * @brief Check if the LPUART RX FIFO Full Interrupt is enabled or disabled + * @rmtoll CR1 RXFFIE LL_LPUART_IsEnabledIT_RXFF + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_RXFF(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR1, USART_CR1_RXFFIE) == (USART_CR1_RXFFIE)); +} +#endif /** * @brief Check if the LPUART Error Interrupt is enabled or disabled. @@ -1880,6 +2556,31 @@ __STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_WKUP(USART_TypeDef *LPUARTx) return (READ_BIT(LPUARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if LPUART TX FIFO Threshold Interrupt is enabled or disabled + * @rmtoll CR3 TXFTIE LL_LPUART_IsEnabledIT_TXFT + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_TXFT(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR3, USART_CR3_TXFTIE) == (USART_CR3_TXFTIE)); +} + +/** + * @brief Check if LPUART RX FIFO Threshold Interrupt is enabled or disabled + * @rmtoll CR3 RXFTIE LL_LPUART_IsEnabledIT_RXFT + * @param LPUARTx LPUART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_LPUART_IsEnabledIT_RXFT(USART_TypeDef *LPUARTx) +{ + return (READ_BIT(LPUARTx->CR3, USART_CR3_RXFTIE) == (USART_CR3_RXFTIE)); +} +#endif + /** * @} */ @@ -2100,7 +2801,13 @@ __STATIC_INLINE void LL_LPUART_RequestEnterMuteMode(USART_TypeDef *LPUARTx) } /** + @if USART_CR1_FIFOEN + * @brief Request a Receive Data and FIFO flush + * @note Allows to discard the received data without reading them, and avoid an overrun + * condition. + @else * @brief Request a Receive Data flush + @endif * @rmtoll RQR RXFRQ LL_LPUART_RequestRxDataFlush * @param LPUARTx LPUART Instance * @retval None diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.c index 49be22d1bb..6e0653a383 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_opamp.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief OPAMP LL module driver ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.h index 22ee05d63b..a77c0044e4 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_opamp.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_opamp.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of OPAMP LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.c index 7c6d7b16db..b934799fda 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_pwr.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief PWR LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.h index d870a8477d..1d1f4624c3 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_pwr.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_pwr.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of PWR LL module. ****************************************************************************** * @attention @@ -185,7 +183,7 @@ extern "C" { /** @defgroup PWR_LL_EC_BATT_CHARG_RESISTOR BATT CHARG RESISTOR * @{ */ -#define LL_PWR_BATT_CHARG_RESISTOR_5K ((uint32_t)0x00000000) +#define LL_PWR_BATT_CHARG_RESISTOR_5K (0x00000000U) #define LL_PWR_BATT_CHARGRESISTOR_1_5K (PWR_CR4_VBRS) /** * @} @@ -218,22 +216,22 @@ extern "C" { /** @defgroup PWR_LL_EC_GPIO_BIT GPIO BIT * @{ */ -#define LL_PWR_GPIO_BIT_0 ((uint32_t)0x00000001) -#define LL_PWR_GPIO_BIT_1 ((uint32_t)0x00000002) -#define LL_PWR_GPIO_BIT_2 ((uint32_t)0x00000004) -#define LL_PWR_GPIO_BIT_3 ((uint32_t)0x00000008) -#define LL_PWR_GPIO_BIT_4 ((uint32_t)0x00000010) -#define LL_PWR_GPIO_BIT_5 ((uint32_t)0x00000020) -#define LL_PWR_GPIO_BIT_6 ((uint32_t)0x00000040) -#define LL_PWR_GPIO_BIT_7 ((uint32_t)0x00000080) -#define LL_PWR_GPIO_BIT_8 ((uint32_t)0x00000100) -#define LL_PWR_GPIO_BIT_9 ((uint32_t)0x00000200) -#define LL_PWR_GPIO_BIT_10 ((uint32_t)0x00000400) -#define LL_PWR_GPIO_BIT_11 ((uint32_t)0x00000800) -#define LL_PWR_GPIO_BIT_12 ((uint32_t)0x00001000) -#define LL_PWR_GPIO_BIT_13 ((uint32_t)0x00002000) -#define LL_PWR_GPIO_BIT_14 ((uint32_t)0x00004000) -#define LL_PWR_GPIO_BIT_15 ((uint32_t)0x00008000) +#define LL_PWR_GPIO_BIT_0 (0x00000001U) +#define LL_PWR_GPIO_BIT_1 (0x00000002U) +#define LL_PWR_GPIO_BIT_2 (0x00000004U) +#define LL_PWR_GPIO_BIT_3 (0x00000008U) +#define LL_PWR_GPIO_BIT_4 (0x00000010U) +#define LL_PWR_GPIO_BIT_5 (0x00000020U) +#define LL_PWR_GPIO_BIT_6 (0x00000040U) +#define LL_PWR_GPIO_BIT_7 (0x00000080U) +#define LL_PWR_GPIO_BIT_8 (0x00000100U) +#define LL_PWR_GPIO_BIT_9 (0x00000200U) +#define LL_PWR_GPIO_BIT_10 (0x00000400U) +#define LL_PWR_GPIO_BIT_11 (0x00000800U) +#define LL_PWR_GPIO_BIT_12 (0x00001000U) +#define LL_PWR_GPIO_BIT_13 (0x00002000U) +#define LL_PWR_GPIO_BIT_14 (0x00004000U) +#define LL_PWR_GPIO_BIT_15 (0x00008000U) /** * @} */ @@ -303,16 +301,6 @@ __STATIC_INLINE void LL_PWR_DisableLowPowerRunMode(void) CLEAR_BIT(PWR->CR1, PWR_CR1_LPR); } -/** - * @brief Check if the regulator is in low-power mode - * @rmtoll CR1 LPR LL_PWR_IsEnabledLowPowerRunMode - * @retval State of bit (1 or 0). - */ -__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRunMode(void) -{ - return (READ_BIT(PWR->CR1, PWR_CR1_LPR) == (PWR_CR1_LPR)); -} - /** * @brief Switch from run main mode to run low-power mode. * @rmtoll CR1 LPR LL_PWR_EnterLowPowerRunMode @@ -333,8 +321,19 @@ __STATIC_INLINE void LL_PWR_ExitLowPowerRunMode(void) LL_PWR_DisableLowPowerRunMode(); } +/** + * @brief Check if the regulator is in low-power mode + * @rmtoll CR1 LPR LL_PWR_IsEnabledLowPowerRunMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRunMode(void) +{ + return (READ_BIT(PWR->CR1, PWR_CR1_LPR) == (PWR_CR1_LPR)); +} + /** * @brief Set the main internal regulator output voltage + * @note This configuration may be completed with LL_PWR_EnableRange1BoostMode() on STM32L4Rx/STM32L4Sx devices. * @rmtoll CR1 VOS LL_PWR_SetRegulVoltageScaling * @param VoltageScaling This parameter can be one of the following values: * @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 @@ -358,6 +357,38 @@ __STATIC_INLINE uint32_t LL_PWR_GetRegulVoltageScaling(void) return (uint32_t)(READ_BIT(PWR->CR1, PWR_CR1_VOS)); } +#if defined(PWR_CR5_R1MODE) +/** + * @brief Enable main regulator voltage range 1 boost mode + * @rmtoll CR5 R1MODE LL_PWR_EnableRange1BoostMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableRange1BoostMode(void) +{ + CLEAR_BIT(PWR->CR5, PWR_CR5_R1MODE); +} + +/** + * @brief Disable main regulator voltage range 1 boost mode + * @rmtoll CR5 R1MODE LL_PWR_DisableRange1BoostMode + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableRange1BoostMode(void) +{ + SET_BIT(PWR->CR5, PWR_CR5_R1MODE); +} + +/** + * @brief Check if the main regulator voltage range 1 boost mode is enabled + * @rmtoll CR5 R1MODE LL_PWR_IsEnabledRange1BoostMode + * @retval Inverted state of bit (0 or 1). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledRange1BoostMode(void) +{ + return (READ_BIT(PWR->CR5, PWR_CR5_R1MODE) == RESET); +} +#endif /* PWR_CR5_R1MODE */ + /** * @brief Enable access to the backup domain * @rmtoll CR1 DBP LL_PWR_EnableBkUpAccess @@ -419,6 +450,70 @@ __STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void) return (uint32_t)(READ_BIT(PWR->CR1, PWR_CR1_LPMS)); } +#if defined(PWR_CR1_RRSTP) +/** + * @brief Enable SRAM3 content retention in Stop mode + * @rmtoll CR1 RRSTP LL_PWR_EnableSRAM3Retention + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableSRAM3Retention(void) +{ + SET_BIT(PWR->CR1, PWR_CR1_RRSTP); +} + +/** + * @brief Disable SRAM3 content retention in Stop mode + * @rmtoll CR1 RRSTP LL_PWR_DisableSRAM3Retention + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableSRAM3Retention(void) +{ + CLEAR_BIT(PWR->CR1, PWR_CR1_RRSTP); +} + +/** + * @brief Check if SRAM3 content retention in Stop mode is enabled + * @rmtoll CR1 RRSTP LL_PWR_IsEnabledSRAM3Retention + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledSRAM3Retention(void) +{ + return (READ_BIT(PWR->CR1, PWR_CR1_RRSTP) == (PWR_CR1_RRSTP)); +} +#endif /* PWR_CR1_RRSTP */ + +#if defined(PWR_CR3_DSIPDEN) +/** + * @brief Enable pull-down activation on DSI pins + * @rmtoll CR3 DSIPDEN LL_PWR_EnableDSIPinsPDActivation + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableDSIPinsPDActivation(void) +{ + SET_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} + +/** + * @brief Disable pull-down activation on DSI pins + * @rmtoll CR3 DSIPDEN LL_PWR_DisableDSIPinsPDActivation + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableDSIPinsPDActivation(void) +{ + CLEAR_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} + +/** + * @brief Check if pull-down activation on DSI pins is enabled + * @rmtoll CR3 DSIPDEN LL_PWR_IsEnabledDSIPinsPDActivation + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledDSIPinsPDActivation(void) +{ + return (READ_BIT(PWR->CR3, PWR_CR3_DSIPDEN) == (PWR_CR3_DSIPDEN)); +} +#endif /* PWR_CR3_DSIPDEN */ + #if defined(PWR_CR2_PVME1) /** * @brief Enable VDDUSB supply @@ -661,7 +756,7 @@ __STATIC_INLINE void LL_PWR_DisablePUPDCfg(void) } /** - * @brief Check if pull-up and pull-down configuration is enabled + * @brief Check if pull-up and pull-down configuration is enabled * @rmtoll CR3 APC LL_PWR_IsEnabledPUPDCfg * @retval State of bit (1 or 0). */ @@ -670,6 +765,38 @@ __STATIC_INLINE uint32_t LL_PWR_IsEnabledPUPDCfg(void) return (READ_BIT(PWR->CR3, PWR_CR3_APC) == (PWR_CR3_APC)); } +#if defined(PWR_CR3_DSIPDEN) +/** + * @brief Enable pull-down activation on DSI pins + * @rmtoll CR3 DSIPDEN LL_PWR_EnableDSIPullDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_EnableDSIPullDown(void) +{ + SET_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} + +/** + * @brief Disable pull-down activation on DSI pins + * @rmtoll CR3 DSIPDEN LL_PWR_DisableDSIPullDown + * @retval None + */ +__STATIC_INLINE void LL_PWR_DisableDSIPullDown(void) +{ + CLEAR_BIT(PWR->CR3, PWR_CR3_DSIPDEN); +} + +/** + * @brief Check if pull-down activation on DSI pins is enabled + * @rmtoll CR3 DSIPDEN LL_PWR_IsEnabledDSIPullDown + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_PWR_IsEnabledDSIPullDown(void) +{ + return (READ_BIT(PWR->CR3, PWR_CR3_DSIPDEN) == (PWR_CR3_DSIPDEN)); +} +#endif /* PWR_CR3_DSIPDEN */ + /** * @brief Enable SRAM2 content retention in Standby mode * @rmtoll CR3 RRS LL_PWR_EnableSRAM2Retention @@ -691,7 +818,7 @@ __STATIC_INLINE void LL_PWR_DisableSRAM2Retention(void) } /** - * @brief Check if SRAM2 content retention in Standby mode is enabled + * @brief Check if SRAM2 content retention in Standby mode is enabled * @rmtoll CR3 RRS LL_PWR_IsEnabledSRAM2Retention * @retval State of bit (1 or 0). */ @@ -1374,7 +1501,7 @@ __STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_VOS(void) /** * @brief Indicate whether the regulator is ready in main mode or is in low-power mode - * @note: Take care, return value "0" means the regulator is ready. Return value "1" means the output voltage range is still changing. + * @note Take care, return value "0" means the regulator is ready. Return value "1" means the output voltage range is still changing. * @rmtoll SR2 REGLPF LL_PWR_IsActiveFlag_REGLPF * @retval State of bit (1 or 0). */ @@ -1407,14 +1534,14 @@ ErrorStatus LL_PWR_DeInit(void); */ #endif /* USE_FULL_LL_DRIVER */ -/** Legacy definitions for compatibility purpose -@cond 0 -*/ +/** @defgroup PWR_LL_EF_Legacy_Functions Legacy functions name + * @{ + */ /* Old functions name kept for legacy purpose, to be replaced by the */ /* current functions name. */ #define LL_PWR_IsActiveFlag_VOSF LL_PWR_IsActiveFlag_VOS /** -@endcond + * @} */ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.c index 5d750e968c..d3c5a0f053 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rcc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RCC LL module driver. ****************************************************************************** * @attention @@ -60,7 +58,7 @@ /** @addtogroup RCC_LL_Private_Macros * @{ */ -#if defined(RCC_CCIPR_USART3SEL) +#if defined(RCC_CCIPR_USART3SEL) #define IS_LL_RCC_USART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_USART1_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_USART2_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_USART3_CLKSOURCE)) @@ -80,19 +78,24 @@ #define IS_LL_RCC_LPUART_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_LPUART1_CLKSOURCE)) -#if defined(RCC_CCIPR_I2C2SEL)&&defined(RCC_CCIPR_I2C3SEL) +#if defined(RCC_CCIPR_I2C2SEL) && defined(RCC_CCIPR_I2C3SEL) && defined(RCC_CCIPR2_I2C4SEL) +#define IS_LL_RCC_I2C_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_I2C1_CLKSOURCE) \ + || ((__VALUE__) == LL_RCC_I2C2_CLKSOURCE) \ + || ((__VALUE__) == LL_RCC_I2C3_CLKSOURCE) \ + || ((__VALUE__) == LL_RCC_I2C4_CLKSOURCE)) +#elif defined(RCC_CCIPR_I2C2SEL) && defined(RCC_CCIPR_I2C3SEL) #define IS_LL_RCC_I2C_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_I2C1_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_I2C2_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_I2C3_CLKSOURCE)) -#elif !defined(RCC_CCIPR_I2C2SEL)&&defined(RCC_CCIPR_I2C3SEL) +#elif !defined(RCC_CCIPR_I2C2SEL) && defined(RCC_CCIPR_I2C3SEL) #define IS_LL_RCC_I2C_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_I2C1_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_I2C3_CLKSOURCE)) #else #define IS_LL_RCC_I2C_CLKSOURCE(__VALUE__) ((__VALUE__) == LL_RCC_I2C1_CLKSOURCE) -#endif /* RCC_CCIPR_I2C2SEL && RCC_CCIPR_I2C3SEL */ +#endif /* RCC_CCIPR_I2C2SEL && RCC_CCIPR_I2C3SEL && RCC_CCIPR2_I2C4SEL */ #define IS_LL_RCC_LPTIM_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_LPTIM1_CLKSOURCE) \ || ((__VALUE__) == LL_RCC_LPTIM2_CLKSOURCE)) @@ -103,8 +106,13 @@ #define IS_LL_RCC_SAI_CLKSOURCE(__VALUE__) ((__VALUE__) == LL_RCC_SAI1_CLKSOURCE) #endif /* RCC_CCIPR_SAI2SEL */ +#if defined(RCC_CCIPR2_SDMMCSEL) +#define IS_LL_RCC_SDMMC_KERNELCLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_SDMMC1_KERNELCLKSOURCE)) +#endif /* RCC_CCIPR2_SDMMCSEL */ + #define IS_LL_RCC_SDMMC_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_SDMMC1_CLKSOURCE)) + #define IS_LL_RCC_RNG_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_RNG_CLKSOURCE)) #if defined(USB_OTG_FS) || defined(USB) @@ -117,10 +125,24 @@ #define IS_LL_RCC_SWPMI_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_SWPMI1_CLKSOURCE)) #endif /* SWPMI1 */ -#if defined(DFSDM1_Channel0) +#if defined(DFSDM1_Channel0) #define IS_LL_RCC_DFSDM_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_DFSDM1_CLKSOURCE)) +#if defined(RCC_CCIPR2_DFSDM1SEL) +#define IS_LL_RCC_DFSDM_AUDIO_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_DFSDM1_AUDIO_CLKSOURCE)) +#endif /* RCC_CCIPR2_DFSDM1SEL */ #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +#define IS_LL_RCC_DSI_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_DSI_CLKSOURCE)) +#endif /* DSI */ + +#if defined(LTDC) +#define IS_LL_RCC_LTDC_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_LTDC_CLKSOURCE)) +#endif /* LTDC */ + +#if defined(OCTOSPI1) +#define IS_LL_RCC_OCTOSPI_CLKSOURCE(__VALUE__) (((__VALUE__) == LL_RCC_OCTOSPI_CLKSOURCE)) +#endif /* OCTOSPI */ /** * @} @@ -142,7 +164,14 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_48M(void); uint32_t RCC_PLLSAI1_GetFreqDomain_ADC(void); #if defined(RCC_PLLSAI2_SUPPORT) uint32_t RCC_PLLSAI2_GetFreqDomain_SAI(void); +#if defined(LTDC) +uint32_t RCC_PLLSAI2_GetFreqDomain_LTDC(void); +#else uint32_t RCC_PLLSAI2_GetFreqDomain_ADC(void); +#endif /* LTDC */ +#if defined(DSI) +uint32_t RCC_PLLSAI2_GetFreqDomain_DSI(void); +#endif /* DSI */ #endif /*RCC_PLLSAI2_SUPPORT*/ /** * @} @@ -162,7 +191,7 @@ uint32_t RCC_PLLSAI2_GetFreqDomain_ADC(void); * @brief Reset the RCC clock configuration to the default reset state. * @note The default reset state of the clock configuration is given below: * - MSI ON and used as system clock source - * - HSE, HSI, PLL and PLLSAIxSource OFF + * - HSE, HSI, PLL, PLLSAI1 and PLLSAI2 OFF * - AHB, APB1 and APB2 prescaler set to 1. * - CSS, MCO OFF * - All interrupts disabled @@ -183,11 +212,11 @@ ErrorStatus LL_RCC_DeInit(void) /* Insure MSIRDY bit is set before writing default MSIRANGE value */ while (LL_RCC_MSI_IsReady() == 0U) { - __NOP(); } /* Set MSIRANGE default value */ LL_RCC_MSI_SetRange(LL_RCC_MSIRANGE_6); + /* Set MSITRIM bits to the reset value*/ LL_RCC_MSI_SetCalibTrimming(0); @@ -199,7 +228,7 @@ ErrorStatus LL_RCC_DeInit(void) vl_mask = 0xFFFFFFFFU; - /* Reset HSION, HSIKERON, HSIASFS, HSEON, PLLSYSON bits */ + /* Reset HSION, HSIKERON, HSIASFS, HSEON, PLLON bits */ CLEAR_BIT(vl_mask, (RCC_CR_HSION | RCC_CR_HSIASFS | RCC_CR_HSIKERON | RCC_CR_HSEON | RCC_CR_PLLON)); @@ -214,6 +243,18 @@ ErrorStatus LL_RCC_DeInit(void) /* Write new mask in CR register */ LL_RCC_WriteReg(CR, vl_mask); +#if defined(RCC_PLLSAI2_SUPPORT) + /* Wait for PLLRDY, PLLSAI1RDY and PLLSAI2RDY bits to be reset */ + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY | RCC_CR_PLLSAI1RDY | RCC_CR_PLLSAI2RDY) != 0U) + { + } +#else + /* Wait for PLLRDY, PLLSAI1RDY bits to be reset */ + while(READ_BIT(RCC->CR, RCC_CR_PLLRDY | RCC_CR_PLLSAI1RDY) != 0U) + { + } +#endif + /* Reset PLLCFGR register */ LL_RCC_WriteReg(PLLCFGR, 16U << RCC_PLLCFGR_PLLN_Pos); @@ -231,6 +272,21 @@ ErrorStatus LL_RCC_DeInit(void) /* Disable all interrupts */ LL_RCC_WriteReg(CIER, 0x00000000U); + /* Clear all interrupt flags */ + vl_mask = RCC_CICR_LSIRDYC | RCC_CICR_LSERDYC | RCC_CICR_MSIRDYC | RCC_CICR_HSIRDYC | RCC_CICR_HSERDYC | RCC_CICR_PLLRDYC | \ + RCC_CICR_PLLSAI1RDYC | RCC_CICR_CSSC | RCC_CICR_LSECSSC; +#if defined(RCC_HSI48_SUPPORT) + vl_mask |= RCC_CICR_HSI48RDYC; +#endif +#if defined(RCC_PLLSAI2_SUPPORT) + vl_mask |= RCC_CICR_PLLSAI2RDYC; +#endif + + LL_RCC_WriteReg(CICR, vl_mask); + + /* Clear reset flags */ + LL_RCC_ClearResetFlags(); + return SUCCESS; } @@ -604,6 +660,7 @@ uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource) return i2c_frequency; } + /** * @brief Return LPUARTx clock frequency * @param LPUARTxSource This parameter can be one of the following values: @@ -829,6 +886,45 @@ uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource) return sai_frequency; } +#if defined(RCC_CCIPR2_SDMMCSEL) +/** + * @brief Return SDMMCx kernel clock frequency + * @param SDMMCxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE + * @retval SDMMC clock frequency (in Hz) + * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator (MSI) or PLL is not ready + * - @ref LL_RCC_PERIPH_FREQUENCY_NA indicates that no clock source selected + */ +uint32_t LL_RCC_GetSDMMCKernelClockFreq(uint32_t SDMMCxSource) +{ + uint32_t sdmmc_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + + /* Check parameter */ + assert_param(IS_LL_RCC_SDMMC_KERNELCLKSOURCE(SDMMCxSource)); + + /* SDMMC1CLK kernel clock frequency */ + switch (LL_RCC_GetSDMMCKernelClockSource(SDMMCxSource)) + { + case LL_RCC_SDMMC1_KERNELCLKSOURCE_48CLK: /* 48MHz clock from internal multiplexor used as SDMMC1 clock source */ + sdmmc_frequency = LL_RCC_GetSDMMCClockFreq(LL_RCC_SDMMC1_CLKSOURCE); + break; + + case LL_RCC_SDMMC1_KERNELCLKSOURCE_PLLP: /* PLL "P" output (PLLSAI3CLK) clock used as SDMMC1 clock source */ + if (LL_RCC_PLL_IsReady()) + { + sdmmc_frequency = RCC_PLL_GetFreqDomain_SAI(); + } + break; + + default: + sdmmc_frequency = LL_RCC_PERIPH_FREQUENCY_NA; + break; + } + + return sdmmc_frequency; +} +#endif + /** * @brief Return SDMMCx clock frequency * @param SDMMCxSource This parameter can be one of the following values: @@ -847,12 +943,14 @@ uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource) /* SDMMC1CLK clock frequency */ switch (LL_RCC_GetSDMMCClockSource(SDMMCxSource)) { +#if defined(LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1) case LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1: /* PLLSAI1 clock used as SDMMC1 clock source */ if (LL_RCC_PLLSAI1_IsReady()) { sdmmc_frequency = RCC_PLLSAI1_GetFreqDomain_48M(); } break; +#endif case LL_RCC_SDMMC1_CLKSOURCE_PLL: /* PLL clock used as SDMMC1 clock source */ if (LL_RCC_PLL_IsReady()) @@ -861,6 +959,7 @@ uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource) } break; +#if defined(LL_RCC_SDMMC1_CLKSOURCE_MSI) case LL_RCC_SDMMC1_CLKSOURCE_MSI: /* MSI clock used as SDMMC1 clock source */ if (LL_RCC_MSI_IsReady()) { @@ -870,6 +969,7 @@ uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource) LL_RCC_MSI_GetRangeAfterStandby())); } break; +#endif #if defined(RCC_HSI48_SUPPORT) case LL_RCC_SDMMC1_CLKSOURCE_HSI48: /* HSI48 used as SDMMC1 clock source */ @@ -1039,14 +1139,14 @@ uint32_t LL_RCC_GetADCClockFreq(uint32_t ADCxSource) } break; -#if defined(RCC_PLLSAI2_SUPPORT) +#if defined(RCC_PLLSAI2_SUPPORT) && defined(LL_RCC_ADC_CLKSOURCE_PLLSAI2) case LL_RCC_ADC_CLKSOURCE_PLLSAI2: /* PLLSAI2 clock used as ADC clock source */ if (LL_RCC_PLLSAI2_IsReady()) { adc_frequency = RCC_PLLSAI2_GetFreqDomain_ADC(); } break; -#endif /* RCC_PLLSAI2_SUPPORT */ +#endif /* RCC_PLLSAI2_SUPPORT && LL_RCC_ADC_CLKSOURCE_PLLSAI2 */ case LL_RCC_ADC_CLKSOURCE_SYSCLK: /* SYSCLK clock used as ADC clock source */ adc_frequency = RCC_GetSystemClockFreq(); @@ -1124,8 +1224,161 @@ uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource) return dfsdm_frequency; } + +#if defined(RCC_CCIPR2_DFSDM1SEL) +/** + * @brief Return DFSDMx Audio clock frequency + * @param DFSDMxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE + * @retval DFSDM clock frequency (in Hz) + * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator is not ready + */ +uint32_t LL_RCC_GetDFSDMAudioClockFreq(uint32_t DFSDMxSource) +{ + uint32_t dfsdm_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + + /* Check parameter */ + assert_param(IS_LL_RCC_DFSDM_AUDIO_CLKSOURCE(DFSDMxSource)); + + /* DFSDM1CLK clock frequency */ + switch (LL_RCC_GetDFSDMAudioClockSource(DFSDMxSource)) + { + case LL_RCC_DFSDM1_AUDIO_CLKSOURCE_SAI1: /* SAI1 clock used as DFSDM1 audio clock */ + dfsdm_frequency = LL_RCC_GetSAIClockFreq(LL_RCC_SAI1_CLKSOURCE); + break; + + case LL_RCC_DFSDM1_AUDIO_CLKSOURCE_MSI: /* MSI clock used as DFSDM1 audio clock */ + if (LL_RCC_MSI_IsReady()) + { + dfsdm_frequency = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + } + break; + + case LL_RCC_DFSDM1_AUDIO_CLKSOURCE_HSI: /* HSI clock used as DFSDM1 audio clock */ + default: + if (LL_RCC_HSI_IsReady()) + { + dfsdm_frequency = HSI_VALUE; + } + break; + } + + return dfsdm_frequency; +} +#endif /* RCC_CCIPR2_DFSDM1SEL */ #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +/** + * @brief Return DSI clock frequency + * @param DSIxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE + * @retval DSI clock frequency (in Hz) + * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator is not ready + * - @ref LL_RCC_PERIPH_FREQUENCY_NA indicates that external clock is used + */ +uint32_t LL_RCC_GetDSIClockFreq(uint32_t DSIxSource) +{ + uint32_t dsi_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + + /* Check parameter */ + assert_param(IS_LL_RCC_DSI_CLKSOURCE(DSIxSource)); + + /* DSICLK clock frequency */ + switch (LL_RCC_GetDSIClockSource(DSIxSource)) + { + case LL_RCC_DSI_CLKSOURCE_PLL: /* DSI Clock is PLLSAI2 Osc. */ + if (LL_RCC_PLLSAI2_IsReady()) + { + dsi_frequency = RCC_PLLSAI2_GetFreqDomain_DSI(); + } + break; + + case LL_RCC_DSI_CLKSOURCE_PHY: /* DSI Clock is DSI physical clock. */ + default: + dsi_frequency = LL_RCC_PERIPH_FREQUENCY_NA; + break; + } + + return dsi_frequency; +} +#endif /* DSI */ + +#if defined(LTDC) +/** + * @brief Return LTDC clock frequency + * @param LTDCxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_LTDC_CLKSOURCE + * @retval LTDC clock frequency (in Hz) + * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator PLLSAI is not ready + */ +uint32_t LL_RCC_GetLTDCClockFreq(uint32_t LTDCxSource) +{ + uint32_t ltdc_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + + /* Check parameter */ + assert_param(IS_LL_RCC_LTDC_CLKSOURCE(LTDCxSource)); + + if (LL_RCC_PLLSAI2_IsReady()) + { + ltdc_frequency = RCC_PLLSAI2_GetFreqDomain_LTDC(); + } + + return ltdc_frequency; +} +#endif /* LTDC */ + +#if defined(OCTOSPI1) +/** + * @brief Return OCTOSPI clock frequency + * @param OCTOSPIxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE + * @retval OCTOSPI clock frequency (in Hz) + * - @ref LL_RCC_PERIPH_FREQUENCY_NO indicates that oscillator PLLSAI is not ready + */ +uint32_t LL_RCC_GetOCTOSPIClockFreq(uint32_t OCTOSPIxSource) +{ + uint32_t octospi_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + + /* Check parameter */ + assert_param(IS_LL_RCC_OCTOSPI_CLKSOURCE(OCTOSPIxSource)); + + /* OCTOSPI clock frequency */ + switch (LL_RCC_GetOCTOSPIClockSource(OCTOSPIxSource)) + { + case LL_RCC_OCTOSPI_CLKSOURCE_SYSCLK: /* OCTOSPI clock is SYSCLK */ + octospi_frequency = RCC_GetSystemClockFreq(); + break; + + case LL_RCC_OCTOSPI_CLKSOURCE_MSI: /* MSI clock used as OCTOSPI clock */ + if (LL_RCC_MSI_IsReady()) + { + octospi_frequency = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + } + break; + + case LL_RCC_OCTOSPI_CLKSOURCE_PLL: /* PLL clock used as OCTOSPI source */ + if (LL_RCC_PLL_IsReady()) + { + octospi_frequency = RCC_PLL_GetFreqDomain_48M(); + } + break; + + default: + octospi_frequency = LL_RCC_PERIPH_FREQUENCY_NO; + break; + } + + return octospi_frequency; +} +#endif /* OCTOSPI1 */ + /** * @} */ @@ -1333,6 +1586,48 @@ uint32_t RCC_PLL_GetFreqDomain_48M(void) return __LL_RCC_CALC_PLLCLK_48M_FREQ(pllinputfreq, LL_RCC_PLL_GetDivider(), LL_RCC_PLL_GetN(), LL_RCC_PLL_GetQ()); } +#if defined(DSI) +/** + * @brief Return PLL clock frequency used for DSI clock + * @retval PLL clock frequency (in Hz) + */ +uint32_t RCC_PLLSAI2_GetFreqDomain_DSI(void) +{ + uint32_t pllinputfreq = 0U, pllsource = 0U; + + /* PLLSAI2_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI2M) * PLLSAI2N */ + /* DSICLK = PLLSAI2_VCO / PLLSAI2R */ + pllsource = LL_RCC_PLL_GetMainSource(); + + switch (pllsource) + { + case LL_RCC_PLLSOURCE_MSI: /* MSI used as PLLSAI2 clock source */ + pllinputfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + break; + + case LL_RCC_PLLSOURCE_HSI: /* HSI used as PLLSAI2 clock source */ + pllinputfreq = HSI_VALUE; + break; + + case LL_RCC_PLLSOURCE_HSE: /* HSE used as PLLSAI2 clock source */ + pllinputfreq = HSE_VALUE; + break; + + default: + pllinputfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + break; + } + + return __LL_RCC_CALC_PLLSAI2_DSI_FREQ(pllinputfreq, LL_RCC_PLLSAI2_GetDivider(), + LL_RCC_PLLSAI2_GetN(), LL_RCC_PLLSAI2_GetR()); +} +#endif /* DSI */ /** * @brief Return PLLSAI1 clock frequency used for SAI domain @@ -1342,7 +1637,11 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_SAI(void) { uint32_t pllinputfreq = 0U, pllsource = 0U; +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI1M) * PLLSAI1N */ +#else /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLSAI1N */ +#endif /* SAI Domain clock = PLLSAI1_VCO / PLLSAI1P */ pllsource = LL_RCC_PLL_GetMainSource(); @@ -1382,7 +1681,11 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_48M(void) { uint32_t pllinputfreq = 0U, pllsource = 0U; +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI1M) * PLLSAI1N */ +#else /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLSAI1N */ +#endif /* 48M Domain clock = PLLSAI1_VCO / PLLSAI1Q */ pllsource = LL_RCC_PLL_GetMainSource(); @@ -1422,7 +1725,11 @@ uint32_t RCC_PLLSAI1_GetFreqDomain_ADC(void) { uint32_t pllinputfreq = 0U, pllsource = 0U; +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI1M) * PLLSAI1N */ +#else /* PLLSAI1_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLSAI1N */ +#endif /* 48M Domain clock = PLLSAI1_VCO / PLLSAI1R */ pllsource = LL_RCC_PLL_GetMainSource(); @@ -1463,7 +1770,11 @@ uint32_t RCC_PLLSAI2_GetFreqDomain_SAI(void) { uint32_t pllinputfreq = 0U, pllsource = 0U; +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + /* PLLSAI2_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI2M) * PLLSAI2N */ +#else /* PLLSAI2_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLSAI2N */ +#endif /* SAI Domain clock = PLLSAI2_VCO / PLLSAI2P */ pllsource = LL_RCC_PLL_GetMainSource(); @@ -1491,10 +1802,59 @@ uint32_t RCC_PLLSAI2_GetFreqDomain_SAI(void) LL_RCC_MSI_GetRangeAfterStandby())); break; } +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) + return __LL_RCC_CALC_PLLSAI2_SAI_FREQ(pllinputfreq, LL_RCC_PLLSAI2_GetDivider(), + LL_RCC_PLLSAI2_GetN(), LL_RCC_PLLSAI2_GetP()); +#else return __LL_RCC_CALC_PLLSAI2_SAI_FREQ(pllinputfreq, LL_RCC_PLL_GetDivider(), LL_RCC_PLLSAI2_GetN(), LL_RCC_PLLSAI2_GetP()); +#endif } +#if defined(LTDC) +/** + * @brief Return PLLSAI2 clock frequency used for LTDC domain + * @retval PLLSAI2 clock frequency (in Hz) + */ +uint32_t RCC_PLLSAI2_GetFreqDomain_LTDC(void) +{ + uint32_t pllinputfreq = 0U, pllsource = 0U; + + /* PLLSAI2_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLSAI2M) * PLLSAI2N */ + /* LTDC Domain clock = (PLLSAI2_VCO / PLLSAI2R) / PLLSAI2DIVR */ + pllsource = LL_RCC_PLL_GetMainSource(); + + switch (pllsource) + { + case LL_RCC_PLLSOURCE_MSI: /* MSI used as PLLSAI2 clock source */ + pllinputfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + break; + + case LL_RCC_PLLSOURCE_HSI: /* HSI used as PLLSAI2 clock source */ + pllinputfreq = HSI_VALUE; + break; + + case LL_RCC_PLLSOURCE_HSE: /* HSE used as PLLSAI2 clock source */ + pllinputfreq = HSE_VALUE; + break; + + default: + pllinputfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_IsEnabledRangeSelect(), + (LL_RCC_MSI_IsEnabledRangeSelect() ? + LL_RCC_MSI_GetRange() : + LL_RCC_MSI_GetRangeAfterStandby())); + break; + } + + return __LL_RCC_CALC_PLLSAI2_LTDC_FREQ(pllinputfreq, LL_RCC_PLLSAI2_GetDivider(), + LL_RCC_PLLSAI2_GetN(), LL_RCC_PLLSAI2_GetR(), LL_RCC_PLLSAI2_GetDIVR()); +} + +#else + /** * @brief Return PLLSAI2 clock frequency used for ADC domain * @retval PLLSAI2 clock frequency (in Hz) @@ -1534,8 +1894,9 @@ uint32_t RCC_PLLSAI2_GetFreqDomain_ADC(void) return __LL_RCC_CALC_PLLSAI2_ADC_FREQ(pllinputfreq, LL_RCC_PLL_GetDivider(), LL_RCC_PLLSAI2_GetN(), LL_RCC_PLLSAI2_GetR()); } -#endif /*RCC_PLLSAI2_SUPPORT*/ +#endif /* LTDC */ +#endif /*RCC_PLLSAI2_SUPPORT*/ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.h index e0d119a20a..e1d4b8667b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rcc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rcc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RCC LL module. ****************************************************************************** * @attention @@ -62,7 +60,9 @@ extern "C" { * @{ */ -static const uint8_t aRCC_APBAHBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; +#if defined(RCC_CCIPR2_PLLSAI2DIVR) +static const uint8_t aRCC_PLLSAI2DIVRPrescTable[4] = {2, 4, 8, 16}; +#endif /* RCC_CCIPR2_PLLSAI2DIVR */ /** * @} @@ -90,6 +90,7 @@ static const uint8_t aRCC_APBAHBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; * @} */ #endif /*USE_FULL_LL_DRIVER*/ + /* Exported types ------------------------------------------------------------*/ #if defined(USE_FULL_LL_DRIVER) /** @defgroup RCC_LL_Exported_Types RCC Exported Types @@ -127,7 +128,7 @@ typedef struct /** @defgroup RCC_LL_EC_OSC_VALUES Oscillator Values adaptation * @brief Defines used to adapt values of different oscillators - * @note These values could be modified in the user environment according to + * @note These values could be modified in the user environment according to * HW set-up. * @{ */ @@ -146,8 +147,8 @@ typedef struct #if !defined (LSI_VALUE) #define LSI_VALUE 32000U /*!< Value of the LSI oscillator in Hz */ #endif /* LSI_VALUE */ - #if defined(RCC_HSI48_SUPPORT) + #if !defined (HSI48_VALUE) #define HSI48_VALUE 48000000U /*!< Value of the HSI48 oscillator in Hz */ #endif /* HSI48_VALUE */ @@ -488,24 +489,50 @@ typedef struct /** @defgroup RCC_LL_EC_SAI1_CLKSOURCE Peripheral SAI clock source selection * @{ */ +#if defined(RCC_CCIPR2_SAI1SEL) +#define LL_RCC_SAI1_CLKSOURCE_PLL (RCC_CCIPR2_SAI1SEL << 16U) /*!< PLL clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLLSAI1 ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_0) /*!< PLLSAI1 clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PLLSAI2 ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_1) /*!< PLLSAI2 clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_HSI ((RCC_CCIPR2_SAI1SEL << 16U) | RCC_CCIPR2_SAI1SEL_2) /*!< HSI clock used as SAI1 clock source */ +#define LL_RCC_SAI1_CLKSOURCE_PIN ((RCC_CCIPR2_SAI1SEL << 16U) | (RCC_CCIPR2_SAI1SEL_1 | RCC_CCIPR2_SAI1SEL_0)) /*!< External input clock used as SAI1 clock source */ +#else #define LL_RCC_SAI1_CLKSOURCE_PLLSAI1 RCC_CCIPR_SAI1SEL /*!< PLLSAI1 clock used as SAI1 clock source */ #if defined(RCC_PLLSAI2_SUPPORT) #define LL_RCC_SAI1_CLKSOURCE_PLLSAI2 (RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_0 >> 16U)) /*!< PLLSAI2 clock used as SAI1 clock source */ #endif /* RCC_PLLSAI2_SUPPORT */ #define LL_RCC_SAI1_CLKSOURCE_PLL (RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL_1 >> 16U)) /*!< PLL clock used as SAI1 clock source */ #define LL_RCC_SAI1_CLKSOURCE_PIN (RCC_CCIPR_SAI1SEL | (RCC_CCIPR_SAI1SEL >> 16U)) /*!< External input clock used as SAI1 clock source */ +#endif /* RCC_CCIPR2_SAI1SEL */ -#if defined(RCC_CCIPR_SAI2SEL) +#if defined(RCC_CCIPR2_SAI2SEL) +#define LL_RCC_SAI2_CLKSOURCE_PLL (RCC_CCIPR2_SAI2SEL << 16U) /*!< PLL clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLSAI1 ((RCC_CCIPR2_SAI2SEL << 16U) | RCC_CCIPR2_SAI2SEL_0) /*!< PLLSAI1 clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PLLSAI2 ((RCC_CCIPR2_SAI2SEL << 16U) | RCC_CCIPR2_SAI2SEL_1) /*!< PLLSAI2 clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_HSI ((RCC_CCIPR2_SAI2SEL << 16U) | RCC_CCIPR2_SAI2SEL_2) /*!< HSI clock used as SAI2 clock source */ +#define LL_RCC_SAI2_CLKSOURCE_PIN ((RCC_CCIPR2_SAI2SEL << 16U) | (RCC_CCIPR2_SAI2SEL_1 | RCC_CCIPR2_SAI2SEL_0)) /*!< External input clock used as SAI2 clock source */ +#elif defined(RCC_CCIPR_SAI2SEL) #define LL_RCC_SAI2_CLKSOURCE_PLLSAI1 RCC_CCIPR_SAI2SEL /*!< PLLSAI1 clock used as SAI2 clock source */ #if defined(RCC_PLLSAI2_SUPPORT) #define LL_RCC_SAI2_CLKSOURCE_PLLSAI2 (RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_0 >> 16U)) /*!< PLLSAI2 clock used as SAI2 clock source */ #endif /* RCC_PLLSAI2_SUPPORT */ #define LL_RCC_SAI2_CLKSOURCE_PLL (RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL_1 >> 16U)) /*!< PLL clock used as SAI2 clock source */ #define LL_RCC_SAI2_CLKSOURCE_PIN (RCC_CCIPR_SAI2SEL | (RCC_CCIPR_SAI2SEL >> 16U)) /*!< External input clock used as SAI2 clock source */ -#endif /* RCC_CCIPR_SAI2SEL *//** +#endif /* RCC_CCIPR2_SAI2SEL */ +/** * @} */ +#if defined(RCC_CCIPR2_SDMMCSEL) +/** @defgroup RCC_LL_EC_SDMMC1_KERNELCLKSOURCE Peripheral SDMMC kernel clock source selection + * @{ + */ +#define LL_RCC_SDMMC1_KERNELCLKSOURCE_48CLK 0x00000000U /*!< 48MHz clock from internal multiplexor used as SDMMC1 clock source */ +#define LL_RCC_SDMMC1_KERNELCLKSOURCE_PLLP RCC_CCIPR2_SDMMCSEL /*!< PLLSAI3CLK clock used as SDMMC1 clock source */ +/** + * @} + */ +#endif /* RCC_CCIPR2_SDMMCSEL */ + /** @defgroup RCC_LL_EC_SDMMC1_CLKSOURCE Peripheral SDMMC clock source selection * @{ */ @@ -559,7 +586,7 @@ typedef struct */ #define LL_RCC_ADC_CLKSOURCE_NONE 0x00000000U /*!< No clock used as ADC clock source */ #define LL_RCC_ADC_CLKSOURCE_PLLSAI1 RCC_CCIPR_ADCSEL_0 /*!< PLLSAI1 clock used as ADC clock source */ -#if defined(RCC_PLLSAI2_SUPPORT) +#if defined(RCC_PLLSAI2_SUPPORT) && !defined(LTDC) #define LL_RCC_ADC_CLKSOURCE_PLLSAI2 RCC_CCIPR_ADCSEL_1 /*!< PLLSAI2 clock used as ADC clock source */ #endif /* RCC_PLLSAI2_SUPPORT */ #define LL_RCC_ADC_CLKSOURCE_SYSCLK RCC_CCIPR_ADCSEL /*!< SYSCLK clock used as ADC clock source */ @@ -579,16 +606,69 @@ typedef struct #endif /* SWPMI1 */ #if defined(DFSDM1_Channel0) +#if defined(RCC_CCIPR2_ADFSDM1SEL) +/** @defgroup RCC_LL_EC_DFSDM1_AUDIO_CLKSOURCE Peripheral DFSDM1 Audio clock source selection + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_SAI1 0x00000000U /*!< SAI1 clock used as DFSDM1 Audio clock */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_HSI RCC_CCIPR2_ADFSDM1SEL_0 /*!< HSI clock used as DFSDM1 Audio clock */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE_MSI RCC_CCIPR2_ADFSDM1SEL_1 /*!< MSI clock used as DFSDM1 Audio clock */ +/** + * @} + */ +#endif /* RCC_CCIPR2_ADFSDM1SEL */ + /** @defgroup RCC_LL_EC_DFSDM1_CLKSOURCE Peripheral DFSDM1 clock source selection * @{ */ +#if defined(RCC_CCIPR2_DFSDM1SEL) +#define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 used as DFSDM1 clock source */ +#define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK RCC_CCIPR2_DFSDM1SEL /*!< SYSCLK used as DFSDM1 clock source */ +#else #define LL_RCC_DFSDM1_CLKSOURCE_PCLK2 0x00000000U /*!< PCLK2 used as DFSDM1 clock source */ #define LL_RCC_DFSDM1_CLKSOURCE_SYSCLK RCC_CCIPR_DFSDM1SEL /*!< SYSCLK used as DFSDM1 clock source */ +#endif /* RCC_CCIPR2_DFSDM1SEL */ /** * @} */ #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI_CLKSOURCE Peripheral DSI clock source selection + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE_PHY 0x00000000U /*!< DSI-PHY clock used as DSI byte lane clock source */ +#define LL_RCC_DSI_CLKSOURCE_PLL RCC_CCIPR2_DSISEL /*!< PLL clock used as DSI byte lane clock source */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(LTDC) +/** @defgroup RCC_LL_EC_LTDC_CLKSOURCE Peripheral LTDC clock source selection + * @{ + */ +#define LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV2 0x00000000U /*!< PLLSAI2DIVR divided by 2 used as LTDC clock source */ +#define LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV4 RCC_CCIPR2_PLLSAI2DIVR_0 /*!< PLLSAI2DIVR divided by 4 used as LTDC clock source */ +#define LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV8 RCC_CCIPR2_PLLSAI2DIVR_1 /*!< PLLSAI2DIVR divided by 8 used as LTDC clock source */ +#define LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV16 RCC_CCIPR2_PLLSAI2DIVR /*!< PLLSAI2DIVR divided by 16 used as LTDC clock source */ +/** + * @} + */ +#endif /* LTDC */ + +#if defined(OCTOSPI1) +/** @defgroup RCC_LL_EC_OCTOSPI Peripheral OCTOSPI get clock source + * @{ + */ +#define LL_RCC_OCTOSPI_CLKSOURCE_SYSCLK 0x00000000U /*!< SYSCLK used as OctoSPI clock source */ +#define LL_RCC_OCTOSPI_CLKSOURCE_MSI RCC_CCIPR2_OSPISEL_0 /*!< MSI used as OctoSPI clock source */ +#define LL_RCC_OCTOSPI_CLKSOURCE_PLL RCC_CCIPR2_OSPISEL_1 /*!< PLL used as OctoSPI clock source */ +/** + * @} + */ +#endif /* OCTOSPI1 */ + /** @defgroup RCC_LL_EC_USART1 Peripheral USART get clock source * @{ */ @@ -651,14 +731,30 @@ typedef struct /** @defgroup RCC_LL_EC_SAI1 Peripheral SAI get clock source * @{ */ +#if defined(RCC_CCIPR2_SAI1SEL) +#define LL_RCC_SAI1_CLKSOURCE RCC_CCIPR2_SAI1SEL /*!< SAI1 Clock source selection */ +#else #define LL_RCC_SAI1_CLKSOURCE RCC_CCIPR_SAI1SEL /*!< SAI1 Clock source selection */ -#if defined(RCC_CCIPR_SAI2SEL) +#endif /* RCC_CCIPR2_SAI1SEL */ +#if defined(RCC_CCIPR2_SAI2SEL) +#define LL_RCC_SAI2_CLKSOURCE RCC_CCIPR2_SAI2SEL /*!< SAI2 Clock source selection */ +#elif defined(RCC_CCIPR_SAI2SEL) #define LL_RCC_SAI2_CLKSOURCE RCC_CCIPR_SAI2SEL /*!< SAI2 Clock source selection */ -#endif /* RCC_CCIPR_SAI2SEL */ +#endif /* RCC_CCIPR2_SAI2SEL */ /** * @} */ +#if defined(RCC_CCIPR2_SDMMCSEL) +/** @defgroup RCC_LL_EC_SDMMC1_KERNEL Peripheral SDMMC get kernel clock source + * @{ + */ +#define LL_RCC_SDMMC1_KERNELCLKSOURCE RCC_CCIPR2_SDMMCSEL /*!< SDMMC1 Kernel Clock source selection */ +/** + * @} + */ +#endif /* RCC_CCIPR2_SDMMCSEL */ + /** @defgroup RCC_LL_EC_SDMMC1 Peripheral SDMMC get clock source * @{ */ @@ -704,15 +800,60 @@ typedef struct #endif /* SWPMI1 */ #if defined(DFSDM1_Channel0) +#if defined(RCC_CCIPR2_ADFSDM1SEL) +/** @defgroup RCC_LL_EC_DFSDM1_AUDIO Peripheral DFSDM1 Audio get clock source + * @{ + */ +#define LL_RCC_DFSDM1_AUDIO_CLKSOURCE RCC_CCIPR2_ADFSDM1SEL /* DFSDM1 Audio Clock source selection */ +/** + * @} + */ + +#endif /* RCC_CCIPR2_ADFSDM1SEL */ /** @defgroup RCC_LL_EC_DFSDM1 Peripheral DFSDM1 get clock source * @{ */ +#if defined(RCC_CCIPR2_DFSDM1SEL) +#define LL_RCC_DFSDM1_CLKSOURCE RCC_CCIPR2_DFSDM1SEL /*!< DFSDM1 Clock source selection */ +#else #define LL_RCC_DFSDM1_CLKSOURCE RCC_CCIPR_DFSDM1SEL /*!< DFSDM1 Clock source selection */ +#endif /* RCC_CCIPR2_DFSDM1SEL */ /** * @} */ #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +/** @defgroup RCC_LL_EC_DSI Peripheral DSI get clock source + * @{ + */ +#define LL_RCC_DSI_CLKSOURCE RCC_CCIPR2_DSISEL /*!< DSI Clock source selection */ +/** + * @} + */ +#endif /* DSI */ + +#if defined(LTDC) +/** @defgroup RCC_LL_EC_LTDC Peripheral LTDC get clock source + * @{ + */ +#define LL_RCC_LTDC_CLKSOURCE RCC_CCIPR2_PLLSAI2DIVR /*!< LTDC Clock source selection */ +/** + * @} + */ +#endif /* LTDC */ + +#if defined(OCTOSPI1) +/** @defgroup RCC_LL_EC_OCTOSPI Peripheral OCTOSPI get clock source + * @{ + */ +#define LL_RCC_OCTOSPI_CLKSOURCE RCC_CCIPR2_OSPISEL /*!< OctoSPI Clock source selection */ +/** + * @} + */ +#endif /* OCTOSPI1 */ + + /** @defgroup RCC_LL_EC_RTC_CLKSOURCE RTC clock source selection * @{ */ @@ -724,6 +865,7 @@ typedef struct * @} */ + /** @defgroup RCC_LL_EC_PLLSOURCE PLL, PLLSAI1 and PLLSAI2 entry clock source * @{ */ @@ -735,17 +877,27 @@ typedef struct * @} */ -/** @defgroup RCC_LL_EC_PLLM_DIV PLL, PLLSAI1 and PLLSAI2 division factor +/** @defgroup RCC_LL_EC_PLLM_DIV PLL division factor * @{ */ -#define LL_RCC_PLLM_DIV_1 0x00000000U /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 1 */ -#define LL_RCC_PLLM_DIV_2 (RCC_PLLCFGR_PLLM_0) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 2 */ -#define LL_RCC_PLLM_DIV_3 (RCC_PLLCFGR_PLLM_1) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 3 */ -#define LL_RCC_PLLM_DIV_4 ((RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 4 */ -#define LL_RCC_PLLM_DIV_5 (RCC_PLLCFGR_PLLM_2) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 5 */ -#define LL_RCC_PLLM_DIV_6 ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 6 */ -#define LL_RCC_PLLM_DIV_7 ((RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1)) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 7 */ -#define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM) /*!< PLL, PLLSAI1 and PLLSAI2 division factor by 8 */ +#define LL_RCC_PLLM_DIV_1 0x00000000U /*!< Main PLL division factor for PLLM input by 1 */ +#define LL_RCC_PLLM_DIV_2 (RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 2 */ +#define LL_RCC_PLLM_DIV_3 (RCC_PLLCFGR_PLLM_1) /*!< Main PLL division factor for PLLM input by 3 */ +#define LL_RCC_PLLM_DIV_4 (RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 4 */ +#define LL_RCC_PLLM_DIV_5 (RCC_PLLCFGR_PLLM_2) /*!< Main PLL division factor for PLLM input by 5 */ +#define LL_RCC_PLLM_DIV_6 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 6 */ +#define LL_RCC_PLLM_DIV_7 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< Main PLL division factor for PLLM input by 7 */ +#define LL_RCC_PLLM_DIV_8 (RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 8 */ +#if defined(RCC_PLLM_DIV_1_16_SUPPORT) +#define LL_RCC_PLLM_DIV_9 (RCC_PLLCFGR_PLLM_3) /*!< Main PLL division factor for PLLM input by 9 */ +#define LL_RCC_PLLM_DIV_10 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 10 */ +#define LL_RCC_PLLM_DIV_11 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1) /*!< Main PLL division factor for PLLM input by 11 */ +#define LL_RCC_PLLM_DIV_12 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 12 */ +#define LL_RCC_PLLM_DIV_13 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2) /*!< Main PLL division factor for PLLM input by 13 */ +#define LL_RCC_PLLM_DIV_14 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 14 */ +#define LL_RCC_PLLM_DIV_15 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1) /*!< Main PLL division factor for PLLM input by 15 */ +#define LL_RCC_PLLM_DIV_16 (RCC_PLLCFGR_PLLM_3 | RCC_PLLCFGR_PLLM_2 | RCC_PLLCFGR_PLLM_1 | RCC_PLLCFGR_PLLM_0) /*!< Main PLL division factor for PLLM input by 16 */ +#endif /* RCC_PLLM_DIV_1_16_SUPPORT */ /** * @} */ @@ -766,35 +918,35 @@ typedef struct */ #if defined(RCC_PLLP_DIV_2_31_SUPPORT) #define LL_RCC_PLLP_DIV_2 (RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 2 */ -#define LL_RCC_PLLP_DIV_3 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 3 */ +#define LL_RCC_PLLP_DIV_3 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 3 */ #define LL_RCC_PLLP_DIV_4 (RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 4 */ -#define LL_RCC_PLLP_DIV_5 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 5 */ -#define LL_RCC_PLLP_DIV_6 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 6 */ -#define LL_RCC_PLLP_DIV_7 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 7 */ +#define LL_RCC_PLLP_DIV_5 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 5 */ +#define LL_RCC_PLLP_DIV_6 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 6 */ +#define LL_RCC_PLLP_DIV_7 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 7 */ #define LL_RCC_PLLP_DIV_8 (RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 8 */ -#define LL_RCC_PLLP_DIV_9 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 9 */ -#define LL_RCC_PLLP_DIV_10 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 10 */ -#define LL_RCC_PLLP_DIV_11 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3)) /*!< Main PLL division factor for PLLP output by 11 */ -#define LL_RCC_PLLP_DIV_12 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 12 */ -#define LL_RCC_PLLP_DIV_13 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 13 */ -#define LL_RCC_PLLP_DIV_14 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 14 */ -#define LL_RCC_PLLP_DIV_15 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 15 */ +#define LL_RCC_PLLP_DIV_9 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 9 */ +#define LL_RCC_PLLP_DIV_10 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 10 */ +#define LL_RCC_PLLP_DIV_11 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 11 */ +#define LL_RCC_PLLP_DIV_12 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 12 */ +#define LL_RCC_PLLP_DIV_13 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 13 */ +#define LL_RCC_PLLP_DIV_14 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 14 */ +#define LL_RCC_PLLP_DIV_15 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 15 */ #define LL_RCC_PLLP_DIV_16 (RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 16 */ -#define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 17 */ -#define LL_RCC_PLLP_DIV_18 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 18 */ -#define LL_RCC_PLLP_DIV_19 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_4)) /*!< Main PLL division factor for PLLP output by 19 */ -#define LL_RCC_PLLP_DIV_20 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 20 */ -#define LL_RCC_PLLP_DIV_21 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 21 */ -#define LL_RCC_PLLP_DIV_22 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 22 */ -#define LL_RCC_PLLP_DIV_23 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 23 */ -#define LL_RCC_PLLP_DIV_24 (RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 24 */ -#define LL_RCC_PLLP_DIV_25 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 25 */ -#define LL_RCC_PLLP_DIV_26 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 26 */ -#define LL_RCC_PLLP_DIV_27 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 27 */ -#define LL_RCC_PLLP_DIV_28 (RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 28 */ -#define LL_RCC_PLLP_DIV_29 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 29 */ -#define LL_RCC_PLLP_DIV_30 (RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 30 */ -#define LL_RCC_PLLP_DIV_31 (RCC_PLLCFGR_PLLPDIV_0|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_4) /*!< Main PLL division factor for PLLP output by 31 */ +#define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 17 */ +#define LL_RCC_PLLP_DIV_18 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 18 */ +#define LL_RCC_PLLP_DIV_19 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 19 */ +#define LL_RCC_PLLP_DIV_20 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 20 */ +#define LL_RCC_PLLP_DIV_21 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 21 */ +#define LL_RCC_PLLP_DIV_22 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 22 */ +#define LL_RCC_PLLP_DIV_23 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 23 */ +#define LL_RCC_PLLP_DIV_24 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3) /*!< Main PLL division factor for PLLP output by 24 */ +#define LL_RCC_PLLP_DIV_25 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 25 */ +#define LL_RCC_PLLP_DIV_26 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 26 */ +#define LL_RCC_PLLP_DIV_27 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 27 */ +#define LL_RCC_PLLP_DIV_28 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2) /*!< Main PLL division factor for PLLP output by 28 */ +#define LL_RCC_PLLP_DIV_29 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 29 */ +#define LL_RCC_PLLP_DIV_30 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1) /*!< Main PLL division factor for PLLP output by 30 */ +#define LL_RCC_PLLP_DIV_31 (RCC_PLLCFGR_PLLPDIV_4|RCC_PLLCFGR_PLLPDIV_3|RCC_PLLCFGR_PLLPDIV_2|RCC_PLLCFGR_PLLPDIV_1|RCC_PLLCFGR_PLLPDIV_0) /*!< Main PLL division factor for PLLP output by 31 */ #else #define LL_RCC_PLLP_DIV_7 0x00000000U /*!< Main PLL division factor for PLLP output by 7 */ #define LL_RCC_PLLP_DIV_17 (RCC_PLLCFGR_PLLP) /*!< Main PLL division factor for PLLP output by 17 */ @@ -814,6 +966,31 @@ typedef struct * @} */ +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** @defgroup RCC_LL_EC_PLLSAI1M PLLSAI1 division factor (PLLSAI1M) + * @{ + */ +#define LL_RCC_PLLSAI1M_DIV_1 0x00000000U /*!< PLLSAI1 division factor for PLLSAI1M input by 1 */ +#define LL_RCC_PLLSAI1M_DIV_2 (RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 2 */ +#define LL_RCC_PLLSAI1M_DIV_3 (RCC_PLLSAI1CFGR_PLLSAI1M_1) /*!< PLLSAI1 division factor for PLLSAI1M input by 3 */ +#define LL_RCC_PLLSAI1M_DIV_4 (RCC_PLLSAI1CFGR_PLLSAI1M_1|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 4 */ +#define LL_RCC_PLLSAI1M_DIV_5 (RCC_PLLSAI1CFGR_PLLSAI1M_2) /*!< PLLSAI1 division factor for PLLSAI1M input by 5 */ +#define LL_RCC_PLLSAI1M_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 6 */ +#define LL_RCC_PLLSAI1M_DIV_7 (RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_1) /*!< PLLSAI1 division factor for PLLSAI1M input by 7 */ +#define LL_RCC_PLLSAI1M_DIV_8 (RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_1|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 8 */ +#define LL_RCC_PLLSAI1M_DIV_9 (RCC_PLLSAI1CFGR_PLLSAI1M_3) /*!< PLLSAI1 division factor for PLLSAI1M input by 9 */ +#define LL_RCC_PLLSAI1M_DIV_10 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 10 */ +#define LL_RCC_PLLSAI1M_DIV_11 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_1) /*!< PLLSAI1 division factor for PLLSAI1M input by 11 */ +#define LL_RCC_PLLSAI1M_DIV_12 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_1|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 12 */ +#define LL_RCC_PLLSAI1M_DIV_13 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_2) /*!< PLLSAI1 division factor for PLLSAI1M input by 13 */ +#define LL_RCC_PLLSAI1M_DIV_14 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 14 */ +#define LL_RCC_PLLSAI1M_DIV_15 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_1) /*!< PLLSAI1 division factor for PLLSAI1M input by 15 */ +#define LL_RCC_PLLSAI1M_DIV_16 (RCC_PLLSAI1CFGR_PLLSAI1M_3|RCC_PLLSAI1CFGR_PLLSAI1M_2|RCC_PLLSAI1CFGR_PLLSAI1M_1|RCC_PLLSAI1CFGR_PLLSAI1M_0) /*!< PLLSAI1 division factor for PLLSAI1M input by 16 */ +/** + * @} + */ +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + /** @defgroup RCC_LL_EC_PLLSAI1Q PLLSAI1 division factor (PLLSAI1Q) * @{ */ @@ -830,35 +1007,35 @@ typedef struct */ #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) #define LL_RCC_PLLSAI1P_DIV_2 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 2 */ -#define LL_RCC_PLLSAI1P_DIV_3 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 3 */ +#define LL_RCC_PLLSAI1P_DIV_3 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 3 */ #define LL_RCC_PLLSAI1P_DIV_4 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 4 */ -#define LL_RCC_PLLSAI1P_DIV_5 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 5 */ -#define LL_RCC_PLLSAI1P_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 6 */ -#define LL_RCC_PLLSAI1P_DIV_7 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 7 */ +#define LL_RCC_PLLSAI1P_DIV_5 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 5 */ +#define LL_RCC_PLLSAI1P_DIV_6 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 6 */ +#define LL_RCC_PLLSAI1P_DIV_7 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 7 */ #define LL_RCC_PLLSAI1P_DIV_8 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 8 */ -#define LL_RCC_PLLSAI1P_DIV_9 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 9 */ -#define LL_RCC_PLLSAI1P_DIV_10 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 10 */ -#define LL_RCC_PLLSAI1P_DIV_11 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3)) /*!< PLLSAI1 division factor for PLLSAI1P output by 1 */ -#define LL_RCC_PLLSAI1P_DIV_12 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 12 */ -#define LL_RCC_PLLSAI1P_DIV_13 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 13 */ -#define LL_RCC_PLLSAI1P_DIV_14 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 14 */ -#define LL_RCC_PLLSAI1P_DIV_15 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 15 */ +#define LL_RCC_PLLSAI1P_DIV_9 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 9 */ +#define LL_RCC_PLLSAI1P_DIV_10 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 10 */ +#define LL_RCC_PLLSAI1P_DIV_11 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 1 */ +#define LL_RCC_PLLSAI1P_DIV_12 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 12 */ +#define LL_RCC_PLLSAI1P_DIV_13 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 13 */ +#define LL_RCC_PLLSAI1P_DIV_14 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 14 */ +#define LL_RCC_PLLSAI1P_DIV_15 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 15 */ #define LL_RCC_PLLSAI1P_DIV_16 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 16 */ -#define LL_RCC_PLLSAI1P_DIV_17 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 17 */ -#define LL_RCC_PLLSAI1P_DIV_18 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 18 */ -#define LL_RCC_PLLSAI1P_DIV_19 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4)) /*!< PLLSAI1 division factor for PLLSAI1P output by 19 */ -#define LL_RCC_PLLSAI1P_DIV_20 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 20 */ -#define LL_RCC_PLLSAI1P_DIV_21 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division fctor for PLLSAI1P output by 21 */ -#define LL_RCC_PLLSAI1P_DIV_22 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 22 */ -#define LL_RCC_PLLSAI1P_DIV_23 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 23 */ -#define LL_RCC_PLLSAI1P_DIV_24 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 24 */ -#define LL_RCC_PLLSAI1P_DIV_25 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 25 */ -#define LL_RCC_PLLSAI1P_DIV_26 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 26 */ -#define LL_RCC_PLLSAI1P_DIV_27 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 27 */ -#define LL_RCC_PLLSAI1P_DIV_28 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 28 */ -#define LL_RCC_PLLSAI1P_DIV_29 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 29 */ -#define LL_RCC_PLLSAI1P_DIV_30 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 30 */ -#define LL_RCC_PLLSAI1P_DIV_31 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_0|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_4) /*!< PLLSAI1 division factor for PLLSAI1P output by 31 */ +#define LL_RCC_PLLSAI1P_DIV_17 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 17 */ +#define LL_RCC_PLLSAI1P_DIV_18 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 18 */ +#define LL_RCC_PLLSAI1P_DIV_19 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 19 */ +#define LL_RCC_PLLSAI1P_DIV_20 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 20 */ +#define LL_RCC_PLLSAI1P_DIV_21 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division fctor for PLLSAI1P output by 21 */ +#define LL_RCC_PLLSAI1P_DIV_22 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 22 */ +#define LL_RCC_PLLSAI1P_DIV_23 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 23 */ +#define LL_RCC_PLLSAI1P_DIV_24 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3) /*!< PLLSAI1 division factor for PLLSAI1P output by 24 */ +#define LL_RCC_PLLSAI1P_DIV_25 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 25 */ +#define LL_RCC_PLLSAI1P_DIV_26 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 26 */ +#define LL_RCC_PLLSAI1P_DIV_27 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 27 */ +#define LL_RCC_PLLSAI1P_DIV_28 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2) /*!< PLLSAI1 division factor for PLLSAI1P output by 28 */ +#define LL_RCC_PLLSAI1P_DIV_29 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 29 */ +#define LL_RCC_PLLSAI1P_DIV_30 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1) /*!< PLLSAI1 division factor for PLLSAI1P output by 30 */ +#define LL_RCC_PLLSAI1P_DIV_31 (RCC_PLLSAI1CFGR_PLLSAI1PDIV_4|RCC_PLLSAI1CFGR_PLLSAI1PDIV_3|RCC_PLLSAI1CFGR_PLLSAI1PDIV_2|RCC_PLLSAI1CFGR_PLLSAI1PDIV_1|RCC_PLLSAI1CFGR_PLLSAI1PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 31 */ #else #define LL_RCC_PLLSAI1P_DIV_7 0x00000000U /*!< PLLSAI1 division factor for PLLSAI1P output by 7 */ #define LL_RCC_PLLSAI1P_DIV_17 (RCC_PLLSAI1CFGR_PLLSAI1P) /*!< PLLSAI1 division factor for PLLSAI1P output by 17 */ @@ -879,11 +1056,82 @@ typedef struct */ #if defined(RCC_PLLSAI2_SUPPORT) +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) +/** @defgroup RCC_LL_EC_PLLSAI2M PLLSAI1 division factor (PLLSAI2M) + * @{ + */ +#define LL_RCC_PLLSAI2M_DIV_1 0x00000000U /*!< PLLSAI2 division factor for PLLSAI2M input by 1 */ +#define LL_RCC_PLLSAI2M_DIV_2 (RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 2 */ +#define LL_RCC_PLLSAI2M_DIV_3 (RCC_PLLSAI2CFGR_PLLSAI2M_1) /*!< PLLSAI2 division factor for PLLSAI2M input by 3 */ +#define LL_RCC_PLLSAI2M_DIV_4 (RCC_PLLSAI2CFGR_PLLSAI2M_1|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 4 */ +#define LL_RCC_PLLSAI2M_DIV_5 (RCC_PLLSAI2CFGR_PLLSAI2M_2) /*!< PLLSAI2 division factor for PLLSAI2M input by 5 */ +#define LL_RCC_PLLSAI2M_DIV_6 (RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 6 */ +#define LL_RCC_PLLSAI2M_DIV_7 (RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_1) /*!< PLLSAI2 division factor for PLLSAI2M input by 7 */ +#define LL_RCC_PLLSAI2M_DIV_8 (RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_1|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 8 */ +#define LL_RCC_PLLSAI2M_DIV_9 (RCC_PLLSAI2CFGR_PLLSAI2M_3) /*!< PLLSAI2 division factor for PLLSAI2M input by 9 */ +#define LL_RCC_PLLSAI2M_DIV_10 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 10 */ +#define LL_RCC_PLLSAI2M_DIV_11 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_1) /*!< PLLSAI2 division factor for PLLSAI2M input by 11 */ +#define LL_RCC_PLLSAI2M_DIV_12 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_1|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 12 */ +#define LL_RCC_PLLSAI2M_DIV_13 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_2) /*!< PLLSAI2 division factor for PLLSAI2M input by 13 */ +#define LL_RCC_PLLSAI2M_DIV_14 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 14 */ +#define LL_RCC_PLLSAI2M_DIV_15 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_1) /*!< PLLSAI2 division factor for PLLSAI2M input by 15 */ +#define LL_RCC_PLLSAI2M_DIV_16 (RCC_PLLSAI2CFGR_PLLSAI2M_3|RCC_PLLSAI2CFGR_PLLSAI2M_2|RCC_PLLSAI2CFGR_PLLSAI2M_1|RCC_PLLSAI2CFGR_PLLSAI2M_0) /*!< PLLSAI2 division factor for PLLSAI2M input by 16 */ +/** + * @} + */ +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ + +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) +/** @defgroup RCC_LL_EC_PLLSAI2Q PLLSAI2 division factor (PLLSAI2Q) + * @{ + */ +#define LL_RCC_PLLSAI2Q_DIV_2 0x00000000U /*!< PLLSAI2 division factor for PLLSAI2Q output by 2 */ +#define LL_RCC_PLLSAI2Q_DIV_4 (RCC_PLLSAI2CFGR_PLLSAI2Q_0) /*!< PLLSAI2 division factor for PLLSAI2Q output by 4 */ +#define LL_RCC_PLLSAI2Q_DIV_6 (RCC_PLLSAI2CFGR_PLLSAI2Q_1) /*!< PLLSAI2 division factor for PLLSAI2Q output by 6 */ +#define LL_RCC_PLLSAI2Q_DIV_8 (RCC_PLLSAI2CFGR_PLLSAI2Q) /*!< PLLSAI2 division factor for PLLSAI2Q output by 8 */ +/** + * @} + */ +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ + /** @defgroup RCC_LL_EC_PLLSAI2P PLLSAI2 division factor (PLLSAI2P) * @{ */ +#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) +#define LL_RCC_PLLSAI2P_DIV_2 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 2 */ +#define LL_RCC_PLLSAI2P_DIV_3 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 3 */ +#define LL_RCC_PLLSAI2P_DIV_4 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_2) /*!< PLLSAI2 division factor for PLLSAI2P output by 4 */ +#define LL_RCC_PLLSAI2P_DIV_5 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 5 */ +#define LL_RCC_PLLSAI2P_DIV_6 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 6 */ +#define LL_RCC_PLLSAI2P_DIV_7 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 7 */ +#define LL_RCC_PLLSAI2P_DIV_8 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3) /*!< PLLSAI2 division factor for PLLSAI2P output by 8 */ +#define LL_RCC_PLLSAI2P_DIV_9 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 9 */ +#define LL_RCC_PLLSAI2P_DIV_10 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 10 */ +#define LL_RCC_PLLSAI2P_DIV_11 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 1 */ +#define LL_RCC_PLLSAI2P_DIV_12 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2) /*!< PLLSAI2 division factor for PLLSAI2P output by 12 */ +#define LL_RCC_PLLSAI2P_DIV_13 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 13 */ +#define LL_RCC_PLLSAI2P_DIV_14 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 14 */ +#define LL_RCC_PLLSAI2P_DIV_15 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 15 */ +#define LL_RCC_PLLSAI2P_DIV_16 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4) /*!< PLLSAI2 division factor for PLLSAI2P output by 16 */ +#define LL_RCC_PLLSAI2P_DIV_17 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 17 */ +#define LL_RCC_PLLSAI2P_DIV_18 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 18 */ +#define LL_RCC_PLLSAI2P_DIV_19 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 19 */ +#define LL_RCC_PLLSAI2P_DIV_20 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2) /*!< PLLSAI2 division factor for PLLSAI2P output by 20 */ +#define LL_RCC_PLLSAI2P_DIV_21 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division fctor for PLLSAI2P output by 21 */ +#define LL_RCC_PLLSAI2P_DIV_22 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 22 */ +#define LL_RCC_PLLSAI2P_DIV_23 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 23 */ +#define LL_RCC_PLLSAI2P_DIV_24 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3) /*!< PLLSAI2 division factor for PLLSAI2P output by 24 */ +#define LL_RCC_PLLSAI2P_DIV_25 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 25 */ +#define LL_RCC_PLLSAI2P_DIV_26 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 26 */ +#define LL_RCC_PLLSAI2P_DIV_27 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 27 */ +#define LL_RCC_PLLSAI2P_DIV_28 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2) /*!< PLLSAI2 division factor for PLLSAI2P output by 28 */ +#define LL_RCC_PLLSAI2P_DIV_29 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI2 division factor for PLLSAI2P output by 29 */ +#define LL_RCC_PLLSAI2P_DIV_30 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1) /*!< PLLSAI2 division factor for PLLSAI2P output by 30 */ +#define LL_RCC_PLLSAI2P_DIV_31 (RCC_PLLSAI2CFGR_PLLSAI2PDIV_4|RCC_PLLSAI2CFGR_PLLSAI2PDIV_3|RCC_PLLSAI2CFGR_PLLSAI2PDIV_2|RCC_PLLSAI2CFGR_PLLSAI2PDIV_1|RCC_PLLSAI2CFGR_PLLSAI2PDIV_0) /*!< PLLSAI1 division factor for PLLSAI1P output by 31 */ +#else #define LL_RCC_PLLSAI2P_DIV_7 0x00000000U /*!< PLLSAI2 division factor for PLLSAI2P output by 7 */ #define LL_RCC_PLLSAI2P_DIV_17 (RCC_PLLSAI2CFGR_PLLSAI2P) /*!< PLLSAI2 division factor for PLLSAI2P output by 17 */ +#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ /** * @} */ @@ -898,6 +1146,19 @@ typedef struct /** * @} */ + +#if defined(RCC_CCIPR2_PLLSAI2DIVR) +/** @defgroup RCC_LL_EC_PLLSAI2DIVR PLLSAI2DIVR division factor (PLLSAI2DIVR) + * @{ + */ +#define LL_RCC_PLLSAI2DIVR_DIV_2 0x00000000U /*!< PLLSAI2 division factor for PLLSAI2DIVR output by 2 */ +#define LL_RCC_PLLSAI2DIVR_DIV_4 RCC_CCIPR2_PLLSAI2DIVR_0 /*!< PLLSAI2 division factor for PLLSAI2DIVR output by 4 */ +#define LL_RCC_PLLSAI2DIVR_DIV_8 RCC_CCIPR2_PLLSAI2DIVR_1 /*!< PLLSAI2 division factor for PLLSAI2DIVR output by 8 */ +#define LL_RCC_PLLSAI2DIVR_DIV_16 (RCC_CCIPR2_PLLSAI2DIVR_1 | RCC_CCIPR2_PLLSAI2DIVR_0) /*!< PLLSAI2 division factor for PLLSAI2DIVR output by 16 */ +/** + * @} + */ +#endif /* RCC_CCIPR2_PLLSAI2DIVR */ #endif /* RCC_PLLSAI2_SUPPORT */ /** @defgroup RCC_LL_EC_MSIRANGESEL MSI clock range selection @@ -974,6 +1235,16 @@ typedef struct * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param __PLLN__ Between 8 and 86 * @param __PLLR__ This parameter can be one of the following values: * @arg @ref LL_RCC_PLLR_DIV_2 @@ -1000,6 +1271,16 @@ typedef struct * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param __PLLN__ Between 8 and 86 * @param __PLLP__ This parameter can be one of the following values: * @arg @ref LL_RCC_PLLP_DIV_2 @@ -1035,7 +1316,7 @@ typedef struct * @retval PLL clock frequency (in Hz) */ #define __LL_RCC_CALC_PLLCLK_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLP__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLN__) / \ - ((__PLLP__) >> RCC_PLLCFGR_PLLP_Pos)) + ((__PLLP__) >> RCC_PLLCFGR_PLLPDIV_Pos)) #else /** @@ -1062,6 +1343,7 @@ typedef struct (((__PLLP__) == LL_RCC_PLLP_DIV_7) ? 7U : 17U)) #endif /* RCC_PLLP_DIV_2_31_SUPPORT */ + /** * @brief Helper macro to calculate the PLLCLK frequency used on 48M domain * @note ex: @ref __LL_RCC_CALC_PLLCLK_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1076,6 +1358,16 @@ typedef struct * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param __PLLN__ Between 8 and 86 * @param __PLLQ__ This parameter can be one of the following values: * @arg @ref LL_RCC_PLLQ_DIV_2 @@ -1087,7 +1379,68 @@ typedef struct #define __LL_RCC_CALC_PLLCLK_48M_FREQ(__INPUTFREQ__, __PLLM__, __PLLN__, __PLLQ__) ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLN__) / \ ((((__PLLQ__) >> RCC_PLLCFGR_PLLQ_Pos) + 1U) << 1U)) -#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) && defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI1 frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI1_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI1_GetDivider (), + * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) + * @param __PLLSAI1M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param __PLLSAI1N__ Between 8 and 86 + * @param __PLLSAI1P__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1P_DIV_2 + * @arg @ref LL_RCC_PLLSAI1P_DIV_3 + * @arg @ref LL_RCC_PLLSAI1P_DIV_4 + * @arg @ref LL_RCC_PLLSAI1P_DIV_5 + * @arg @ref LL_RCC_PLLSAI1P_DIV_6 + * @arg @ref LL_RCC_PLLSAI1P_DIV_7 + * @arg @ref LL_RCC_PLLSAI1P_DIV_8 + * @arg @ref LL_RCC_PLLSAI1P_DIV_9 + * @arg @ref LL_RCC_PLLSAI1P_DIV_10 + * @arg @ref LL_RCC_PLLSAI1P_DIV_11 + * @arg @ref LL_RCC_PLLSAI1P_DIV_12 + * @arg @ref LL_RCC_PLLSAI1P_DIV_13 + * @arg @ref LL_RCC_PLLSAI1P_DIV_14 + * @arg @ref LL_RCC_PLLSAI1P_DIV_15 + * @arg @ref LL_RCC_PLLSAI1P_DIV_16 + * @arg @ref LL_RCC_PLLSAI1P_DIV_17 + * @arg @ref LL_RCC_PLLSAI1P_DIV_18 + * @arg @ref LL_RCC_PLLSAI1P_DIV_19 + * @arg @ref LL_RCC_PLLSAI1P_DIV_20 + * @arg @ref LL_RCC_PLLSAI1P_DIV_21 + * @arg @ref LL_RCC_PLLSAI1P_DIV_22 + * @arg @ref LL_RCC_PLLSAI1P_DIV_23 + * @arg @ref LL_RCC_PLLSAI1P_DIV_24 + * @arg @ref LL_RCC_PLLSAI1P_DIV_25 + * @arg @ref LL_RCC_PLLSAI1P_DIV_26 + * @arg @ref LL_RCC_PLLSAI1P_DIV_27 + * @arg @ref LL_RCC_PLLSAI1P_DIV_28 + * @arg @ref LL_RCC_PLLSAI1P_DIV_29 + * @arg @ref LL_RCC_PLLSAI1P_DIV_30 + * @arg @ref LL_RCC_PLLSAI1P_DIV_31 + * @retval PLLSAI1 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI1_SAI_FREQ(__INPUTFREQ__, __PLLSAI1M__, __PLLSAI1N__, __PLLSAI1P__) \ + ((__INPUTFREQ__) / ((((__PLLSAI1M__) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)) * (__PLLSAI1N__) / \ + ((__PLLSAI1P__) >> RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos)) + +#elif defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) /** * @brief Helper macro to calculate the PLLSAI1 frequency used for SAI domain * @note ex: @ref __LL_RCC_CALC_PLLSAI1_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1138,7 +1491,8 @@ typedef struct */ #define __LL_RCC_CALC_PLLSAI1_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1P__) \ ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI1N__) / \ - ((__PLLSAI1P__) >> RCC_PLLSAI1CFGR_PLLSAI1P_Pos)) + ((__PLLSAI1P__) >> RCC_PLLSAI1CFGR_PLLSAI1PDIV_Pos)) + #else /** * @brief Helper macro to calculate the PLLSAI1 frequency used for SAI domain @@ -1163,8 +1517,45 @@ typedef struct #define __LL_RCC_CALC_PLLSAI1_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI1N__, __PLLSAI1P__) \ ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI1N__) / \ (((__PLLSAI1P__) == LL_RCC_PLLSAI1P_DIV_7) ? 7U : 17U)) + #endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI1 frequency used on 48M domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI1_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI1_GetDivider (), + * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) + * @param __PLLSAI1M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param __PLLSAI1N__ Between 8 and 86 + * @param __PLLSAI1Q__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_4 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_6 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_8 + * @retval PLLSAI1 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI1_48M_FREQ(__INPUTFREQ__, __PLLSAI1M__, __PLLSAI1N__, __PLLSAI1Q__) \ + ((__INPUTFREQ__) / ((((__PLLSAI1M__) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)) * (__PLLSAI1N__) / \ + ((((__PLLSAI1Q__) >> RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) + 1U) << 1U)) + +#else /** * @brief Helper macro to calculate the PLLSAI1 frequency used on 48M domain * @note ex: @ref __LL_RCC_CALC_PLLSAI1_48M_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1191,6 +1582,44 @@ typedef struct ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI1N__) / \ ((((__PLLSAI1Q__) >> RCC_PLLSAI1CFGR_PLLSAI1Q_Pos) + 1U) << 1U)) +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI1 frequency used on ADC domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI1_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI1_GetDivider (), + * @ref LL_RCC_PLLSAI1_GetN (), @ref LL_RCC_PLLSAI1_GetR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) + * @param __PLLSAI1M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param __PLLSAI1N__ Between 8 and 86 + * @param __PLLSAI1R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1R_DIV_2 + * @arg @ref LL_RCC_PLLSAI1R_DIV_4 + * @arg @ref LL_RCC_PLLSAI1R_DIV_6 + * @arg @ref LL_RCC_PLLSAI1R_DIV_8 + * @retval PLLSAI1 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI1_ADC_FREQ(__INPUTFREQ__, __PLLSAI1M__, __PLLSAI1N__, __PLLSAI1R__) \ + ((__INPUTFREQ__) / ((((__PLLSAI1M__) >> RCC_PLLSAI1CFGR_PLLSAI1M_Pos) + 1U)) * (__PLLSAI1N__) / \ + ((((__PLLSAI1R__) >> RCC_PLLSAI1CFGR_PLLSAI1R_Pos) + 1U) << 1U)) + +#else /** * @brief Helper macro to calculate the PLLSAI1 frequency used on ADC domain * @note ex: @ref __LL_RCC_CALC_PLLSAI1_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1217,6 +1646,123 @@ typedef struct ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI1N__) / \ ((((__PLLSAI1R__) >> RCC_PLLSAI1CFGR_PLLSAI1R_Pos) + 1U) << 1U)) +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) && defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI2 frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI2_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI2_GetDivider (), + * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) + * @param __PLLSAI2M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param __PLLSAI2N__ Between 8 and 86 + * @param __PLLSAI2P__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2P_DIV_2 + * @arg @ref LL_RCC_PLLSAI2P_DIV_3 + * @arg @ref LL_RCC_PLLSAI2P_DIV_4 + * @arg @ref LL_RCC_PLLSAI2P_DIV_5 + * @arg @ref LL_RCC_PLLSAI2P_DIV_6 + * @arg @ref LL_RCC_PLLSAI2P_DIV_7 + * @arg @ref LL_RCC_PLLSAI2P_DIV_8 + * @arg @ref LL_RCC_PLLSAI2P_DIV_9 + * @arg @ref LL_RCC_PLLSAI2P_DIV_10 + * @arg @ref LL_RCC_PLLSAI2P_DIV_11 + * @arg @ref LL_RCC_PLLSAI2P_DIV_12 + * @arg @ref LL_RCC_PLLSAI2P_DIV_13 + * @arg @ref LL_RCC_PLLSAI2P_DIV_14 + * @arg @ref LL_RCC_PLLSAI2P_DIV_15 + * @arg @ref LL_RCC_PLLSAI2P_DIV_16 + * @arg @ref LL_RCC_PLLSAI2P_DIV_17 + * @arg @ref LL_RCC_PLLSAI2P_DIV_18 + * @arg @ref LL_RCC_PLLSAI2P_DIV_19 + * @arg @ref LL_RCC_PLLSAI2P_DIV_20 + * @arg @ref LL_RCC_PLLSAI2P_DIV_21 + * @arg @ref LL_RCC_PLLSAI2P_DIV_22 + * @arg @ref LL_RCC_PLLSAI2P_DIV_23 + * @arg @ref LL_RCC_PLLSAI2P_DIV_24 + * @arg @ref LL_RCC_PLLSAI2P_DIV_25 + * @arg @ref LL_RCC_PLLSAI2P_DIV_26 + * @arg @ref LL_RCC_PLLSAI2P_DIV_27 + * @arg @ref LL_RCC_PLLSAI2P_DIV_28 + * @arg @ref LL_RCC_PLLSAI2P_DIV_29 + * @arg @ref LL_RCC_PLLSAI2P_DIV_30 + * @arg @ref LL_RCC_PLLSAI2P_DIV_31 + * @retval PLLSAI2 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI2_SAI_FREQ(__INPUTFREQ__, __PLLSAI2M__, __PLLSAI2N__, __PLLSAI2P__) \ + ((__INPUTFREQ__) / ((((__PLLSAI2M__) >> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U)) * (__PLLSAI2N__) / \ + ((__PLLSAI2P__) >> RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos)) + +#elif defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) +/** + * @brief Helper macro to calculate the PLLSAI2 frequency used for SAI domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI2_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), + * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetP ()); + * @param __INPUTFREQ__ PLL Input frequency (based on MSI/HSE/HSI) + * @param __PLLM__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_1 + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @param __PLLSAI2N__ Between 8 and 86 + * @param __PLLSAI2P__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2P_DIV_2 + * @arg @ref LL_RCC_PLLSAI2P_DIV_3 + * @arg @ref LL_RCC_PLLSAI2P_DIV_4 + * @arg @ref LL_RCC_PLLSAI2P_DIV_5 + * @arg @ref LL_RCC_PLLSAI2P_DIV_6 + * @arg @ref LL_RCC_PLLSAI2P_DIV_7 + * @arg @ref LL_RCC_PLLSAI2P_DIV_8 + * @arg @ref LL_RCC_PLLSAI2P_DIV_9 + * @arg @ref LL_RCC_PLLSAI2P_DIV_10 + * @arg @ref LL_RCC_PLLSAI2P_DIV_11 + * @arg @ref LL_RCC_PLLSAI2P_DIV_12 + * @arg @ref LL_RCC_PLLSAI2P_DIV_13 + * @arg @ref LL_RCC_PLLSAI2P_DIV_14 + * @arg @ref LL_RCC_PLLSAI2P_DIV_15 + * @arg @ref LL_RCC_PLLSAI2P_DIV_16 + * @arg @ref LL_RCC_PLLSAI2P_DIV_17 + * @arg @ref LL_RCC_PLLSAI2P_DIV_18 + * @arg @ref LL_RCC_PLLSAI2P_DIV_19 + * @arg @ref LL_RCC_PLLSAI2P_DIV_20 + * @arg @ref LL_RCC_PLLSAI2P_DIV_21 + * @arg @ref LL_RCC_PLLSAI2P_DIV_22 + * @arg @ref LL_RCC_PLLSAI2P_DIV_23 + * @arg @ref LL_RCC_PLLSAI2P_DIV_24 + * @arg @ref LL_RCC_PLLSAI2P_DIV_25 + * @arg @ref LL_RCC_PLLSAI2P_DIV_26 + * @arg @ref LL_RCC_PLLSAI2P_DIV_27 + * @arg @ref LL_RCC_PLLSAI2P_DIV_28 + * @arg @ref LL_RCC_PLLSAI2P_DIV_29 + * @arg @ref LL_RCC_PLLSAI2P_DIV_30 + * @arg @ref LL_RCC_PLLSAI2P_DIV_31 + * @retval PLLSAI2 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI2_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI2N__, __PLLSAI2P__) \ + ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI2N__) / \ + ((__PLLSAI2P__) >> RCC_PLLSAI2CFGR_PLLSAI2PDIV_Pos)) + +#else /** * @brief Helper macro to calculate the PLLSAI2 frequency used for SAI domain * @note ex: @ref __LL_RCC_CALC_PLLSAI2_SAI_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1240,6 +1786,49 @@ typedef struct #define __LL_RCC_CALC_PLLSAI2_SAI_FREQ(__INPUTFREQ__, __PLLM__, __PLLSAI2N__, __PLLSAI2P__) \ ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1)) * (__PLLSAI2N__) / \ (((__PLLSAI2P__) == LL_RCC_PLLSAI2P_DIV_7) ? 7U : 17U)) + +#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ + +#if defined(LTDC) +/** + * @brief Helper macro to calculate the PLLSAI2 frequency used for LTDC domain + * @note ex: @ref __LL_RCC_CALC_PLLSAI2_LTDC_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI2_GetDivider (), + * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetR (), @ref LL_RCC_PLLSAI2_GetDIVR ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI/MSI) + * @param __PLLSAI2M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param __PLLSAI2N__ Between 8 and 86 + * @param __PLLSAI2R__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2R_DIV_2 + * @arg @ref LL_RCC_PLLSAI2R_DIV_4 + * @arg @ref LL_RCC_PLLSAI2R_DIV_6 + * @arg @ref LL_RCC_PLLSAI2R_DIV_8 + * @param __PLLSAI2DIVR__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_16 + * @retval PLLSAI2 clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI2_LTDC_FREQ(__INPUTFREQ__, __PLLSAI2M__, __PLLSAI2N__, __PLLSAI2R__, __PLLSAI2DIVR__) \ + (((__INPUTFREQ__) / (((__PLLSAI2M__)>> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U)) * (__PLLSAI2N__) / \ + (((((__PLLSAI2R__) >> RCC_PLLSAI2CFGR_PLLSAI2R_Pos ) + 1U) << 1U) * (aRCC_PLLSAI2DIVRPrescTable[(__PLLSAI2DIVR__) >> RCC_CCIPR2_PLLSAI2DIVR_Pos]))) +#else /** * @brief Helper macro to calculate the PLLSAI2 frequency used on ADC domain * @note ex: @ref __LL_RCC_CALC_PLLSAI2_ADC_FREQ (HSE_VALUE,@ref LL_RCC_PLL_GetDivider (), @@ -1266,6 +1855,45 @@ typedef struct ((__INPUTFREQ__) / ((((__PLLM__)>> RCC_PLLCFGR_PLLM_Pos) + 1U)) * (__PLLSAI2N__) / \ ((((__PLLSAI2R__) >> RCC_PLLSAI2CFGR_PLLSAI2R_Pos ) + 1U) << 1U)) +#endif /* LTDC */ + +#if defined(DSI) +/** + * @brief Helper macro to calculate the PLLDSICLK frequency used on DSI + * @note ex: @ref __LL_RCC_CALC_PLLSAI2_DSI_FREQ (HSE_VALUE,@ref LL_RCC_PLLSAI2_GetDivider (), + * @ref LL_RCC_PLLSAI2_GetN (), @ref LL_RCC_PLLSAI2_GetQ ()); + * @param __INPUTFREQ__ PLL Input frequency (based on HSE/HSI/MSI) + * @param __PLLSAI2M__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param __PLLSAI2N__ Between 8 and 86 + * @param __PLLSAI2Q__ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2Q_DIV_2 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_4 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_6 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_8 + * @retval PLL clock frequency (in Hz) + */ +#define __LL_RCC_CALC_PLLSAI2_DSI_FREQ(__INPUTFREQ__, __PLLSAI2M__, __PLLSAI2N__, __PLLSAI2Q__) \ + ((__INPUTFREQ__) / ((((__PLLSAI2M__) >> RCC_PLLSAI2CFGR_PLLSAI2M_Pos) + 1U)) * (__PLLSAI2N__) / \ + ((((__PLLSAI2Q__) >> RCC_PLLSAI2CFGR_PLLSAI2Q_Pos) + 1U) << 1U)) +#endif /* DSI */ + + /** * @brief Helper macro to calculate the HCLK frequency @@ -1295,7 +1923,7 @@ typedef struct * @arg @ref LL_RCC_APB1_DIV_16 * @retval PCLK1 clock frequency (in Hz) */ -#define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos]) +#define __LL_RCC_CALC_PCLK1_FREQ(__HCLKFREQ__, __APB1PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB1PRESCALER__) >> RCC_CFGR_PPRE1_Pos]) /** * @brief Helper macro to calculate the PCLK2 frequency (ABP2) @@ -1308,7 +1936,7 @@ typedef struct * @arg @ref LL_RCC_APB2_DIV_16 * @retval PCLK2 clock frequency (in Hz) */ -#define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> aRCC_APBAHBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos]) +#define __LL_RCC_CALC_PCLK2_FREQ(__HCLKFREQ__, __APB2PRESCALER__) ((__HCLKFREQ__) >> APBPrescTable[(__APB2PRESCALER__) >> RCC_CFGR_PPRE2_Pos]) /** * @brief Helper macro to calculate the MSI frequency (in Hz) @@ -1452,6 +2080,16 @@ __STATIC_INLINE void LL_RCC_HSI_DisableInStopMode(void) CLEAR_BIT(RCC->CR, RCC_CR_HSIKERON); } +/** + * @brief Check if HSI is enabled in stop mode + * @rmtoll CR HSIKERON LL_RCC_HSI_IsEnabledInStopMode + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RCC_HSI_IsEnabledInStopMode(void) +{ + return (READ_BIT(RCC->CR, RCC_CR_HSIKERON) == (RCC_CR_HSIKERON)); +} + /** * @brief Enable HSI oscillator * @rmtoll CR HSION LL_RCC_HSI_Enable @@ -1579,7 +2217,7 @@ __STATIC_INLINE uint32_t LL_RCC_HSI48_IsReady(void) /** * @brief Get HSI48 Calibration value * @rmtoll CRRCR HSI48CAL LL_RCC_HSI48_GetCalibration - * @retval Between Min_Data = 0x00 and Max_Data = 0xFF + * @retval Between Min_Data = 0x00 and Max_Data = 0x1FF */ __STATIC_INLINE uint32_t LL_RCC_HSI48_GetCalibration(void) { @@ -2284,7 +2922,7 @@ __STATIC_INLINE void LL_RCC_SetLPUARTClockSource(uint32_t LPUARTxSource) */ __STATIC_INLINE void LL_RCC_SetI2CClockSource(uint32_t I2CxSource) { - __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2CxSource >> 24U)); + __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2CxSource >> 24U)); MODIFY_REG(*reg, 3U << ((I2CxSource & 0x00FF0000U) >> 16U), ((I2CxSource & 0x000000FFU) << ((I2CxSource & 0x00FF0000U) >> 16U))); } @@ -2309,7 +2947,11 @@ __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource) /** * @brief Configure SAIx clock source + @if STM32L4S9xx + * @rmtoll CCIPR2 SAIxSEL LL_RCC_SetSAIClockSource + @else * @rmtoll CCIPR SAIxSEL LL_RCC_SetSAIClockSource + @endif * @param SAIxSource This parameter can be one of the following values: * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI1 * @arg @ref LL_RCC_SAI1_CLKSOURCE_PLLSAI2 (*) @@ -2325,9 +2967,30 @@ __STATIC_INLINE void LL_RCC_SetLPTIMClockSource(uint32_t LPTIMxSource) */ __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource) { +#if defined(RCC_CCIPR2_SAI1SEL) + MODIFY_REG(RCC->CCIPR2, (SAIxSource >> 16U), (SAIxSource & 0x0000FFFFU)); +#else MODIFY_REG(RCC->CCIPR, (SAIxSource & 0xFFFF0000U), (SAIxSource << 16U)); +#endif /* RCC_CCIPR2_SAI1SEL */ } +#if defined(RCC_CCIPR2_SDMMCSEL) +/** + * @brief Configure SDMMC1 kernel clock source + * @rmtoll CCIPR2 SDMMCSEL LL_RCC_SetSDMMCKernelClockSource + * @param SDMMCxSource This parameter can be one of the following values: + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE_48CLK (*) + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE_PLLP (*) + * + * (*) value not defined in all devices. + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetSDMMCKernelClockSource(uint32_t SDMMCxSource) +{ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_SDMMCSEL, SDMMCxSource); +} +#endif /* RCC_CCIPR2_SDMMCSEL */ + /** * @brief Configure SDMMC1 clock source * @rmtoll CCIPR CLK48SEL LL_RCC_SetSDMMCClockSource @@ -2336,7 +2999,7 @@ __STATIC_INLINE void LL_RCC_SetSAIClockSource(uint32_t SAIxSource) * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_HSI48 (*) * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 (*) * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL - * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI + * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI (*) * * (*) value not defined in all devices. * @retval None @@ -2417,9 +3080,29 @@ __STATIC_INLINE void LL_RCC_SetSWPMIClockSource(uint32_t SWPMIxSource) #endif /* SWPMI1 */ #if defined(DFSDM1_Channel0) +#if defined(RCC_CCIPR2_ADFSDM1SEL) +/** + * @brief Configure DFSDM Audio clock source + * @rmtoll CCIPR2 ADFSDM1SEL LL_RCC_SetDFSDMAudioClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_SAI1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_HSI + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_MSI + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDFSDMAudioClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_ADFSDM1SEL, Source); +} +#endif /* RCC_CCIPR2_ADFSDM1SEL */ + /** * @brief Configure DFSDM Kernel clock source + @if STM32L4S9xx + * @rmtoll CCIPR2 DFSDM1SEL LL_RCC_SetDFSDMClockSource + @else * @rmtoll CCIPR DFSDM1SEL LL_RCC_SetDFSDMClockSource + @endif * @param DFSDMxSource This parameter can be one of the following values: * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_PCLK2 * @arg @ref LL_RCC_DFSDM1_CLKSOURCE_SYSCLK @@ -2427,10 +3110,62 @@ __STATIC_INLINE void LL_RCC_SetSWPMIClockSource(uint32_t SWPMIxSource) */ __STATIC_INLINE void LL_RCC_SetDFSDMClockSource(uint32_t DFSDMxSource) { +#if defined(RCC_CCIPR2_DFSDM1SEL) + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_DFSDM1SEL, DFSDMxSource); +#else MODIFY_REG(RCC->CCIPR, RCC_CCIPR_DFSDM1SEL, DFSDMxSource); +#endif /* RCC_CCIPR2_DFSDM1SEL */ } #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +/** + * @brief Configure DSI clock source + * @rmtoll CCIPR2 DSISEL LL_RCC_SetDSIClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetDSIClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_DSISEL, Source); +} +#endif /* DSI */ + +#if defined(LTDC) +/** + * @brief Configure LTDC Clock Source + * @rmtoll CCIPR2 PLLSAI2DIVR LL_RCC_SetLTDCClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV2 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV4 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV8 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetLTDCClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_PLLSAI2DIVR, Source); +} +#endif /* LTDC */ + +#if defined(OCTOSPI1) +/** + * @brief Configure OCTOSPI clock source + * @rmtoll CCIPR2 OSPISEL LL_RCC_SetOCTOSPIClockSource + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_MSI + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_PLL + * @retval None + */ +__STATIC_INLINE void LL_RCC_SetOCTOSPIClockSource(uint32_t Source) +{ + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_OSPISEL, Source); +} +#endif /* OCTOSPI1 */ + /** * @brief Get USARTx clock source * @rmtoll CCIPR USARTxSEL LL_RCC_GetUSARTClockSource @@ -2528,8 +3263,8 @@ __STATIC_INLINE uint32_t LL_RCC_GetLPUARTClockSource(uint32_t LPUARTx) */ __STATIC_INLINE uint32_t LL_RCC_GetI2CClockSource(uint32_t I2Cx) { - __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2Cx >> 24U)); - return (uint32_t)((READ_BIT(*reg, 3U << ((I2Cx & 0x0000FF0000U) >> 16U)) >> ((I2Cx & 0x0000FF0000U) >> 16U)) | (I2Cx & 0xFFFF0000U)); + __IO uint32_t *reg = (__IO uint32_t *)(uint32_t)(RCC_BASE + 0x88U + (I2Cx >> 24U)); + return (uint32_t)((READ_BIT(*reg, 3U << ((I2Cx & 0x00FF0000U) >> 16U)) >> ((I2Cx & 0x00FF0000U) >> 16U)) | (I2Cx & 0xFFFF0000U)); } /** @@ -2555,7 +3290,11 @@ __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx) /** * @brief Get SAIx clock source + @if STM32L4S9xx + * @rmtoll CCIPR2 SAIxSEL LL_RCC_GetSAIClockSource + @else * @rmtoll CCIPR SAIxSEL LL_RCC_GetSAIClockSource + @endif * @param SAIx This parameter can be one of the following values: * @arg @ref LL_RCC_SAI1_CLKSOURCE * @arg @ref LL_RCC_SAI2_CLKSOURCE (*) @@ -2575,9 +3314,31 @@ __STATIC_INLINE uint32_t LL_RCC_GetLPTIMClockSource(uint32_t LPTIMx) */ __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx) { +#if defined(RCC_CCIPR2_SAI1SEL) + return (uint32_t)(READ_BIT(RCC->CCIPR2, SAIx) | (SAIx << 16U)); +#else return (uint32_t)(READ_BIT(RCC->CCIPR, SAIx) >> 16U | SAIx); +#endif /* RCC_CCIPR2_SAI1SEL */ } +#if defined(RCC_CCIPR2_SDMMCSEL) +/** + * @brief Get SDMMCx kernel clock source + * @rmtoll CCIPR2 SDMMCSEL LL_RCC_GetSDMMCKernelClockSource + * @param SDMMCx This parameter can be one of the following values: + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE_48CLK (*) + * @arg @ref LL_RCC_SDMMC1_KERNELCLKSOURCE_PLL (*) + * + * (*) value not defined in all devices. + */ +__STATIC_INLINE uint32_t LL_RCC_GetSDMMCKernelClockSource(uint32_t SDMMCx) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, SDMMCx)); +} +#endif /* RCC_CCIPR2_SDMMCSEL */ + /** * @brief Get SDMMCx clock source * @rmtoll CCIPR CLK48SEL LL_RCC_GetSDMMCClockSource @@ -2586,9 +3347,9 @@ __STATIC_INLINE uint32_t LL_RCC_GetSAIClockSource(uint32_t SAIx) * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_NONE (*) * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_HSI48 (*) - * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 + * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLLSAI1 (*) * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_PLL - * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI + * @arg @ref LL_RCC_SDMMC1_CLKSOURCE_MSI (*) * * (*) value not defined in all devices. */ @@ -2672,9 +3433,30 @@ __STATIC_INLINE uint32_t LL_RCC_GetSWPMIClockSource(uint32_t SPWMIx) #endif /* SWPMI1 */ #if defined(DFSDM1_Channel0) +#if defined(RCC_CCIPR2_ADFSDM1SEL) +/** + * @brief Get DFSDM Audio Clock Source + * @rmtoll CCIPR2 ADFSDM1SEL LL_RCC_GetDFSDMAudioClockSource + * @param DFSDMx This parameter can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_SAI1 + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_HSI + * @arg @ref LL_RCC_DFSDM1_AUDIO_CLKSOURCE_MSI + */ +__STATIC_INLINE uint32_t LL_RCC_GetDFSDMAudioClockSource(uint32_t DFSDMx) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, DFSDMx)); +} +#endif /* RCC_CCIPR2_ADFSDM1SEL */ + /** * @brief Get DFSDMx Kernel clock source + @if STM32L4S9xx + * @rmtoll CCIPR2 DFSDM1SEL LL_RCC_GetDFSDMClockSource + @else * @rmtoll CCIPR DFSDM1SEL LL_RCC_GetDFSDMClockSource + @endif * @param DFSDMx This parameter can be one of the following values: * @arg @ref LL_RCC_DFSDM1_CLKSOURCE * @retval Returned value can be one of the following values: @@ -2683,10 +3465,64 @@ __STATIC_INLINE uint32_t LL_RCC_GetSWPMIClockSource(uint32_t SPWMIx) */ __STATIC_INLINE uint32_t LL_RCC_GetDFSDMClockSource(uint32_t DFSDMx) { +#if defined(RCC_CCIPR2_DFSDM1SEL) + return (uint32_t)(READ_BIT(RCC->CCIPR2, DFSDMx)); +#else return (uint32_t)(READ_BIT(RCC->CCIPR, DFSDMx)); +#endif /* RCC_CCIPR2_DFSDM1SEL */ } #endif /* DFSDM1_Channel0 */ +#if defined(DSI) +/** + * @brief Get DSI Clock Source + * @rmtoll CCIPR2 DSISEL LL_RCC_GetDSIClockSource + * @param DSIx This parameter can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_DSI_CLKSOURCE_PHY + * @arg @ref LL_RCC_DSI_CLKSOURCE_PLL + */ +__STATIC_INLINE uint32_t LL_RCC_GetDSIClockSource(uint32_t DSIx) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, DSIx)); +} +#endif /* DSI */ + +#if defined(LTDC) +/** + * @brief Get LTDC Clock Source + * @rmtoll CCIPR2 PLLSAI2DIVR LL_RCC_GetLTDCClockSource + * @param LTDCx This parameter can be one of the following values: + * @arg @ref LL_RCC_LTDC_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV2 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV4 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV8 + * @arg @ref LL_RCC_LTDC_CLKSOURCE_PLLSAI2R_DIV16 + */ +__STATIC_INLINE uint32_t LL_RCC_GetLTDCClockSource(uint32_t LTDCx) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, LTDCx)); +} +#endif /* LTDC */ + +#if defined(OCTOSPI1) +/** + * @brief Get OCTOSPI clock source + * @rmtoll CCIPR2 OSPISEL LL_RCC_GetOCTOSPIClockSource + * @param OCTOSPIx This parameter can be one of the following values: + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_SYSCLK + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_MSI + * @arg @ref LL_RCC_OCTOSPI_CLKSOURCE_PLL + */ +__STATIC_INLINE uint32_t LL_RCC_GetOCTOSPIClockSource(uint32_t OCTOSPIx) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, OCTOSPIx)); +} +#endif /* OCTOSPI1 */ /** * @} */ @@ -2820,8 +3656,8 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) /** * @brief Configure PLL used for SYSCLK Domain * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLR can be written only when PLL is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLN/PLLR can be written only when PLL is disabled. * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SYS\n * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SYS\n * PLLCFGR PLLN LL_RCC_PLL_ConfigDomain_SYS\n @@ -2840,6 +3676,16 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param PLLN Between 8 and 86 * @param PLLR This parameter can be one of the following values: * @arg @ref LL_RCC_PLLR_DIV_2 @@ -2858,8 +3704,8 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, /** * @brief Configure PLL used for SAI domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLP can be written only when PLL is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLN/PLLP can be written only when PLL is disabled. * @note This can be selected for SAI1 or SAI2 (*) * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n @@ -2879,6 +3725,16 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param PLLN Between 8 and 86 * @param PLLP This parameter can be one of the following values: * @arg @ref LL_RCC_PLLP_DIV_2 @@ -2917,8 +3773,8 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLM, /** * @brief Configure PLL used for SAI domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLP can be written only when PLL is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLN/PLLP can be written only when PLL is disabled. * @note This can be selected for SAI1 or SAI2 (*) * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_SAI\n * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_SAI\n @@ -2959,8 +3815,8 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, /** * @brief Configure PLL used for 48Mhz domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLQ can be written only when PLL is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLN/PLLQ can be written only when PLL is disabled. * @note This can be selected for USB, RNG, SDMMC * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_ConfigDomain_48M\n * PLLCFGR PLLM LL_RCC_PLL_ConfigDomain_48M\n @@ -2980,6 +3836,16 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. * @param PLLN Between 8 and 86 * @param PLLQ This parameter can be one of the following values: * @arg @ref LL_RCC_PLLQ_DIV_2 @@ -2994,6 +3860,35 @@ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, Source | PLLM | PLLN << RCC_PLLCFGR_PLLN_Pos | PLLQ); } +/** + * @brief Configure PLL clock source + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_SetMainSource + * @param PLLSource This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLL_SetMainSource(uint32_t PLLSource) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, PLLSource); +} + +/** + * @brief Get the oscillator used as PLL clock source. + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + */ +__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); +} + /** * @brief Get Main PLL multiplication factor for VCO * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN @@ -3007,7 +3902,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void) #if defined(RCC_PLLP_DIV_2_31_SUPPORT) /** * @brief Get Main PLL division factor for PLLP - * @note used for PLLSAI3CLK (SAI1 and SAI2 clock) + * @note Used for PLLSAI3CLK (SAI1 and SAI2 clock) * @rmtoll PLLCFGR PLLPDIV LL_RCC_PLL_GetP * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLP_DIV_2 @@ -3048,7 +3943,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) #else /** * @brief Get Main PLL division factor for PLLP - * @note used for PLLSAI3CLK (SAI1 and SAI2 clock) + * @note Used for PLLSAI3CLK (SAI1 and SAI2 clock) * @rmtoll PLLCFGR PLLP LL_RCC_PLL_GetP * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLP_DIV_7 @@ -3062,7 +3957,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetP(void) /** * @brief Get Main PLL division factor for PLLQ - * @note used for PLL48M1CLK selected for USB, RNG, SDMMC (48 MHz clock) + * @note Used for PLL48M1CLK selected for USB, RNG, SDMMC (48 MHz clock) * @rmtoll PLLCFGR PLLQ LL_RCC_PLL_GetQ * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLQ_DIV_2 @@ -3077,7 +3972,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetQ(void) /** * @brief Get Main PLL division factor for PLLR - * @note used for PLLCLK (system clock) + * @note Used for PLLCLK (system clock) * @rmtoll PLLCFGR PLLR LL_RCC_PLL_GetR * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLR_DIV_2 @@ -3090,20 +3985,6 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void) return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR)); } -/** - * @brief Get the oscillator used as PLL clock source. - * @rmtoll PLLCFGR PLLSRC LL_RCC_PLL_GetMainSource - * @retval Returned value can be one of the following values: - * @arg @ref LL_RCC_PLLSOURCE_NONE - * @arg @ref LL_RCC_PLLSOURCE_MSI - * @arg @ref LL_RCC_PLLSOURCE_HSI - * @arg @ref LL_RCC_PLLSOURCE_HSE - */ -__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) -{ - return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC)); -} - /** * @brief Get Division factor for the main PLL and other PLL * @rmtoll PLLCFGR PLLM LL_RCC_PLL_GetDivider @@ -3116,6 +3997,16 @@ __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) * @arg @ref LL_RCC_PLLM_DIV_6 * @arg @ref LL_RCC_PLLM_DIV_7 * @arg @ref LL_RCC_PLLM_DIV_8 + * @arg @ref LL_RCC_PLLM_DIV_9 (*) + * @arg @ref LL_RCC_PLLM_DIV_10 (*) + * @arg @ref LL_RCC_PLLM_DIV_11 (*) + * @arg @ref LL_RCC_PLLM_DIV_12 (*) + * @arg @ref LL_RCC_PLLM_DIV_13 (*) + * @arg @ref LL_RCC_PLLM_DIV_14 (*) + * @arg @ref LL_RCC_PLLM_DIV_15 (*) + * @arg @ref LL_RCC_PLLM_DIV_16 (*) + * + * (*) value not defined in all devices. */ __STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void) { @@ -3232,11 +4123,58 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_IsReady(void) return (READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == (RCC_CR_PLLSAI1RDY)); } +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** + * @brief Configure PLLSAI1 used for 48Mhz domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1M/PLLSAI1N/PLLSAI1Q can be written only when PLLSAI1 is disabled. + * @note This can be selected for USB, RNG, SDMMC + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_48M\n + * PLLSAI1CFGR PLLSAI1M LL_RCC_PLLSAI1_ConfigDomain_48M\n + * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_48M\n + * PLLSAI1CFGR PLLSAI1Q LL_RCC_PLLSAI1_ConfigDomain_48M + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_4 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_6 + * @arg @ref LL_RCC_PLLSAI1Q_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M | RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, + PLLM | PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLQ); +} +#else /** * @brief Configure PLLSAI1 used for 48Mhz domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLQ can be written only when PLLSAI1 is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1N/PLLSAI1Q can be written only when PLLSAI1 is disabled. * @note This can be selected for USB, RNG, SDMMC * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_48M\n * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_48M\n @@ -3269,13 +4207,86 @@ __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t P MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1Q, PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLQ); } +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ -#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) && defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) +/** + * @brief Configure PLLSAI1 used for SAI domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1M/PLLSAI1N/PLLSAI1PDIV can be written only when PLLSAI1 is disabled. + * @note This can be selected for SAI1 or SAI2 + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_SAI\n + * PLLSAI1CFGR PLLSAI1M LL_RCC_PLLSAI1_ConfigDomain_SAI\n + * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_SAI\n + * PLLSAI1CFGR PLLSAI1PDIV LL_RCC_PLLSAI1_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1P_DIV_2 + * @arg @ref LL_RCC_PLLSAI1P_DIV_3 + * @arg @ref LL_RCC_PLLSAI1P_DIV_4 + * @arg @ref LL_RCC_PLLSAI1P_DIV_5 + * @arg @ref LL_RCC_PLLSAI1P_DIV_6 + * @arg @ref LL_RCC_PLLSAI1P_DIV_7 + * @arg @ref LL_RCC_PLLSAI1P_DIV_8 + * @arg @ref LL_RCC_PLLSAI1P_DIV_9 + * @arg @ref LL_RCC_PLLSAI1P_DIV_10 + * @arg @ref LL_RCC_PLLSAI1P_DIV_11 + * @arg @ref LL_RCC_PLLSAI1P_DIV_12 + * @arg @ref LL_RCC_PLLSAI1P_DIV_13 + * @arg @ref LL_RCC_PLLSAI1P_DIV_14 + * @arg @ref LL_RCC_PLLSAI1P_DIV_15 + * @arg @ref LL_RCC_PLLSAI1P_DIV_16 + * @arg @ref LL_RCC_PLLSAI1P_DIV_17 + * @arg @ref LL_RCC_PLLSAI1P_DIV_18 + * @arg @ref LL_RCC_PLLSAI1P_DIV_19 + * @arg @ref LL_RCC_PLLSAI1P_DIV_20 + * @arg @ref LL_RCC_PLLSAI1P_DIV_21 + * @arg @ref LL_RCC_PLLSAI1P_DIV_22 + * @arg @ref LL_RCC_PLLSAI1P_DIV_23 + * @arg @ref LL_RCC_PLLSAI1P_DIV_24 + * @arg @ref LL_RCC_PLLSAI1P_DIV_25 + * @arg @ref LL_RCC_PLLSAI1P_DIV_26 + * @arg @ref LL_RCC_PLLSAI1P_DIV_27 + * @arg @ref LL_RCC_PLLSAI1P_DIV_28 + * @arg @ref LL_RCC_PLLSAI1P_DIV_29 + * @arg @ref LL_RCC_PLLSAI1P_DIV_30 + * @arg @ref LL_RCC_PLLSAI1P_DIV_31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M | RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, + PLLM | PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLP); +} +#elif defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) /** * @brief Configure PLLSAI1 used for SAI domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLP can be written only when PLLSAI1 is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1N/PLLSAI1PDIV can be written only when PLLSAI1 is disabled. * @note This can be selected for SAI1 or SAI2 (*) * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_SAI\n * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_SAI\n @@ -3329,12 +4340,18 @@ __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t P * @arg @ref LL_RCC_PLLSAI1P_DIV_31 * @retval None */ +__STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, + PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLP); +} #else /** * @brief Configure PLLSAI1 used for SAI domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLP can be written only when PLLSAI1 is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1N/PLLSAI1P can be written only when PLLSAI1 is disabled. * @note This can be selected for SAI1 or SAI2 (*) * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_SAI\n * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_SAI\n @@ -3360,23 +4377,65 @@ __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_48M(uint32_t Source, uint32_t P * @arg @ref LL_RCC_PLLSAI1P_DIV_17 * @retval None */ -#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) { MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); -#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) - MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1PDIV, - PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLP); -#else MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1P, PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLP); -#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ } +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT && RCC_PLLSAI1P_DIV_2_31_SUPPORT */ +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** + * @brief Configure PLLSAI1 used for ADC domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI1M/PLLSAI1N/PLLSAI1R can be written only when PLLSAI1 is disabled. + * @note This can be selected for ADC + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_ADC\n + * PLLSAI1CFGR PLLSAI1M LL_RCC_PLLSAI1_ConfigDomain_ADC\n + * PLLSAI1CFGR PLLSAI1N LL_RCC_PLLSAI1_ConfigDomain_ADC\n + * PLLSAI1CFGR PLLSAI1R LL_RCC_PLLSAI1_ConfigDomain_ADC + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1R_DIV_2 + * @arg @ref LL_RCC_PLLSAI1R_DIV_4 + * @arg @ref LL_RCC_PLLSAI1R_DIV_6 + * @arg @ref LL_RCC_PLLSAI1R_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_ADC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M | RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, + PLLM | PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLR); +} +#else /** * @brief Configure PLLSAI1 used for ADC domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI1 and PLLSAI2 (*) are disabled - * @note PLLN/PLLR can be written only when PLLSAI1 is disabled + * PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLN/PLLR can be written only when PLLSAI1 is disabled. * @note This can be selected for ADC * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI1_ConfigDomain_ADC\n * PLLCFGR PLLM LL_RCC_PLLSAI1_ConfigDomain_ADC\n @@ -3409,6 +4468,7 @@ __STATIC_INLINE void LL_RCC_PLLSAI1_ConfigDomain_ADC(uint32_t Source, uint32_t P MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); MODIFY_REG(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1N | RCC_PLLSAI1CFGR_PLLSAI1R, PLLN << RCC_PLLSAI1CFGR_PLLSAI1N_Pos | PLLR); } +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ /** * @brief Get SAI1PLL multiplication factor for VCO @@ -3423,7 +4483,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetN(void) #if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) /** * @brief Get SAI1PLL division factor for PLLSAI1P - * @note used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). + * @note Used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). * @rmtoll PLLSAI1CFGR PLLSAI1PDIV LL_RCC_PLLSAI1_GetP * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI1P_DIV_2 @@ -3457,28 +4517,28 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetN(void) * @arg @ref LL_RCC_PLLSAI1P_DIV_30 * @arg @ref LL_RCC_PLLSAI1P_DIV_31 */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV)); +} #else /** * @brief Get SAI1PLL division factor for PLLSAI1P - * @note used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). + * @note Used for PLLSAI1CLK (SAI1 or SAI2 (*) clock). * @rmtoll PLLSAI1CFGR PLLSAI1P LL_RCC_PLLSAI1_GetP * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI1P_DIV_7 * @arg @ref LL_RCC_PLLSAI1P_DIV_17 */ -#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetP(void) { -#if defined(RCC_PLLSAI1P_DIV_2_31_SUPPORT) - return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1PDIV)); -#else return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1P)); -#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ } +#endif /* RCC_PLLSAI1P_DIV_2_31_SUPPORT */ /** * @brief Get SAI1PLL division factor for PLLSAI1Q - * @note used PLL48M2CLK selected for USB, RNG, SDMMC (48 MHz clock) + * @note Used PLL48M2CLK selected for USB, RNG, SDMMC (48 MHz clock) * @rmtoll PLLSAI1CFGR PLLSAI1Q LL_RCC_PLLSAI1_GetQ * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI1Q_DIV_2 @@ -3493,7 +4553,7 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetQ(void) /** * @brief Get PLLSAI1 division factor for PLLSAIR - * @note used for PLLADC1CLK (ADC clock) + * @note Used for PLLADC1CLK (ADC clock) * @rmtoll PLLSAI1CFGR PLLSAI1R LL_RCC_PLLSAI1_GetR * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI1R_DIV_2 @@ -3506,6 +4566,34 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetR(void) return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1R)); } +#if defined(RCC_PLLSAI1M_DIV_1_16_SUPPORT) +/** + * @brief Get Division factor for the PLLSAI1 + * @rmtoll PLLSAI1CFGR PLLSAI1M LL_RCC_PLLSAI1_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAI1M_DIV_1 + * @arg @ref LL_RCC_PLLSAI1M_DIV_2 + * @arg @ref LL_RCC_PLLSAI1M_DIV_3 + * @arg @ref LL_RCC_PLLSAI1M_DIV_4 + * @arg @ref LL_RCC_PLLSAI1M_DIV_5 + * @arg @ref LL_RCC_PLLSAI1M_DIV_6 + * @arg @ref LL_RCC_PLLSAI1M_DIV_7 + * @arg @ref LL_RCC_PLLSAI1M_DIV_8 + * @arg @ref LL_RCC_PLLSAI1M_DIV_9 + * @arg @ref LL_RCC_PLLSAI1M_DIV_10 + * @arg @ref LL_RCC_PLLSAI1M_DIV_11 + * @arg @ref LL_RCC_PLLSAI1M_DIV_12 + * @arg @ref LL_RCC_PLLSAI1M_DIV_13 + * @arg @ref LL_RCC_PLLSAI1M_DIV_14 + * @arg @ref LL_RCC_PLLSAI1M_DIV_15 + * @arg @ref LL_RCC_PLLSAI1M_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI1_GetDivider(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAI1CFGR, RCC_PLLSAI1CFGR_PLLSAI1M)); +} +#endif /* RCC_PLLSAI1M_DIV_1_16_SUPPORT */ + /** * @brief Enable PLLSAI1 output mapped on SAI domain clock * @rmtoll PLLSAI1CFGR PLLSAI1PEN LL_RCC_PLLSAI1_EnableDomain_SAI @@ -3611,11 +4699,148 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_IsReady(void) return (READ_BIT(RCC->CR, RCC_CR_PLLSAI2RDY) == (RCC_CR_PLLSAI2RDY)); } +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) && defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) +/** + * @brief Configure PLLSAI2 used for SAI domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI2M/PLLSAI2N/PLLSAI2PDIV can be written only when PLLSAI2 is disabled. + * @note This can be selected for SAI1 or SAI2 + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLSAI2CFGR PLLSAI2M LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLSAI2CFGR PLLSAI2PDIV LL_RCC_PLLSAI2_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2P_DIV_2 + * @arg @ref LL_RCC_PLLSAI2P_DIV_3 + * @arg @ref LL_RCC_PLLSAI2P_DIV_4 + * @arg @ref LL_RCC_PLLSAI2P_DIV_5 + * @arg @ref LL_RCC_PLLSAI2P_DIV_6 + * @arg @ref LL_RCC_PLLSAI2P_DIV_7 + * @arg @ref LL_RCC_PLLSAI2P_DIV_8 + * @arg @ref LL_RCC_PLLSAI2P_DIV_9 + * @arg @ref LL_RCC_PLLSAI2P_DIV_10 + * @arg @ref LL_RCC_PLLSAI2P_DIV_11 + * @arg @ref LL_RCC_PLLSAI2P_DIV_12 + * @arg @ref LL_RCC_PLLSAI2P_DIV_13 + * @arg @ref LL_RCC_PLLSAI2P_DIV_14 + * @arg @ref LL_RCC_PLLSAI2P_DIV_15 + * @arg @ref LL_RCC_PLLSAI2P_DIV_16 + * @arg @ref LL_RCC_PLLSAI2P_DIV_17 + * @arg @ref LL_RCC_PLLSAI2P_DIV_18 + * @arg @ref LL_RCC_PLLSAI2P_DIV_19 + * @arg @ref LL_RCC_PLLSAI2P_DIV_20 + * @arg @ref LL_RCC_PLLSAI2P_DIV_21 + * @arg @ref LL_RCC_PLLSAI2P_DIV_22 + * @arg @ref LL_RCC_PLLSAI2P_DIV_23 + * @arg @ref LL_RCC_PLLSAI2P_DIV_24 + * @arg @ref LL_RCC_PLLSAI2P_DIV_25 + * @arg @ref LL_RCC_PLLSAI2P_DIV_26 + * @arg @ref LL_RCC_PLLSAI2P_DIV_27 + * @arg @ref LL_RCC_PLLSAI2P_DIV_28 + * @arg @ref LL_RCC_PLLSAI2P_DIV_29 + * @arg @ref LL_RCC_PLLSAI2P_DIV_30 + * @arg @ref LL_RCC_PLLSAI2P_DIV_31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M | RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2PDIV, + PLLM | PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLP); +} +#elif defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) /** * @brief Configure PLLSAI2 used for SAI domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI2 and PLLSAI2 are disabled - * @note PLLN/PLLP can be written only when PLLSAI2 is disabled + * PLLSAI1 and PLLSAI2 are disabled. + * @note PLLSAI2N/PLLSAI2PDIV can be written only when PLLSAI2 is disabled. + * @note This can be selected for SAI1 or SAI2 + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLCFGR PLLM LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_SAI\n + * PLLSAI2CFGR PLLSAI2PDIV LL_RCC_PLLSAI2_ConfigDomain_SAI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLM_DIV_1 + * @arg @ref LL_RCC_PLLM_DIV_2 + * @arg @ref LL_RCC_PLLM_DIV_3 + * @arg @ref LL_RCC_PLLM_DIV_4 + * @arg @ref LL_RCC_PLLM_DIV_5 + * @arg @ref LL_RCC_PLLM_DIV_6 + * @arg @ref LL_RCC_PLLM_DIV_7 + * @arg @ref LL_RCC_PLLM_DIV_8 + * @param PLLN Between 8 and 86 + * @param PLLP This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2P_DIV_2 + * @arg @ref LL_RCC_PLLSAI2P_DIV_3 + * @arg @ref LL_RCC_PLLSAI2P_DIV_4 + * @arg @ref LL_RCC_PLLSAI2P_DIV_5 + * @arg @ref LL_RCC_PLLSAI2P_DIV_6 + * @arg @ref LL_RCC_PLLSAI2P_DIV_7 + * @arg @ref LL_RCC_PLLSAI2P_DIV_8 + * @arg @ref LL_RCC_PLLSAI2P_DIV_9 + * @arg @ref LL_RCC_PLLSAI2P_DIV_10 + * @arg @ref LL_RCC_PLLSAI2P_DIV_11 + * @arg @ref LL_RCC_PLLSAI2P_DIV_12 + * @arg @ref LL_RCC_PLLSAI2P_DIV_13 + * @arg @ref LL_RCC_PLLSAI2P_DIV_14 + * @arg @ref LL_RCC_PLLSAI2P_DIV_15 + * @arg @ref LL_RCC_PLLSAI2P_DIV_16 + * @arg @ref LL_RCC_PLLSAI2P_DIV_17 + * @arg @ref LL_RCC_PLLSAI2P_DIV_18 + * @arg @ref LL_RCC_PLLSAI2P_DIV_19 + * @arg @ref LL_RCC_PLLSAI2P_DIV_20 + * @arg @ref LL_RCC_PLLSAI2P_DIV_21 + * @arg @ref LL_RCC_PLLSAI2P_DIV_22 + * @arg @ref LL_RCC_PLLSAI2P_DIV_23 + * @arg @ref LL_RCC_PLLSAI2P_DIV_24 + * @arg @ref LL_RCC_PLLSAI2P_DIV_25 + * @arg @ref LL_RCC_PLLSAI2P_DIV_26 + * @arg @ref LL_RCC_PLLSAI2P_DIV_27 + * @arg @ref LL_RCC_PLLSAI2P_DIV_28 + * @arg @ref LL_RCC_PLLSAI2P_DIV_29 + * @arg @ref LL_RCC_PLLSAI2P_DIV_30 + * @arg @ref LL_RCC_PLLSAI2P_DIV_31 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_SAI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLP) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2PDIV, PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLP); +} +#else +/** + * @brief Configure PLLSAI2 used for SAI domain clock + * @note PLL Source and PLLM Divider can be written only when PLL, + * PLLSAI2 and PLLSAI2 are disabled. + * @note PLLSAI2N/PLLSAI2P can be written only when PLLSAI2 is disabled. * @note This can be selected for SAI1 or SAI2 * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_SAI\n * PLLCFGR PLLM LL_RCC_PLLSAI2_ConfigDomain_SAI\n @@ -3646,12 +4871,113 @@ __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_SAI(uint32_t Source, uint32_t P MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2P, PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLP); } +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT && RCC_PLLSAI2P_DIV_2_31_SUPPORT */ +#if defined(DSI) +/** + * @brief Configure PLLSAI2 used for DSI domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI2M/PLLSAI2N/PLLSAI2Q can be written only when PLLSAI2 is disabled. + * @note This can be selected for DSI + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_DSI\n + * PLLSAI2CFGR PLLSAI2M LL_RCC_PLLSAI2_ConfigDomain_DSI\n + * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_DSI\n + * PLLSAI2CFGR PLLSAI2Q LL_RCC_PLLSAI2_ConfigDomain_DSI + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLQ This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2Q_DIV_2 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_4 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_6 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_8 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_DSI(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLQ) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M | RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2Q, PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLQ | PLLM); +} +#endif /* DSI */ + +#if defined(LTDC) +/** + * @brief Configure PLLSAI2 used for LTDC domain clock + * @note PLL Source can be written only when PLL, PLLSAI1 and PLLSAI2 (*) are disabled. + * @note PLLSAI2M/PLLSAI2N/PLLSAI2R can be written only when PLLSAI2 is disabled. + * @note This can be selected for LTDC + * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_LTDC\n + * PLLSAI2CFGR PLLSAI2M LL_RCC_PLLSAI2_ConfigDomain_LTDC\n + * PLLSAI2CFGR PLLSAI2N LL_RCC_PLLSAI2_ConfigDomain_LTDC\n + * PLLSAI2CFGR PLLSAI2R LL_RCC_PLLSAI2_ConfigDomain_LTDC\n + * CCIPR2 PLLSAI2DIVR LL_RCC_PLLSAI2_ConfigDomain_LTDC + * @param Source This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSOURCE_NONE + * @arg @ref LL_RCC_PLLSOURCE_MSI + * @arg @ref LL_RCC_PLLSOURCE_HSI + * @arg @ref LL_RCC_PLLSOURCE_HSE + * @param PLLM This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + * @param PLLN Between 8 and 86 + * @param PLLR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2R_DIV_2 + * @arg @ref LL_RCC_PLLSAI2R_DIV_4 + * @arg @ref LL_RCC_PLLSAI2R_DIV_6 + * @arg @ref LL_RCC_PLLSAI2R_DIV_8 + * @param PLLDIVR This parameter can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_16 + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_LTDC(uint32_t Source, uint32_t PLLM, uint32_t PLLN, uint32_t PLLR, uint32_t PLLDIVR) +{ + MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC, Source); + MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M | RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLR | PLLM); + MODIFY_REG(RCC->CCIPR2, RCC_CCIPR2_PLLSAI2DIVR, PLLDIVR); +} +#else /** * @brief Configure PLLSAI2 used for ADC domain clock * @note PLL Source and PLLM Divider can be written only when PLL, - * PLLSAI2 and PLLSAI2 are disabled - * @note PLLN/PLLR can be written only when PLLSAI2 is disabled + * PLLSAI2 and PLLSAI2 are disabled. + * @note PLLSAI2N/PLLSAI2R can be written only when PLLSAI2 is disabled. * @note This can be selected for ADC * @rmtoll PLLCFGR PLLSRC LL_RCC_PLLSAI2_ConfigDomain_ADC\n * PLLCFGR PLLM LL_RCC_PLLSAI2_ConfigDomain_ADC\n @@ -3684,6 +5010,7 @@ __STATIC_INLINE void LL_RCC_PLLSAI2_ConfigDomain_ADC(uint32_t Source, uint32_t P MODIFY_REG(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM, Source | PLLM); MODIFY_REG(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N | RCC_PLLSAI2CFGR_PLLSAI2R, PLLN << RCC_PLLSAI2CFGR_PLLSAI2N_Pos | PLLR); } +#endif /* LTDC */ /** * @brief Get SAI2PLL multiplication factor for VCO @@ -3695,9 +5022,51 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetN(void) return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2N) >> RCC_PLLSAI2CFGR_PLLSAI2N_Pos); } +#if defined(RCC_PLLSAI2P_DIV_2_31_SUPPORT) /** * @brief Get SAI2PLL division factor for PLLSAI2P - * @note used for PLLSAI2CLK (SAI1 or SAI2 clock). + * @note Used for PLLSAI2CLK (SAI1 or SAI2 clock). + * @rmtoll PLLSAI2CFGR PLLSAI2PDIV LL_RCC_PLLSAI2_GetP + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2P_DIV_2 + * @arg @ref LL_RCC_PLLSAI2P_DIV_3 + * @arg @ref LL_RCC_PLLSAI2P_DIV_4 + * @arg @ref LL_RCC_PLLSAI2P_DIV_5 + * @arg @ref LL_RCC_PLLSAI2P_DIV_6 + * @arg @ref LL_RCC_PLLSAI2P_DIV_7 + * @arg @ref LL_RCC_PLLSAI2P_DIV_8 + * @arg @ref LL_RCC_PLLSAI2P_DIV_9 + * @arg @ref LL_RCC_PLLSAI2P_DIV_10 + * @arg @ref LL_RCC_PLLSAI2P_DIV_11 + * @arg @ref LL_RCC_PLLSAI2P_DIV_12 + * @arg @ref LL_RCC_PLLSAI2P_DIV_13 + * @arg @ref LL_RCC_PLLSAI2P_DIV_14 + * @arg @ref LL_RCC_PLLSAI2P_DIV_15 + * @arg @ref LL_RCC_PLLSAI2P_DIV_16 + * @arg @ref LL_RCC_PLLSAI2P_DIV_17 + * @arg @ref LL_RCC_PLLSAI2P_DIV_18 + * @arg @ref LL_RCC_PLLSAI2P_DIV_19 + * @arg @ref LL_RCC_PLLSAI2P_DIV_20 + * @arg @ref LL_RCC_PLLSAI2P_DIV_21 + * @arg @ref LL_RCC_PLLSAI2P_DIV_22 + * @arg @ref LL_RCC_PLLSAI2P_DIV_23 + * @arg @ref LL_RCC_PLLSAI2P_DIV_24 + * @arg @ref LL_RCC_PLLSAI2P_DIV_25 + * @arg @ref LL_RCC_PLLSAI2P_DIV_26 + * @arg @ref LL_RCC_PLLSAI2P_DIV_27 + * @arg @ref LL_RCC_PLLSAI2P_DIV_28 + * @arg @ref LL_RCC_PLLSAI2P_DIV_29 + * @arg @ref LL_RCC_PLLSAI2P_DIV_30 + * @arg @ref LL_RCC_PLLSAI2P_DIV_31 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetP(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PDIV)); +} +#else +/** + * @brief Get SAI2PLL division factor for PLLSAI2P + * @note Used for PLLSAI2CLK (SAI1 or SAI2 clock). * @rmtoll PLLSAI2CFGR PLLSAI2P LL_RCC_PLLSAI2_GetP * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI2P_DIV_7 @@ -3707,10 +5076,28 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetP(void) { return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2P)); } +#endif /* RCC_PLLSAI2P_DIV_2_31_SUPPORT */ + +#if defined(RCC_PLLSAI2Q_DIV_SUPPORT) +/** + * @brief Get division factor for PLLSAI2Q + * @note Used for PLLDSICLK (DSI clock) + * @rmtoll PLLSAI2CFGR PLLSAI2Q LL_RCC_PLLSAI2_GetQ + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2Q_DIV_2 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_4 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_6 + * @arg @ref LL_RCC_PLLSAI2Q_DIV_8 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetQ(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2Q)); +} +#endif /* RCC_PLLSAI2Q_DIV_SUPPORT */ /** * @brief Get SAI2PLL division factor for PLLSAI2R - * @note used for PLLADC2CLK (ADC clock) + * @note Used for PLLADC2CLK (ADC clock) or PLLLCDCLK (LTDC clock) depending on devices * @rmtoll PLLSAI2CFGR PLLSAI2R LL_RCC_PLLSAI2_GetR * @retval Returned value can be one of the following values: * @arg @ref LL_RCC_PLLSAI2R_DIV_2 @@ -3723,6 +5110,51 @@ __STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetR(void) return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2R)); } +#if defined(RCC_PLLSAI2M_DIV_1_16_SUPPORT) +/** + * @brief Get Division factor for the PLLSAI2 + * @rmtoll PLLSAI2CFGR PLLSAI2M LL_RCC_PLLSAI2_GetDivider + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2M_DIV_1 + * @arg @ref LL_RCC_PLLSAI2M_DIV_2 + * @arg @ref LL_RCC_PLLSAI2M_DIV_3 + * @arg @ref LL_RCC_PLLSAI2M_DIV_4 + * @arg @ref LL_RCC_PLLSAI2M_DIV_5 + * @arg @ref LL_RCC_PLLSAI2M_DIV_6 + * @arg @ref LL_RCC_PLLSAI2M_DIV_7 + * @arg @ref LL_RCC_PLLSAI2M_DIV_8 + * @arg @ref LL_RCC_PLLSAI2M_DIV_9 + * @arg @ref LL_RCC_PLLSAI2M_DIV_10 + * @arg @ref LL_RCC_PLLSAI2M_DIV_11 + * @arg @ref LL_RCC_PLLSAI2M_DIV_12 + * @arg @ref LL_RCC_PLLSAI2M_DIV_13 + * @arg @ref LL_RCC_PLLSAI2M_DIV_14 + * @arg @ref LL_RCC_PLLSAI2M_DIV_15 + * @arg @ref LL_RCC_PLLSAI2M_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetDivider(void) +{ + return (uint32_t)(READ_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2M)); +} +#endif /* RCC_PLLSAI2M_DIV_1_16_SUPPORT */ + +#if defined(RCC_CCIPR2_PLLSAI2DIVR) +/** + * @brief Get PLLSAI2 division factor for PLLSAI2DIVR + * @note Used for LTDC domain clock + * @rmtoll CCIPR2 PLLSAI2DIVR LL_RCC_PLLSAI2_GetDIVR + * @retval Returned value can be one of the following values: + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_2 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_4 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_8 + * @arg @ref LL_RCC_PLLSAI2DIVR_DIV_16 + */ +__STATIC_INLINE uint32_t LL_RCC_PLLSAI2_GetDIVR(void) +{ + return (uint32_t)(READ_BIT(RCC->CCIPR2, RCC_CCIPR2_PLLSAI2DIVR)); +} +#endif /* RCC_CCIPR2_PLLSAI2DIVR */ + /** * @brief Enable PLLSAI2 output mapped on SAI domain clock * @rmtoll PLLSAI2CFGR PLLSAI2PEN LL_RCC_PLLSAI2_EnableDomain_SAI @@ -3745,6 +5177,53 @@ __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_SAI(void) CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2PEN); } +#if defined(DSI) +/** + * @brief Enable PLLSAI2 output mapped on DSI domain clock + * @rmtoll PLLSAI2CFGR PLLSAI2QEN LL_RCC_PLLSAI2_EnableDomain_DSI + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_DSI(void) +{ + SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2QEN); +} + +/** + * @brief Disable PLLSAI2 output mapped on DSI domain clock + * @note In order to save power, when of the PLLSAI2 is + * not used, Main PLLSAI2 should be 0 + * @rmtoll PLLSAI2CFGR PLLSAI2QEN LL_RCC_PLLSAI2_DisableDomain_DSI + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_DSI(void) +{ + CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2QEN); +} +#endif /* DSI */ + +#if defined(LTDC) +/** + * @brief Enable PLLSAI2 output mapped on LTDC domain clock + * @rmtoll PLLSAI2CFGR PLLSAI2REN LL_RCC_PLLSAI2_EnableDomain_LTDC + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_EnableDomain_LTDC(void) +{ + SET_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN); +} + +/** + * @brief Disable PLLSAI2 output mapped on LTDC domain clock + * @note In order to save power, when of the PLLSAI2 is + * not used, Main PLLSAI2 should be 0 + * @rmtoll PLLSAI2CFGR PLLSAI2REN LL_RCC_PLLSAI2_DisableDomain_LTDC + * @retval None + */ +__STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_LTDC(void) +{ + CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN); +} +#else /** * @brief Enable PLLSAI2 output mapped on ADC domain clock * @rmtoll PLLSAI2CFGR PLLSAI2REN LL_RCC_PLLSAI2_EnableDomain_ADC @@ -3766,12 +5245,15 @@ __STATIC_INLINE void LL_RCC_PLLSAI2_DisableDomain_ADC(void) { CLEAR_BIT(RCC->PLLSAI2CFGR, RCC_PLLSAI2CFGR_PLLSAI2REN); } +#endif /* LTDC */ /** * @} */ #endif /* RCC_PLLSAI2_SUPPORT */ + + /** @defgroup RCC_LL_EF_FLAG_Management FLAG Management * @{ */ @@ -4439,6 +5921,9 @@ uint32_t LL_RCC_GetI2CClockFreq(uint32_t I2CxSource); uint32_t LL_RCC_GetLPUARTClockFreq(uint32_t LPUARTxSource); uint32_t LL_RCC_GetLPTIMClockFreq(uint32_t LPTIMxSource); uint32_t LL_RCC_GetSAIClockFreq(uint32_t SAIxSource); +#if defined(RCC_CCIPR2_SDMMCSEL) +uint32_t LL_RCC_GetSDMMCKernelClockFreq(uint32_t SDMMCxSource); +#endif uint32_t LL_RCC_GetSDMMCClockFreq(uint32_t SDMMCxSource); uint32_t LL_RCC_GetRNGClockFreq(uint32_t RNGxSource); #if defined(USB_OTG_FS) || defined(USB) @@ -4450,7 +5935,19 @@ uint32_t LL_RCC_GetSWPMIClockFreq(uint32_t SWPMIxSource); #endif /* SWPMI1 */ #if defined(DFSDM1_Channel0) uint32_t LL_RCC_GetDFSDMClockFreq(uint32_t DFSDMxSource); +#if defined(RCC_CCIPR2_DFSDM1SEL) +uint32_t LL_RCC_GetDFSDMAudioClockFreq(uint32_t DFSDMxSource); +#endif /* RCC_CCIPR2_DFSDM1SEL */ #endif /* DFSDM1_Channel0 */ +#if defined(LTDC) +uint32_t LL_RCC_GetLTDCClockFreq(uint32_t LTDCxSource); +#endif /* LTDC */ +#if defined(DSI) +uint32_t LL_RCC_GetDSIClockFreq(uint32_t DSIxSource); +#endif /* DSI */ +#if defined(OCTOSPI1) +uint32_t LL_RCC_GetOCTOSPIClockFreq(uint32_t OCTOSPIxSource); +#endif /* OCTOSPI1 */ /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.c index e1c3b4acee..5ded9ba331 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rng.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RNG LL module driver. ****************************************************************************** * @attention @@ -60,6 +58,18 @@ /* Private variables ---------------------------------------------------------*/ /* Private constants ---------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/ +/** @addtogroup RNG_LL_Private_Macros + * @{ + */ +#if defined(RNG_CR_CED) +#define IS_LL_RNG_CED(__MODE__) (((__MODE__) == LL_RNG_CED_ENABLE) || \ + ((__MODE__) == LL_RNG_CED_DISABLE)) +#endif /* defined(RNG_CR_CED) */ + +/** + * @} + */ + /* Private function prototypes -----------------------------------------------*/ /* Exported functions --------------------------------------------------------*/ @@ -92,6 +102,42 @@ ErrorStatus LL_RNG_DeInit(RNG_TypeDef *RNGx) return (SUCCESS); } +#if defined(RNG_CR_CED) +/** + * @brief Initialize RNG registers according to the specified parameters in RNG_InitStruct. + * @param RNGx RNG Instance + * @param RNG_InitStruct: pointer to a LL_RNG_InitTypeDef structure + * that contains the configuration information for the specified RNG peripheral. + * @retval An ErrorStatus enumeration value: + * - SUCCESS: RNG registers are initialized according to RNG_InitStruct content + * - ERROR: not applicable + */ +ErrorStatus LL_RNG_Init(RNG_TypeDef *RNGx, LL_RNG_InitTypeDef *RNG_InitStruct) +{ + /* Check the parameters */ + assert_param(IS_RNG_ALL_INSTANCE(RNGx)); + assert_param(IS_LL_RNG_CED(RNG_InitStruct->ClockErrorDetection)); + + /* Clock Error Detection configuration */ + MODIFY_REG(RNGx->CR, RNG_CR_CED, RNG_InitStruct->ClockErrorDetection); + + return (SUCCESS); +} + +/** + * @brief Set each @ref LL_RNG_InitTypeDef field to default value. + * @param RNG_InitStruct: pointer to a @ref LL_RNG_InitTypeDef structure + * whose fields will be set to default values. + * @retval None + */ +void LL_RNG_StructInit(LL_RNG_InitTypeDef *RNG_InitStruct) +{ + /* Set RNG_InitStruct fields to default values */ + RNG_InitStruct->ClockErrorDetection = LL_RNG_CED_ENABLE; + +} +#endif /* defined(RNG_CR_CED) */ + /** * @} */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.h index 94325a4ac4..2c49eac9a1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rng.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rng.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RNG LL module. ****************************************************************************** * @attention @@ -62,11 +60,47 @@ extern "C" { /* Private macros ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup RNG_LL_ES_Init_Struct RNG Exported Init structures + * @{ + */ + + +#if defined(RNG_CR_CED) +/** + * @brief LL RNG Init Structure Definition + */ +typedef struct +{ + uint32_t ClockErrorDetection; /*!< Clock error detection. + This parameter can be one value of @ref RNG_LL_CED. + + This parameter can be modified using unitary functions @ref LL_RNG_EnableClkErrorDetect(). */ +}LL_RNG_InitTypeDef; +#endif /* defined(RNG_CR_CED) */ + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + /* Exported constants --------------------------------------------------------*/ /** @defgroup RNG_LL_Exported_Constants RNG Exported Constants * @{ */ + +#if defined(RNG_CR_CED) +/** @defgroup RNG_LL_CED Clock Error Detection + * @{ + */ +#define LL_RNG_CED_ENABLE 0x00000000U /*!< Clock error detection enabled */ +#define LL_RNG_CED_DISABLE RNG_CR_CED /*!< Clock error detection disabled */ +/** + * @} + */ +#endif /* defined(RNG_CR_CED) */ + /** @defgroup RNG_LL_EC_GET_FLAG Get Flags Defines * @brief Flags defines which can be used with LL_RNG_ReadReg function * @{ @@ -168,6 +202,42 @@ __STATIC_INLINE uint32_t LL_RNG_IsEnabled(RNG_TypeDef *RNGx) return (READ_BIT(RNGx->CR, RNG_CR_RNGEN) == (RNG_CR_RNGEN)); } +#if defined(RNG_CR_CED) +/** + * @brief Enable RNG Clock Error Detection + * @rmtoll CR CED LL_RNG_EnableClkErrorDetect + * @param RNGx RNG Instance + * @retval None + */ +__STATIC_INLINE void LL_RNG_EnableClkErrorDetect(RNG_TypeDef *RNGx) +{ + CLEAR_BIT(RNGx->CR, RNG_CR_CED); +} + +/** + * @brief Disable RNG Clock Error Detection + * @rmtoll CR CED LL_RNG_DisableClkErrorDetect + * @param RNGx RNG Instance + * @retval None + */ +__STATIC_INLINE void LL_RNG_DisableClkErrorDetect(RNG_TypeDef *RNGx) +{ + SET_BIT(RNGx->CR, RNG_CR_CED); +} + +/** + * @brief Check if RNG Clock Error Detection is enabled + * @rmtoll CR CED LL_RNG_IsEnabledClkErrorDetect + * @param RNGx RNG Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_RNG_IsEnabledClkErrorDetect(RNG_TypeDef *RNGx) +{ + return (!(READ_BIT(RNGx->CR, RNG_CR_CED) == (RNG_CR_CED))); +} +#endif /* defined(RNG_CR_CED) */ + + /** * @} */ @@ -324,7 +394,10 @@ __STATIC_INLINE uint32_t LL_RNG_ReadRandData32(RNG_TypeDef *RNGx) /** @defgroup RNG_LL_EF_Init Initialization and de-initialization functions * @{ */ - +#if defined(RNG_CR_CED) +ErrorStatus LL_RNG_Init(RNG_TypeDef *RNGx, LL_RNG_InitTypeDef *RNG_InitStruct); +void LL_RNG_StructInit(LL_RNG_InitTypeDef *RNG_InitStruct); +#endif /* defined(RNG_CR_CED) */ ErrorStatus LL_RNG_DeInit(RNG_TypeDef *RNGx); /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.c index 6c359de270..1fff8e3f76 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rtc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief RTC LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.h index a935f5ab0e..41ace5a83e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_rtc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_rtc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of RTC LL module. ****************************************************************************** * @attention @@ -63,8 +61,8 @@ extern "C" { * @{ */ /* Masks Definition */ -#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFFU) -#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5FU) +#define RTC_INIT_MASK 0xFFFFFFFFU +#define RTC_RSF_MASK 0xFFFFFF5FU /* Write protection defines */ #define RTC_WRITE_PROTECTION_DISABLE ((uint8_t)0xFFU) @@ -223,8 +221,8 @@ typedef struct /** @defgroup RTC_LL_EC_FORMAT FORMAT * @{ */ -#define LL_RTC_FORMAT_BIN 0x000000000U /*!< Binary data format */ -#define LL_RTC_FORMAT_BCD 0x000000001U /*!< BCD data format */ +#define LL_RTC_FORMAT_BIN 0x00000000U /*!< Binary data format */ +#define LL_RTC_FORMAT_BCD 0x00000001U /*!< BCD data format */ /** * @} */ @@ -614,8 +612,8 @@ typedef struct * @{ */ #define LL_RTC_CALIB_OUTPUT_NONE 0x00000000U /*!< Calibration output disabled */ -#define LL_RTC_CALIB_OUTPUT_1HZ (RTC_CR_COE | RTC_CR_COSEL) /*!< Calibration output is 512 Hz */ -#define LL_RTC_CALIB_OUTPUT_512HZ (RTC_CR_COE) /*!< Calibration output is 1 Hz */ +#define LL_RTC_CALIB_OUTPUT_1HZ (RTC_CR_COE | RTC_CR_COSEL) /*!< Calibration output is 1 Hz */ +#define LL_RTC_CALIB_OUTPUT_512HZ (RTC_CR_COE) /*!< Calibration output is 512 Hz */ /** * @} */ @@ -1293,7 +1291,12 @@ __STATIC_INLINE void LL_RTC_TIME_Config(RTC_TypeDef *RTCx, uint32_t Format12_24, */ __STATIC_INLINE uint32_t LL_RTC_TIME_Get(RTC_TypeDef *RTCx) { - return (uint32_t)((LL_RTC_TIME_GetHour(RTCx) << RTC_OFFSET_HOUR) | (LL_RTC_TIME_GetMinute(RTCx) << RTC_OFFSET_MINUTE) | LL_RTC_TIME_GetSecond(RTCx)); + register uint32_t temp = 0U; + + temp = READ_BIT(RTCx->TR, (RTC_TR_HT | RTC_TR_HU | RTC_TR_MNT | RTC_TR_MNU | RTC_TR_ST | RTC_TR_SU)); + return (uint32_t)((((((temp & RTC_TR_HT) >> RTC_TR_HT_Pos) << 4U) | ((temp & RTC_TR_HU) >> RTC_TR_HU_Pos)) << RTC_OFFSET_HOUR) | \ + (((((temp & RTC_TR_MNT) >> RTC_TR_MNT_Pos) << 4U) | ((temp & RTC_TR_MNU) >> RTC_TR_MNU_Pos)) << RTC_OFFSET_MINUTE) | \ + ((((temp & RTC_TR_ST) >> RTC_TR_ST_Pos) << 4U) | ((temp & RTC_TR_SU) >> RTC_TR_SU_Pos))); } /** @@ -1627,7 +1630,13 @@ __STATIC_INLINE void LL_RTC_DATE_Config(RTC_TypeDef *RTCx, uint32_t WeekDay, uin */ __STATIC_INLINE uint32_t LL_RTC_DATE_Get(RTC_TypeDef *RTCx) { - return (uint32_t)((LL_RTC_DATE_GetWeekDay(RTCx) << RTC_OFFSET_WEEKDAY) | (LL_RTC_DATE_GetDay(RTCx) << RTC_OFFSET_DAY) | (LL_RTC_DATE_GetMonth(RTCx) << RTC_OFFSET_MONTH) | LL_RTC_DATE_GetYear(RTCx)); + register uint32_t temp = 0U; + + temp = READ_BIT(RTCx->DR, (RTC_DR_WDU | RTC_DR_MT | RTC_DR_MU | RTC_DR_DT | RTC_DR_DU | RTC_DR_YT | RTC_DR_YU)); + return (uint32_t)((((temp & RTC_DR_WDU) >> RTC_DR_WDU_Pos) << RTC_OFFSET_WEEKDAY) | \ + (((((temp & RTC_DR_DT) >> RTC_DR_DT_Pos) << 4U) | ((temp & RTC_DR_DU) >> RTC_DR_DU_Pos)) << RTC_OFFSET_DAY) | \ + (((((temp & RTC_DR_MT) >> RTC_DR_MT_Pos) << 4U) | ((temp & RTC_DR_MU) >> RTC_DR_MU_Pos)) << RTC_OFFSET_MONTH) | \ + ((((temp & RTC_DR_YT) >> RTC_DR_YT_Pos) << 4U) | ((temp & RTC_DR_YU) >> RTC_DR_YU_Pos))); } /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.c index d0434cdcc1..c245cca9cb 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_sdmmc.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SDMMC Low Layer HAL module driver. * * This file provides firmware functions to manage the following @@ -234,7 +232,9 @@ HAL_StatusTypeDef SDMMC_Init(SDMMC_TypeDef *SDMMCx, SDMMC_InitTypeDef Init) /* Check the parameters */ assert_param(IS_SDMMC_ALL_INSTANCE(SDMMCx)); assert_param(IS_SDMMC_CLOCK_EDGE(Init.ClockEdge)); +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) assert_param(IS_SDMMC_CLOCK_BYPASS(Init.ClockBypass)); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ assert_param(IS_SDMMC_CLOCK_POWER_SAVE(Init.ClockPowerSave)); assert_param(IS_SDMMC_BUS_WIDE(Init.BusWide)); assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(Init.HardwareFlowControl)); @@ -242,12 +242,20 @@ HAL_StatusTypeDef SDMMC_Init(SDMMC_TypeDef *SDMMCx, SDMMC_InitTypeDef Init) /* Set SDMMC configuration parameters */ /* Write to SDMMC CLKCR */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + MODIFY_REG(SDMMCx->CLKCR, CLKCR_CLEAR_MASK, Init.ClockEdge |\ + Init.ClockPowerSave |\ + Init.BusWide |\ + Init.HardwareFlowControl |\ + Init.ClockDiv); +#else MODIFY_REG(SDMMCx->CLKCR, CLKCR_CLEAR_MASK, Init.ClockEdge |\ Init.ClockBypass |\ Init.ClockPowerSave |\ Init.BusWide |\ Init.HardwareFlowControl |\ Init.ClockDiv); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ return HAL_OK; } @@ -324,11 +332,32 @@ HAL_StatusTypeDef SDMMC_WriteFIFO(SDMMC_TypeDef *SDMMCx, uint32_t *pWriteData) HAL_StatusTypeDef SDMMC_PowerState_ON(SDMMC_TypeDef *SDMMCx) { /* Set power state to ON */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + SDMMCx->POWER |= SDMMC_POWER_PWRCTRL; + +#else SDMMCx->POWER = SDMMC_POWER_PWRCTRL; + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ return HAL_OK; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** + * @brief Set SDMMC Power state to Power-Cycle. + * @param SDMMCx: Pointer to SDMMC register base + * @retval HAL status + */ +HAL_StatusTypeDef SDMMC_PowerState_Cycle(SDMMC_TypeDef *SDMMCx) +{ + /* Set power state to Power Cycle*/ + SDMMCx->POWER |= SDMMC_POWER_PWRCTRL_1; + + return HAL_OK; +} +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** * @brief Set SDMMC Power state to OFF. * @param SDMMCx: Pointer to SDMMC register base @@ -337,7 +366,13 @@ HAL_StatusTypeDef SDMMC_PowerState_ON(SDMMC_TypeDef *SDMMCx) HAL_StatusTypeDef SDMMC_PowerState_OFF(SDMMC_TypeDef *SDMMCx) { /* Set power state to OFF */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + SDMMCx->POWER &= ~(SDMMC_POWER_PWRCTRL); + +#else SDMMCx->POWER = (uint32_t)0x00000000; + +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ return HAL_OK; } @@ -894,7 +929,11 @@ uint32_t SDMMC_CmdAppOperCommand(SDMMC_TypeDef *SDMMCx, uint32_t Argument) SDMMC_CmdInitTypeDef sdmmc_cmdinit; uint32_t errorstate = SDMMC_ERROR_NONE; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + sdmmc_cmdinit.Argument = Argument; +#else sdmmc_cmdinit.Argument = SDMMC_VOLTAGE_WINDOW_SD | Argument; +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ sdmmc_cmdinit.CmdIndex = SDMMC_CMD_SD_APP_OP_COND; sdmmc_cmdinit.Response = SDMMC_RESPONSE_SHORT; sdmmc_cmdinit.WaitForInterrupt = SDMMC_WAIT_NO; @@ -1125,6 +1164,32 @@ uint32_t SDMMC_CmdSwitch(SDMMC_TypeDef *SDMMCx, uint32_t Argument) return errorstate; } +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** + * @brief Send the command asking the accessed card to send its operating + * condition register (OCR) + * @param None + * @retval HAL status + */ +uint32_t SDMMC_CmdVoltageSwitch(SDMMC_TypeDef *SDMMCx) +{ + SDMMC_CmdInitTypeDef sdmmc_cmdinit; + uint32_t errorstate = SDMMC_ERROR_NONE; + + sdmmc_cmdinit.Argument = 0x00000000; + sdmmc_cmdinit.CmdIndex = SDMMC_CMD_VOLTAGE_SWITCH; + sdmmc_cmdinit.Response = SDMMC_RESPONSE_SHORT; + sdmmc_cmdinit.WaitForInterrupt = SDMMC_WAIT_NO; + sdmmc_cmdinit.CPSM = SDMMC_CPSM_ENABLE; + SDMMC_SendCommand(SDMMCx, &sdmmc_cmdinit); + + /* Check for error conditions */ + errorstate = SDMMC_GetCmdResp1(SDMMCx, SDMMC_CMD_VOLTAGE_SWITCH, SDMMC_CMDTIMEOUT); + + return errorstate; +} +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** * @} @@ -1156,7 +1221,7 @@ static uint32_t SDMMC_GetCmdError(SDMMC_TypeDef *SDMMCx) }while(!__SDMMC_GET_FLAG(SDMMCx, SDMMC_FLAG_CMDSENT)); /* Clear all the static flags */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_FLAGS); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS); return SDMMC_ERROR_NONE; } @@ -1207,7 +1272,7 @@ static uint32_t SDMMC_GetCmdResp1(SDMMC_TypeDef *SDMMCx, uint8_t SD_CMD, uint32_ } /* Clear all the static flags */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_FLAGS); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS); /* We have received response, retrieve it for analysis */ response_r1 = SDMMC_GetResponse(SDMMCx, SDMMC_RESP1); @@ -1330,7 +1395,7 @@ static uint32_t SDMMC_GetCmdResp2(SDMMC_TypeDef *SDMMCx) { /* No error flag set */ /* Clear all the static flags */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_FLAGS); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS); } return SDMMC_ERROR_NONE; @@ -1363,10 +1428,9 @@ static uint32_t SDMMC_GetCmdResp3(SDMMC_TypeDef *SDMMCx) return SDMMC_ERROR_CMD_RSP_TIMEOUT; } else - { /* Clear all the static flags */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_FLAGS); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS); } return SDMMC_ERROR_NONE; @@ -1417,7 +1481,7 @@ static uint32_t SDMMC_GetCmdResp6(SDMMC_TypeDef *SDMMCx, uint8_t SD_CMD, uint16_ } /* Clear all the static flags */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_FLAGS); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS); /* We have received response, retrieve it. */ response_r1 = SDMMC_GetResponse(SDMMCx, SDMMC_RESP1); @@ -1465,11 +1529,19 @@ static uint32_t SDMMC_GetCmdResp7(SDMMC_TypeDef *SDMMCx) if(__SDMMC_GET_FLAG(SDMMCx, SDMMC_FLAG_CTIMEOUT)) { /* Card is SD V2.0 compliant */ - __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_FLAG_CMDREND); + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_FLAG_CTIMEOUT); return SDMMC_ERROR_CMD_RSP_TIMEOUT; } + else if(__SDMMC_GET_FLAG(SDMMCx, SDMMC_FLAG_CCRCFAIL)) + { + /* Card is SD V2.0 compliant */ + __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_FLAG_CCRCFAIL); + + return SDMMC_ERROR_CMD_CRC_FAIL; + } + if(__SDMMC_GET_FLAG(SDMMCx, SDMMC_FLAG_CMDREND)) { /* Card is SD V2.0 compliant */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.h index 8b1b0183c6..41996af8e0 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_sdmmc.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_sdmmc.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of low layer SDMMC HAL module. ****************************************************************************** * @attention @@ -69,9 +67,11 @@ typedef struct uint32_t ClockEdge; /*!< Specifies the clock transition on which the bit capture is made. This parameter can be a value of @ref SDMMC_LL_Clock_Edge */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) uint32_t ClockBypass; /*!< Specifies whether the SDMMC Clock divider bypass is enabled or disabled. This parameter can be a value of @ref SDMMC_LL_Clock_Bypass */ +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ uint32_t ClockPowerSave; /*!< Specifies whether SDMMC Clock output is enabled or disabled when the bus is idle. @@ -86,6 +86,11 @@ typedef struct uint32_t ClockDiv; /*!< Specifies the clock frequency of the SDMMC controller. This parameter can be a value between Min_Data = 0 and Max_Data = 255 */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t Transceiver; /*!< Specifies whether external Transceiver is enabled or disabled. + This parameter can be a value of @ref SDMMC_LL_Transceiver */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + }SDMMC_InitTypeDef; @@ -200,7 +205,11 @@ typedef struct and asks the card whether card supports voltage. */ #define SDMMC_CMD_SEND_CSD ((uint8_t)9U) /*!< Addressed card sends its card specific data (CSD) on the CMD line. */ #define SDMMC_CMD_SEND_CID ((uint8_t)10U) /*!< Addressed card sends its card identification (CID) on the CMD line. */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SDMMC_CMD_VOLTAGE_SWITCH ((uint8_t)11U) /*!< SD card Voltage switch to 1.8V mode. */ +#else #define SDMMC_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11U) /*!< SD card doesn't support it. */ +#endif #define SDMMC_CMD_STOP_TRANSMISSION ((uint8_t)12U) /*!< Forces the card to stop transmission. */ #define SDMMC_CMD_SEND_STATUS ((uint8_t)13U) /*!< Addressed card sends its status register. */ #define SDMMC_CMD_HS_BUSTEST_READ ((uint8_t)14U) /*!< Reserved */ @@ -307,6 +316,11 @@ typedef struct #define SDMMC_HIGH_CAPACITY ((uint32_t)0x40000000U) #define SDMMC_STD_CAPACITY ((uint32_t)0x00000000U) #define SDMMC_CHECK_PATTERN ((uint32_t)0x000001AAU) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SD_SWITCH_1_8V_CAPACITY ((uint32_t)0x01000000U) +#define SDMMC_SDR50_SWITCH_PATTERN ((uint32_t)0x80FF1F02U) +#define SDMMC_SDR25_SWITCH_PATTERN ((uint32_t)0x80FFFF01U) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define SDMMC_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFFU) @@ -334,8 +348,8 @@ typedef struct */ #define SDMMC_CCCC_ERASE ((uint32_t)0x00000020U) -#define SDMMC_CMDTIMEOUT ((uint32_t)5000U) /* Command send and response timeout */ -#define SDMMC_MAXERASETIMEOUT ((uint32_t)63000U) /* Max erase Timeout 63 s */ +#define SDMMC_CMDTIMEOUT ((uint32_t)5000U) /* Command send and response timeout */ +#define SDMMC_MAXERASETIMEOUT ((uint32_t)63000U) /* Max erase Timeout 63 s */ #define SDMMC_STOPTRANSFERTIMEOUT ((uint32_t)100000000U) /* Timeout for STOP TRANSMISSION command */ /** @defgroup SDMMC_LL_Clock_Edge Clock Edge @@ -350,6 +364,7 @@ typedef struct * @} */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /** @defgroup SDMMC_LL_Clock_Bypass Clock Bypass * @{ */ @@ -361,6 +376,7 @@ typedef struct /** * @} */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** @defgroup SDMMC_LL_Clock_Power_Save Clock Power Saving * @{ @@ -403,12 +419,31 @@ typedef struct /** @defgroup SDMMC_LL_Clock_Division Clock Division * @{ */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/* SDMMC_CK frequency = SDMMCCLK / [2 * CLKDIV] */ +#define IS_SDMMC_CLKDIV(DIV) ((DIV) < 0x400) +#else #define IS_SDMMC_CLKDIV(DIV) ((DIV) <= 0xFF) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup SDMMC_LL_Transceiver Transceiver + * @{ + */ +#define SDMMC_TRANSCEIVER_DISABLE ((uint32_t)0x00000000U) +#define SDMMC_TRANSCEIVER_ENABLE ((uint32_t)0x00000001U) + +#define IS_SDMMC_TRANSCEIVER(MODE) (((MODE) == SDMMC_TRANSCEIVER_DISABLE) || \ + ((MODE) == SDMMC_TRANSCEIVER_ENABLE)) +/** + * @} + */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ + /** @defgroup SDMMC_LL_Command_Index Command Index * @{ */ @@ -470,6 +505,19 @@ typedef struct ((RESP) == SDMMC_RESP3) || \ ((RESP) == SDMMC_RESP4)) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +/** @defgroup SDMMC_Internal_DMA_Mode SDMMC Internal DMA Mode + * @{ + */ +#define SDMMC_DISABLE_IDMA ((uint32_t)0x00000000) +#define SDMMC_ENABLE_IDMA_SINGLE_BUFF (SDMMC_IDMA_IDMAEN) +#define SDMMC_ENABLE_IDMA_DOUBLE_BUFF0 (SDMMC_IDMA_IDMAEN | SDMMC_IDMA_IDMABMODE) +#define SDMMC_ENABLE_IDMA_DOUBLE_BUFF1 (SDMMC_IDMA_IDMAEN | SDMMC_IDMA_IDMABMODE | SDMMC_IDMA_IDMABACT) + +/** + * @} + */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -536,7 +584,11 @@ typedef struct * @{ */ #define SDMMC_TRANSFER_MODE_BLOCK ((uint32_t)0x00000000U) +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SDMMC_TRANSFER_MODE_STREAM SDMMC_DCTRL_DTMODE_1 +#else #define SDMMC_TRANSFER_MODE_STREAM SDMMC_DCTRL_DTMODE +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #define IS_SDMMC_TRANSFER_MODE(MODE) (((MODE) == SDMMC_TRANSFER_MODE_BLOCK) || \ ((MODE) == SDMMC_TRANSFER_MODE_STREAM)) @@ -571,28 +623,39 @@ typedef struct /** @defgroup SDMMC_LL_Interrupt_sources Interrupt Sources * @{ */ -#define SDMMC_IT_CCRCFAIL SDMMC_STA_CCRCFAIL -#define SDMMC_IT_DCRCFAIL SDMMC_STA_DCRCFAIL -#define SDMMC_IT_CTIMEOUT SDMMC_STA_CTIMEOUT -#define SDMMC_IT_DTIMEOUT SDMMC_STA_DTIMEOUT -#define SDMMC_IT_TXUNDERR SDMMC_STA_TXUNDERR -#define SDMMC_IT_RXOVERR SDMMC_STA_RXOVERR -#define SDMMC_IT_CMDREND SDMMC_STA_CMDREND -#define SDMMC_IT_CMDSENT SDMMC_STA_CMDSENT -#define SDMMC_IT_DATAEND SDMMC_STA_DATAEND -#define SDMMC_IT_DBCKEND SDMMC_STA_DBCKEND -#define SDMMC_IT_TXFIFOHE SDMMC_STA_TXFIFOHE -#define SDMMC_IT_RXFIFOHF SDMMC_STA_RXFIFOHF -#define SDMMC_IT_TXFIFOF SDMMC_STA_TXFIFOF -#define SDMMC_IT_RXFIFOF SDMMC_STA_RXFIFOF -#define SDMMC_IT_TXFIFOE SDMMC_STA_TXFIFOE -#define SDMMC_IT_RXFIFOE SDMMC_STA_RXFIFOE -#define SDMMC_IT_SDIOIT SDMMC_STA_SDIOIT -#define SDMMC_IT_CMDACT SDMMC_STA_CMDACT -#define SDMMC_IT_TXACT SDMMC_STA_TXACT -#define SDMMC_IT_RXACT SDMMC_STA_RXACT -#define SDMMC_IT_TXDAVL SDMMC_STA_TXDAVL -#define SDMMC_IT_RXDAVL SDMMC_STA_RXDAVL +#define SDMMC_IT_CCRCFAIL SDMMC_MASK_CCRCFAILIE +#define SDMMC_IT_DCRCFAIL SDMMC_MASK_DCRCFAILIE +#define SDMMC_IT_CTIMEOUT SDMMC_MASK_CTIMEOUTIE +#define SDMMC_IT_DTIMEOUT SDMMC_MASK_DTIMEOUTIE +#define SDMMC_IT_TXUNDERR SDMMC_MASK_TXUNDERRIE +#define SDMMC_IT_RXOVERR SDMMC_MASK_RXOVERRIE +#define SDMMC_IT_CMDREND SDMMC_MASK_CMDRENDIE +#define SDMMC_IT_CMDSENT SDMMC_MASK_CMDSENTIE +#define SDMMC_IT_DATAEND SDMMC_MASK_DATAENDIE +#define SDMMC_IT_DBCKEND SDMMC_MASK_DBCKENDIE +#define SDMMC_IT_TXFIFOHE SDMMC_MASK_TXFIFOHEIE +#define SDMMC_IT_RXFIFOHF SDMMC_MASK_RXFIFOHFIE +#define SDMMC_IT_RXFIFOF SDMMC_MASK_RXFIFOFIE +#define SDMMC_IT_TXFIFOE SDMMC_MASK_TXFIFOEIE +#define SDMMC_IT_SDIOIT SDMMC_MASK_SDIOITIE +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SDMMC_IT_DHOLD SDMMC_MASK_DHOLDIE +#define SDMMC_IT_DABORT SDMMC_MASK_DABORTIE +#define SDMMC_IT_BUSYD0END SDMMC_MASK_BUSYD0ENDIE +#define SDMMC_IT_ACKFAIL SDMMC_MASK_ACKFAILIE +#define SDMMC_IT_ACKTIMEOUT SDMMC_MASK_ACKTIMEOUTIE +#define SDMMC_IT_VSWEND SDMMC_MASK_VSWENDIE +#define SDMMC_IT_CKSTOP SDMMC_MASK_CKSTOPIE +#define SDMMC_IT_IDMABTC SDMMC_MASK_IDMABTCIE +#else +#define SDMMC_IT_CMDACT SDMMC_MASK_CMDACTIE +#define SDMMC_IT_TXACT SDMMC_MASK_TXACTIE +#define SDMMC_IT_RXACT SDMMC_MASK_RXACTIE +#define SDMMC_IT_TXFIFOF SDMMC_MASK_TXFIFOFIE +#define SDMMC_IT_RXFIFOE SDMMC_MASK_RXFIFOEIE +#define SDMMC_IT_TXDAVL SDMMC_MASK_TXDAVLIE +#define SDMMC_IT_RXDAVL SDMMC_MASK_RXDAVLIE +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} */ @@ -617,16 +680,56 @@ typedef struct #define SDMMC_FLAG_TXFIFOE SDMMC_STA_TXFIFOE #define SDMMC_FLAG_RXFIFOE SDMMC_STA_RXFIFOE #define SDMMC_FLAG_SDIOIT SDMMC_STA_SDIOIT +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SDMMC_FLAG_DHOLD SDMMC_STA_DHOLD +#define SDMMC_FLAG_DABORT SDMMC_STA_DABORT +#define SDMMC_FLAG_DPSMACT SDMMC_STA_DPSMACT +#define SDMMC_FLAG_CMDACT SDMMC_STA_CPSMACT +#define SDMMC_FLAG_BUSYD0 SDMMC_STA_BUSYD0 +#define SDMMC_FLAG_BUSYD0END SDMMC_STA_BUSYD0END +#define SDMMC_FLAG_ACKFAIL SDMMC_STA_ACKFAIL +#define SDMMC_FLAG_ACKTIMEOUT SDMMC_STA_ACKTIMEOUT +#define SDMMC_FLAG_VSWEND SDMMC_STA_VSWEND +#define SDMMC_FLAG_CKSTOP SDMMC_STA_CKSTOP +#define SDMMC_FLAG_IDMATE SDMMC_STA_IDMATE +#define SDMMC_FLAG_IDMABTC SDMMC_STA_IDMABTC +#else #define SDMMC_FLAG_CMDACT SDMMC_STA_CMDACT #define SDMMC_FLAG_TXACT SDMMC_STA_TXACT #define SDMMC_FLAG_RXACT SDMMC_STA_RXACT #define SDMMC_FLAG_TXDAVL SDMMC_STA_TXDAVL #define SDMMC_FLAG_RXDAVL SDMMC_STA_RXDAVL +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define SDMMC_STATIC_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_CTIMEOUT |\ + SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_RXOVERR |\ + SDMMC_FLAG_CMDREND | SDMMC_FLAG_CMDSENT | SDMMC_FLAG_DATAEND |\ + SDMMC_FLAG_DHOLD | SDMMC_FLAG_DBCKEND | SDMMC_FLAG_DABORT |\ + SDMMC_FLAG_BUSYD0END | SDMMC_FLAG_SDIOIT | SDMMC_FLAG_ACKFAIL |\ + SDMMC_FLAG_ACKTIMEOUT | SDMMC_FLAG_VSWEND | SDMMC_FLAG_CKSTOP |\ + SDMMC_FLAG_IDMATE | SDMMC_FLAG_IDMABTC)) + +#define SDMMC_STATIC_CMD_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_CTIMEOUT | SDMMC_FLAG_CMDREND |\ + SDMMC_FLAG_CMDSENT | SDMMC_FLAG_BUSYD0END)) + +#define SDMMC_STATIC_DATA_FLAGS ((uint32_t)(SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR |\ + SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DATAEND | SDMMC_FLAG_DHOLD |\ + SDMMC_FLAG_DBCKEND | SDMMC_FLAG_DABORT | SDMMC_FLAG_IDMATE |\ + SDMMC_FLAG_IDMABTC)) + +#else #define SDMMC_STATIC_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_CTIMEOUT |\ SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_RXOVERR |\ SDMMC_FLAG_CMDREND | SDMMC_FLAG_CMDSENT | SDMMC_FLAG_DATAEND |\ - SDMMC_FLAG_DBCKEND)) + SDMMC_FLAG_DBCKEND | SDMMC_FLAG_SDIOIT)) + +#define SDMMC_STATIC_CMD_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_CTIMEOUT | SDMMC_FLAG_CMDREND |\ + SDMMC_FLAG_CMDSENT)) + +#define SDMMC_STATIC_DATA_FLAGS ((uint32_t)(SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR |\ + SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DATAEND | SDMMC_FLAG_DBCKEND)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} @@ -648,9 +751,15 @@ typedef struct /* ---------------------- SDMMC registers bit mask --------------------------- */ /* --- CLKCR Register ---*/ /* CLKCR register clear mask */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define CLKCR_CLEAR_MASK ((uint32_t)(SDMMC_CLKCR_CLKDIV | SDMMC_CLKCR_PWRSAV |\ + SDMMC_CLKCR_WIDBUS |\ + SDMMC_CLKCR_NEGEDGE | SDMMC_CLKCR_HWFC_EN)) +#else #define CLKCR_CLEAR_MASK ((uint32_t)(SDMMC_CLKCR_CLKDIV | SDMMC_CLKCR_PWRSAV |\ SDMMC_CLKCR_BYPASS | SDMMC_CLKCR_WIDBUS |\ SDMMC_CLKCR_NEGEDGE | SDMMC_CLKCR_HWFC_EN)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /* --- DCTRL Register ---*/ /* SDMMC DCTRL Clear Mask */ @@ -659,15 +768,29 @@ typedef struct /* --- CMD Register ---*/ /* CMD Register clear mask */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define CMD_CLEAR_MASK ((uint32_t)(SDMMC_CMD_CMDINDEX | SDMMC_CMD_WAITRESP |\ + SDMMC_CMD_WAITINT | SDMMC_CMD_WAITPEND |\ + SDMMC_CMD_CPSMEN | SDMMC_CMD_CMDSUSPEND)) +#else #define CMD_CLEAR_MASK ((uint32_t)(SDMMC_CMD_CMDINDEX | SDMMC_CMD_WAITRESP |\ SDMMC_CMD_WAITINT | SDMMC_CMD_WAITPEND |\ SDMMC_CMD_CPSMEN | SDMMC_CMD_SDIOSUSPEND)) +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* SDMMC Initialization Frequency (400KHz max) */ -#define SDMMC_INIT_CLK_DIV ((uint8_t)0x76) +#define SDMMC_INIT_CLK_DIV ((uint8_t)0x3C) /* 48MHz / (SDMMC_INIT_CLK_DIV * 2) < 400KHz */ /* SDMMC Data Transfer Frequency (25MHz max) */ -#define SDMMC_TRANSFER_CLK_DIV ((uint8_t)0x0) +#define SDMMC_TRANSFER_CLK_DIV ((uint8_t)0x1) /* 48MHz / (SDMMC_TRANSFER_CLK_DIV * 2) < 25MHz */ +#else +/* SDMMC Initialization Frequency (400KHz max) */ +#define SDMMC_INIT_CLK_DIV ((uint8_t)0x76) /* 48MHz / (SDMMC_INIT_CLK_DIV + 2) < 400KHz */ + +/* SDMMC Data Transfer Frequency (25MHz max) */ +#define SDMMC_TRANSFER_CLK_DIV ((uint8_t)0x0) /* 48MHz / (SDMMC_TRANSFER_CLK_DIV + 2) < 25MHz */ +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} @@ -678,6 +801,7 @@ typedef struct * @{ */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) /** * @brief Enable the SDMMC device. * @param __INSTANCE__: SDMMC Instance @@ -704,6 +828,7 @@ typedef struct * @retval None */ #define __SDMMC_DMA_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_DMAEN) +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /** * @brief Enable the SDMMC device interrupt. @@ -966,15 +1091,23 @@ typedef struct * @param __INSTANCE__: Pointer to SDMMC register base * @retval None */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) #define __SDMMC_SUSPEND_CMD_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_SDIOSUSPEND) +#else +#define __SDMMC_SUSPEND_CMD_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_CMDSUSPEND) +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ /** * @brief Disable the SD I/O Suspend command sending. * @param __INSTANCE__: Pointer to SDMMC register base * @retval None */ +#if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) #define __SDMMC_SUSPEND_CMD_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_SDIOSUSPEND) - +#else +#define __SDMMC_SUSPEND_CMD_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_CMDSUSPEND) +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ + /** * @brief Enable the CMDTRANS mode. * @param __INSTANCE__ : Pointer to SDMMC register base @@ -1025,6 +1158,9 @@ HAL_StatusTypeDef SDMMC_WriteFIFO(SDMMC_TypeDef *SDMMCx, uint32_t *pWriteData); * @{ */ HAL_StatusTypeDef SDMMC_PowerState_ON(SDMMC_TypeDef *SDMMCx); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +HAL_StatusTypeDef SDMMC_PowerState_Cycle(SDMMC_TypeDef *SDMMCx); +#endif /* !STM32L4R5xx && !STM32L4R7xx && !STM32L4R9xx && !STM32L4S5xx && !STM32L4S7xx && !STM32L4S9xx */ HAL_StatusTypeDef SDMMC_PowerState_OFF(SDMMC_TypeDef *SDMMCx); uint32_t SDMMC_GetPowerState(SDMMC_TypeDef *SDMMCx); @@ -1067,6 +1203,9 @@ uint32_t SDMMC_CmdSendStatus(SDMMC_TypeDef *SDMMCx, uint32_t Argument); uint32_t SDMMC_CmdStatusRegister(SDMMC_TypeDef *SDMMCx); uint32_t SDMMC_CmdOpCondition(SDMMC_TypeDef *SDMMCx, uint32_t Argument); uint32_t SDMMC_CmdSwitch(SDMMC_TypeDef *SDMMCx, uint32_t Argument); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +uint32_t SDMMC_CmdVoltageSwitch(SDMMC_TypeDef *SDMMCx); +#endif /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ /** * @} diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.c index 4d3e260233..99e28de235 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_spi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SPI LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.h index 16fc9cdc47..b88bcd537c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_spi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_spi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SPI LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.c index 949bc6d327..083b96f141 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_swpmi.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief SWPMI LL module driver. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.h index a2452f46a0..4193ed5c22 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_swpmi.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_swpmi.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SWPMI LL module. ****************************************************************************** * @attention diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_system.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_system.h index 409db3d0b5..e1ed494005 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_system.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_system.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_system.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of SYSTEM LL module. @verbatim ============================================================================== @@ -77,15 +75,12 @@ extern "C" { * @{ */ -/* Defines used for position in the register */ -#define DBGMCU_REVID_POSITION (uint32_t)POSITION_VAL(DBGMCU_IDCODE_REV_ID) - /** * @brief Power-down in Run mode Flash key */ -#define FLASH_PDKEY1 ((uint32_t)0x04152637U) /*!< Flash power down key1 */ -#define FLASH_PDKEY2 ((uint32_t)0xFAFBFCFDU) /*!< Flash power down key2: used with FLASH_PDKEY1 - to unlock the RUN_PD bit in FLASH_ACR */ +#define FLASH_PDKEY1 0x04152637U /*!< Flash power down key1 */ +#define FLASH_PDKEY2 0xFAFBFCFDU /*!< Flash power down key2: used with FLASH_PDKEY1 + to unlock the RUN_PD bit in FLASH_ACR */ /** * @} @@ -377,6 +372,19 @@ extern "C" { #define LL_FLASH_LATENCY_2 FLASH_ACR_LATENCY_2WS /*!< FLASH Two wait states */ #define LL_FLASH_LATENCY_3 FLASH_ACR_LATENCY_3WS /*!< FLASH Three wait states */ #define LL_FLASH_LATENCY_4 FLASH_ACR_LATENCY_4WS /*!< FLASH Four wait states */ +#if defined(FLASH_ACR_LATENCY_5WS) +#define LL_FLASH_LATENCY_5 FLASH_ACR_LATENCY_5WS /*!< FLASH five wait state */ +#define LL_FLASH_LATENCY_6 FLASH_ACR_LATENCY_6WS /*!< FLASH six wait state */ +#define LL_FLASH_LATENCY_7 FLASH_ACR_LATENCY_7WS /*!< FLASH seven wait states */ +#define LL_FLASH_LATENCY_8 FLASH_ACR_LATENCY_8WS /*!< FLASH eight wait states */ +#define LL_FLASH_LATENCY_9 FLASH_ACR_LATENCY_9WS /*!< FLASH nine wait states */ +#define LL_FLASH_LATENCY_10 FLASH_ACR_LATENCY_10WS /*!< FLASH ten wait states */ +#define LL_FLASH_LATENCY_11 FLASH_ACR_LATENCY_11WS /*!< FLASH eleven wait states */ +#define LL_FLASH_LATENCY_12 FLASH_ACR_LATENCY_12WS /*!< FLASH twelve wait states */ +#define LL_FLASH_LATENCY_13 FLASH_ACR_LATENCY_13WS /*!< FLASH thirteen wait states */ +#define LL_FLASH_LATENCY_14 FLASH_ACR_LATENCY_14WS /*!< FLASH fourteen wait states */ +#define LL_FLASH_LATENCY_15 FLASH_ACR_LATENCY_15WS /*!< FLASH fifteen wait states */ +#endif /** * @} */ @@ -1049,7 +1057,7 @@ __STATIC_INLINE uint32_t LL_DBGMCU_GetDeviceID(void) */ __STATIC_INLINE uint32_t LL_DBGMCU_GetRevisionID(void) { - return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_REV_ID) >> DBGMCU_REVID_POSITION); + return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_REV_ID) >> DBGMCU_IDCODE_REV_ID_Pos); } /** @@ -1390,6 +1398,19 @@ __STATIC_INLINE void LL_VREFBUF_SetTrimming(uint32_t Value) * @arg @ref LL_FLASH_LATENCY_2 * @arg @ref LL_FLASH_LATENCY_3 * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 (*) + * @arg @ref LL_FLASH_LATENCY_6 (*) + * @arg @ref LL_FLASH_LATENCY_7 (*) + * @arg @ref LL_FLASH_LATENCY_8 (*) + * @arg @ref LL_FLASH_LATENCY_9 (*) + * @arg @ref LL_FLASH_LATENCY_10 (*) + * @arg @ref LL_FLASH_LATENCY_11 (*) + * @arg @ref LL_FLASH_LATENCY_12 (*) + * @arg @ref LL_FLASH_LATENCY_13 (*) + * @arg @ref LL_FLASH_LATENCY_14 (*) + * @arg @ref LL_FLASH_LATENCY_15 (*) + * + * (*) value not defined in all devices. * @retval None */ __STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency) @@ -1406,6 +1427,19 @@ __STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency) * @arg @ref LL_FLASH_LATENCY_2 * @arg @ref LL_FLASH_LATENCY_3 * @arg @ref LL_FLASH_LATENCY_4 + * @arg @ref LL_FLASH_LATENCY_5 (*) + * @arg @ref LL_FLASH_LATENCY_6 (*) + * @arg @ref LL_FLASH_LATENCY_7 (*) + * @arg @ref LL_FLASH_LATENCY_8 (*) + * @arg @ref LL_FLASH_LATENCY_9 (*) + * @arg @ref LL_FLASH_LATENCY_10 (*) + * @arg @ref LL_FLASH_LATENCY_11 (*) + * @arg @ref LL_FLASH_LATENCY_12 (*) + * @arg @ref LL_FLASH_LATENCY_13 (*) + * @arg @ref LL_FLASH_LATENCY_14 (*) + * @arg @ref LL_FLASH_LATENCY_15 (*) + * + * (*) value not defined in all devices. */ __STATIC_INLINE uint32_t LL_FLASH_GetLatency(void) { diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.c index ca7cfed782..4ae0d28f2a 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_tim.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief TIM LL module driver. ****************************************************************************** * @attention @@ -172,24 +170,24 @@ || ((__VALUE__) == LL_TIM_BREAK2_ENABLE)) #define IS_LL_TIM_BREAK2_POLARITY(__VALUE__) (((__VALUE__) == LL_TIM_BREAK2_POLARITY_LOW) \ - || ((__VALUE__) == LL_TIM_BREAK2_POLARITY_HIGH)) + || ((__VALUE__) == LL_TIM_BREAK2_POLARITY_HIGH)) #define IS_LL_TIM_BREAK2_FILTER(__VALUE__) (((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N2) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N4) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N8) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV2_N6) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV2_N8) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV4_N6) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV4_N8) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV8_N6) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV8_N8) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N5) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N6) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N8) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N5) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N6) \ - || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N8)) + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N2) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N4) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV1_N8) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV2_N6) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV2_N8) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV4_N6) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV4_N8) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV8_N6) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV8_N8) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N5) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N6) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV16_N8) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N5) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N6) \ + || ((__VALUE__) == LL_TIM_BREAK2_FILTER_FDIV32_N8)) #define IS_LL_TIM_AUTOMATIC_OUTPUT_STATE(__VALUE__) (((__VALUE__) == LL_TIM_AUTOMATICOUTPUT_DISABLE) \ || ((__VALUE__) == LL_TIM_AUTOMATICOUTPUT_ENABLE)) @@ -323,11 +321,11 @@ ErrorStatus LL_TIM_DeInit(TIM_TypeDef *TIMx) void LL_TIM_StructInit(LL_TIM_InitTypeDef *TIM_InitStruct) { /* Set the default configuration */ - TIM_InitStruct->Prescaler = (uint16_t)0x0000U; + TIM_InitStruct->Prescaler = (uint16_t)0x0000; TIM_InitStruct->CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct->Autoreload = 0xFFFFFFFFU; TIM_InitStruct->ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; - TIM_InitStruct->RepetitionCounter = (uint8_t)0x00U; + TIM_InitStruct->RepetitionCounter = (uint8_t)0x00; } /** @@ -703,7 +701,7 @@ void LL_TIM_BDTR_StructInit(LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct) TIM_BDTRInitStruct->OSSRState = LL_TIM_OSSR_DISABLE; TIM_BDTRInitStruct->OSSIState = LL_TIM_OSSI_DISABLE; TIM_BDTRInitStruct->LockLevel = LL_TIM_LOCKLEVEL_OFF; - TIM_BDTRInitStruct->DeadTime = (uint8_t)0x00U; + TIM_BDTRInitStruct->DeadTime = (uint8_t)0x00; TIM_BDTRInitStruct->BreakState = LL_TIM_BREAK_DISABLE; TIM_BDTRInitStruct->BreakPolarity = LL_TIM_BREAK_POLARITY_LOW; TIM_BDTRInitStruct->BreakFilter = LL_TIM_BREAK_FILTER_FDIV1; @@ -716,7 +714,7 @@ void LL_TIM_BDTR_StructInit(LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct) /** * @brief Configure the Break and Dead Time feature of the timer instance. * @note As the bits BK2P, BK2E, BK2F[3:0], BKF[3:0], AOE, BKP, BKE, OSSI, OSSR - * and DTG[7:0] can be write-locked depending on the LOCK configuration, it + * and DTG[7:0] can be write-locked depending on the LOCK configuration, it * can be necessary to configure all of them during the first write access to * the TIMx_BDTR register. * @note Macro @ref IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not @@ -732,7 +730,7 @@ void LL_TIM_BDTR_StructInit(LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct) ErrorStatus LL_TIM_BDTR_Init(TIM_TypeDef *TIMx, LL_TIM_BDTR_InitTypeDef *TIM_BDTRInitStruct) { uint32_t tmpbdtr = 0; - + /* Check the parameters */ assert_param(IS_TIM_BREAK_INSTANCE(TIMx)); assert_param(IS_LL_TIM_OSSR_STATE(TIM_BDTRInitStruct->OSSRState)); @@ -741,10 +739,10 @@ ErrorStatus LL_TIM_BDTR_Init(TIM_TypeDef *TIMx, LL_TIM_BDTR_InitTypeDef *TIM_BDT assert_param(IS_LL_TIM_BREAK_STATE(TIM_BDTRInitStruct->BreakState)); assert_param(IS_LL_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->BreakPolarity)); assert_param(IS_LL_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->AutomaticOutput)); - + /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State, the OSSI State, the dead time value and the Automatic Output Enable Bit */ - + /* Set the BDTR bits */ MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, TIM_BDTRInitStruct->DeadTime); MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, TIM_BDTRInitStruct->LockLevel); @@ -765,16 +763,16 @@ ErrorStatus LL_TIM_BDTR_Init(TIM_TypeDef *TIMx, LL_TIM_BDTR_InitTypeDef *TIM_BDT assert_param(IS_LL_TIM_BREAK2_STATE(TIM_BDTRInitStruct->Break2State)); assert_param(IS_LL_TIM_BREAK2_POLARITY(TIM_BDTRInitStruct->Break2Polarity)); assert_param(IS_LL_TIM_BREAK2_FILTER(TIM_BDTRInitStruct->Break2Filter)); - + /* Set the BREAK2 input related BDTR bit-fields */ MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (TIM_BDTRInitStruct->Break2Filter)); MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, TIM_BDTRInitStruct->Break2State); MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, TIM_BDTRInitStruct->Break2Polarity); } - + /* Set TIMx_BDTR */ LL_TIM_WriteReg(TIMx, BDTR, tmpbdtr); - + return SUCCESS; } /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.h index 0556e17596..ab0dd4e6d6 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_tim.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_tim.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of TIM LL module. ****************************************************************************** * @attention @@ -159,7 +157,7 @@ static const uint8_t SHIFT_TAB_OISx[] = #endif /* DFSDM1_Channel0 */ #define TIMx_OR3_BK2INP TIM1_OR3_BK2INP /*!< BRK2 BKIN2 input polarity */ #define TIMx_OR3_BK2COMP1P TIM1_OR3_BK2CMP1P /*!< BRK2 COMP1 input polarity */ -#define TIMx_OR3_BK2COMP2P TIM1_OR3_BK2CMP2P /*!< BRK2 COMP2 input polarity */ +#define TIMx_OR3_BK2COMP2P TIM1_OR3_BK2CMP2P /*!< BRK2 COMP2 input polarity */ /* Remap mask definitions */ #define TIMx_OR1_RMP_SHIFT 16U @@ -171,22 +169,26 @@ static const uint8_t SHIFT_TAB_OISx[] = #endif /* ADC3 */ #define TIM2_OR1_RMP_MASK ((TIM2_OR1_TI4_RMP | TIM2_OR1_ETR1_RMP | TIM2_OR1_ITR1_RMP) << TIMx_OR1_RMP_SHIFT) #define TIM3_OR1_RMP_MASK (TIM3_OR1_TI1_RMP << TIMx_OR1_RMP_SHIFT) +#if defined(ADC2) && defined(ADC3) #define TIM8_OR1_RMP_MASK ((TIM8_OR1_ETR_ADC2_RMP | TIM8_OR1_ETR_ADC3_RMP | TIM8_OR1_TI1_RMP) << TIMx_OR1_RMP_SHIFT) +#else +#define TIM8_OR1_RMP_MASK (TIM8_OR1_TI1_RMP << TIMx_OR1_RMP_SHIFT) +#endif /* ADC2 & ADC3 */ #define TIM15_OR1_RMP_MASK (TIM15_OR1_TI1_RMP << TIMx_OR1_RMP_SHIFT) #define TIM16_OR1_RMP_MASK (TIM16_OR1_TI1_RMP << TIMx_OR1_RMP_SHIFT) #define TIM17_OR1_RMP_MASK (TIM17_OR1_TI1_RMP << TIMx_OR1_RMP_SHIFT) /* Mask used to set the TDG[x:0] of the DTG bits of the TIMx_BDTR register */ -#define DT_DELAY_1 ((uint8_t)0x7FU) -#define DT_DELAY_2 ((uint8_t)0x3FU) -#define DT_DELAY_3 ((uint8_t)0x1FU) -#define DT_DELAY_4 ((uint8_t)0x1FU) +#define DT_DELAY_1 ((uint8_t)0x7F) +#define DT_DELAY_2 ((uint8_t)0x3F) +#define DT_DELAY_3 ((uint8_t)0x1F) +#define DT_DELAY_4 ((uint8_t)0x1F) /* Mask used to set the DTG[7:5] bits of the DTG bits of the TIMx_BDTR register */ -#define DT_RANGE_1 ((uint8_t)0x00U) -#define DT_RANGE_2 ((uint8_t)0x80U) -#define DT_RANGE_3 ((uint8_t)0xC0U) -#define DT_RANGE_4 ((uint8_t)0xE0U) +#define DT_RANGE_1 ((uint8_t)0x00) +#define DT_RANGE_2 ((uint8_t)0x80) +#define DT_RANGE_3 ((uint8_t)0xC0) +#define DT_RANGE_4 ((uint8_t)0xE0) /** Legacy definitions for compatibility purpose @cond 0 @@ -450,8 +452,8 @@ typedef struct This feature can be modified afterwards using unitary function @ref LL_TIM_OC_SetCompareCH2().*/ } LL_TIM_HALLSENSOR_InitTypeDef; -/** - * @brief BDTR (Break and Dead Time) structure definition +/** + * @brief BDTR (Break and Dead Time) structure definition */ typedef struct { @@ -459,31 +461,31 @@ typedef struct This parameter can be a value of @ref TIM_LL_EC_OSSR This feature can be modified afterwards using unitary function @ref LL_TIM_SetOffStates() - + @note This bit-field cannot be modified as long as LOCK level 2 has been programmed. */ uint32_t OSSIState; /*!< Specifies the Off-State used in Idle state. This parameter can be a value of @ref TIM_LL_EC_OSSI This feature can be modified afterwards using unitary function @ref LL_TIM_SetOffStates() - + @note This bit-field cannot be modified as long as LOCK level 2 has been programmed. */ uint32_t LockLevel; /*!< Specifies the LOCK level parameters. This parameter can be a value of @ref TIM_LL_EC_LOCKLEVEL - + @note The LOCK bits can be written only once after the reset. Once the TIMx_BDTR register - has been written, their content is frozen until the next reset.*/ + has been written, their content is frozen until the next reset.*/ uint8_t DeadTime; /*!< Specifies the delay time between the switching-off and the switching-on of the outputs. This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF. This feature can be modified afterwards using unitary function @ref LL_TIM_OC_SetDeadTime() - + @note This bit-field can not be modified as long as LOCK level 1, 2 or 3 has been programmed. */ - uint16_t BreakState; /*!< Specifies whether the TIM Break input is enabled or not. + uint16_t BreakState; /*!< Specifies whether the TIM Break input is enabled or not. This parameter can be a value of @ref TIM_LL_EC_BREAK_ENABLE This feature can be modified afterwards using unitary functions @ref LL_TIM_EnableBRK() or @ref LL_TIM_DisableBRK() @@ -494,17 +496,17 @@ typedef struct This parameter can be a value of @ref TIM_LL_EC_BREAK_POLARITY This feature can be modified afterwards using unitary function @ref LL_TIM_ConfigBRK() - + @note This bit-field can not be modified as long as LOCK level 1 has been programmed. */ uint32_t BreakFilter; /*!< Specifies the TIM Break Filter. This parameter can be a value of @ref TIM_LL_EC_BREAK_FILTER This feature can be modified afterwards using unitary function @ref LL_TIM_ConfigBRK() - + @note This bit-field can not be modified as long as LOCK level 1 has been programmed. */ - uint32_t Break2State; /*!< Specifies whether the TIM Break2 input is enabled or not. + uint32_t Break2State; /*!< Specifies whether the TIM Break2 input is enabled or not. This parameter can be a value of @ref TIM_LL_EC_BREAK2_ENABLE This feature can be modified afterwards using unitary functions @ref LL_TIM_EnableBRK2() or @ref LL_TIM_DisableBRK2() @@ -515,21 +517,21 @@ typedef struct This parameter can be a value of @ref TIM_LL_EC_BREAK2_POLARITY This feature can be modified afterwards using unitary function @ref LL_TIM_ConfigBRK2() - + @note This bit-field can not be modified as long as LOCK level 1 has been programmed. */ uint32_t Break2Filter; /*!< Specifies the TIM Break2 Filter. This parameter can be a value of @ref TIM_LL_EC_BREAK2_FILTER This feature can be modified afterwards using unitary function @ref LL_TIM_ConfigBRK2() - + @note This bit-field can not be modified as long as LOCK level 1 has been programmed. */ - uint32_t AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. + uint32_t AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not. This parameter can be a value of @ref TIM_LL_EC_AUTOMATICOUTPUT_ENABLE This feature can be modified afterwards using unitary functions @ref LL_TIM_EnableAutomaticOutput() or @ref LL_TIM_DisableAutomaticOutput() - + @note This bit-field can not be modified as long as LOCK level 1 has been programmed. */ } LL_TIM_BDTR_InitTypeDef; @@ -593,7 +595,7 @@ typedef struct #define LL_TIM_AUTOMATICOUTPUT_ENABLE TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event */ /** * @} - */ + */ #endif /* USE_FULL_LL_DRIVER */ /** @defgroup TIM_LL_EC_IT IT Defines @@ -825,7 +827,7 @@ typedef struct * @{ */ #define LL_TIM_CLOCKSOURCE_INTERNAL 0x00000000U /*!< The timer is clocked by the internal clock provided from the RCC */ -#define LL_TIM_CLOCKSOURCE_EXT_MODE1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Counter counts at each rising or falling edge on a selected inpu t*/ +#define LL_TIM_CLOCKSOURCE_EXT_MODE1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Counter counts at each rising or falling edge on a selected input*/ #define LL_TIM_CLOCKSOURCE_EXT_MODE2 TIM_SMCR_ECE /*!< Counter counts at each rising or falling edge on the external trigger input ETR */ /** * @} @@ -834,9 +836,9 @@ typedef struct /** @defgroup TIM_LL_EC_ENCODERMODE Encoder Mode * @{ */ -#define LL_TIM_ENCODERMODE_X2_TI1 TIM_SMCR_SMS_0 /*!< Encoder mode 1 - Counter counts up/down on TI2FP2 edge depending on TI1FP1 level */ -#define LL_TIM_ENCODERMODE_X2_TI2 TIM_SMCR_SMS_1 /*!< Encoder mode 2 - Counter counts up/down on TI1FP1 edge depending on TI2FP2 level */ -#define LL_TIM_ENCODERMODE_X4_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input l */ +#define LL_TIM_ENCODERMODE_X2_TI1 TIM_SMCR_SMS_0 /*!< Quadrature encoder mode 1, x2 mode - Counter counts up/down on TI1FP1 edge depending on TI2FP2 level */ +#define LL_TIM_ENCODERMODE_X2_TI2 TIM_SMCR_SMS_1 /*!< Quadrature encoder mode 2, x2 mode - Counter counts up/down on TI2FP2 edge depending on TI1FP1 level */ +#define LL_TIM_ENCODERMODE_X4_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input */ /** * @} */ @@ -894,14 +896,14 @@ typedef struct /** @defgroup TIM_LL_EC_TS Trigger Selection * @{ */ -#define LL_TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) is used as trigger input */ -#define LL_TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) is used as trigger input */ -#define LL_TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) is used as trigger input */ -#define LL_TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) is used as trigger input */ -#define LL_TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) is used as trigger input */ -#define LL_TIM_TS_TI1FP1 (TIM_SMCR_TS_2 | TIM_SMCR_TS_0) /*!< Filtered Timer Input 1 (TI1FP1) is used as trigger input */ -#define LL_TIM_TS_TI2FP2 (TIM_SMCR_TS_2 | TIM_SMCR_TS_1) /*!< Filtered Timer Input 2 (TI12P2) is used as trigger input */ -#define LL_TIM_TS_ETRF (TIM_SMCR_TS_2 | TIM_SMCR_TS_1 | TIM_SMCR_TS_0) /*!< Filtered external Trigger (ETRF) is used as trigger input */ +#define LL_TIM_TS_ITR0 0x00000000U /*!< Internal Trigger 0 (ITR0) is used as trigger input */ +#define LL_TIM_TS_ITR1 TIM_SMCR_TS_0 /*!< Internal Trigger 1 (ITR1) is used as trigger input */ +#define LL_TIM_TS_ITR2 TIM_SMCR_TS_1 /*!< Internal Trigger 2 (ITR2) is used as trigger input */ +#define LL_TIM_TS_ITR3 (TIM_SMCR_TS_0 | TIM_SMCR_TS_1) /*!< Internal Trigger 3 (ITR3) is used as trigger input */ +#define LL_TIM_TS_TI1F_ED TIM_SMCR_TS_2 /*!< TI1 Edge Detector (TI1F_ED) is used as trigger input */ +#define LL_TIM_TS_TI1FP1 (TIM_SMCR_TS_2 | TIM_SMCR_TS_0) /*!< Filtered Timer Input 1 (TI1FP1) is used as trigger input */ +#define LL_TIM_TS_TI2FP2 (TIM_SMCR_TS_2 | TIM_SMCR_TS_1) /*!< Filtered Timer Input 2 (TI12P2) is used as trigger input */ +#define LL_TIM_TS_ETRF (TIM_SMCR_TS_2 | TIM_SMCR_TS_1 | TIM_SMCR_TS_0) /*!< Filtered external Trigger (ETRF) is used as trigger input */ /** * @} */ @@ -1162,11 +1164,12 @@ typedef struct /** @defgroup TIM_LL_EC_TIM2_ITR1_RMP TIM2 Internal Trigger1 Remap * @{ */ -#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) +#if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || defined (STM32L4A6xx) || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined(STM32L4S9xx) #define LL_TIM_TIM2_ITR1_RMP_TIM8_TRGO TIM2_OR1_RMP_MASK /*!< TIM2_ITR1 is connected to TIM8_TRGO */ #define LL_TIM_TIM2_ITR1_RMP_OTG_FS_SOF (TIM2_OR1_ITR1_RMP | TIM2_OR1_RMP_MASK) /*!< TIM2_ITR1 is connected to OTG_FS SOF */ #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #if defined (STM32L431xx) || defined (STM32L432xx) || defined (STM32L433xx) || defined (STM32L442xx) || defined (STM32L443xx) || defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) #define LL_TIM_TIM2_ITR1_RMP_NONE 0x00000000U /* !< No internal trigger on TIM2_ITR1 */ #define LL_TIM_TIM2_ITR1_RMP_USB_SOF TIM2_OR1_ITR1_RMP /* !< TIM2_ITR1 is connected to USB SOF */ @@ -1335,6 +1338,7 @@ typedef struct /** @defgroup TIM_LL_EM_Exported_Macros Exported_Macros * @{ */ + /** * @brief HELPER macro retrieving the UIFCPY flag from the counter value. * @note ex: @ref __LL_TIM_GETFLAG_UIFCPY (@ref LL_TIM_GetCounter ()); @@ -1359,9 +1363,9 @@ typedef struct */ #define __LL_TIM_CALC_DEADTIME(__TIMCLK__, __CKD__, __DT__) \ ( (((uint64_t)((__DT__)*1000U)) < ((DT_DELAY_1+1U) * TIM_CALC_DTS((__TIMCLK__), (__CKD__)))) ? (uint8_t)(((uint64_t)((__DT__)*1000U) / TIM_CALC_DTS((__TIMCLK__), (__CKD__))) & DT_DELAY_1) : \ - (((uint64_t)((__DT__)*1000U)) < (64U + (DT_DELAY_2+1U)) * 2U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_2 | ((uint8_t)((uint8_t)((((uint64_t)((__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 1U) - (uint8_t) 64U) & DT_DELAY_2)) :\ - (((uint64_t)((__DT__)*1000U)) < (32U + (DT_DELAY_3+1U)) * 8U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_3 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 3U) - (uint8_t) 32U) & DT_DELAY_3)) :\ - (((uint64_t)((__DT__)*1000U)) < (32U + (DT_DELAY_4+1U)) * 16U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_4 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 4U) - (uint8_t) 32U) & DT_DELAY_4)) :\ + (((uint64_t)((__DT__)*1000U)) < (64U + (DT_DELAY_2+1U)) * 2U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_2 | ((uint8_t)((uint8_t)((((uint64_t)((__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 1U) - (uint8_t) 64) & DT_DELAY_2)) :\ + (((uint64_t)((__DT__)*1000U)) < (32U + (DT_DELAY_3+1U)) * 8U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_3 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 3U) - (uint8_t) 32) & DT_DELAY_3)) :\ + (((uint64_t)((__DT__)*1000U)) < (32U + (DT_DELAY_4+1U)) * 16U * TIM_CALC_DTS((__TIMCLK__), (__CKD__))) ? (uint8_t)(DT_RANGE_4 | ((uint8_t)((uint8_t)(((((uint64_t)(__DT__)*1000U))/ TIM_CALC_DTS((__TIMCLK__), (__CKD__))) >> 4U) - (uint8_t) 32) & DT_DELAY_4)) :\ 0U) /** @@ -1482,7 +1486,7 @@ __STATIC_INLINE uint32_t LL_TIM_IsEnabledCounter(TIM_TypeDef *TIMx) */ __STATIC_INLINE void LL_TIM_EnableUpdateEvent(TIM_TypeDef *TIMx) { - SET_BIT(TIMx->CR1, TIM_CR1_UDIS); + CLEAR_BIT(TIMx->CR1, TIM_CR1_UDIS); } /** @@ -1493,18 +1497,18 @@ __STATIC_INLINE void LL_TIM_EnableUpdateEvent(TIM_TypeDef *TIMx) */ __STATIC_INLINE void LL_TIM_DisableUpdateEvent(TIM_TypeDef *TIMx) { - CLEAR_BIT(TIMx->CR1, TIM_CR1_UDIS); + SET_BIT(TIMx->CR1, TIM_CR1_UDIS); } /** * @brief Indicates whether update event generation is enabled. * @rmtoll CR1 UDIS LL_TIM_IsEnabledUpdateEvent * @param TIMx Timer instance - * @retval State of bit (1 or 0). + * @retval Inverted state of bit (0 or 1). */ __STATIC_INLINE uint32_t LL_TIM_IsEnabledUpdateEvent(TIM_TypeDef *TIMx) { - return (READ_BIT(TIMx->CR1, TIM_CR1_UDIS) == (TIM_CR1_UDIS)); + return (READ_BIT(TIMx->CR1, TIM_CR1_UDIS) == RESET); } /** @@ -1573,6 +1577,9 @@ __STATIC_INLINE uint32_t LL_TIM_GetOnePulseMode(TIM_TypeDef *TIMx) * @note Macro @ref IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx) can be used to * check whether or not the counter mode selection feature is supported * by a timer instance. + * @note Switching from Center Aligned counter mode to Edge counter mode (or reverse) + * requires a timer reset to avoid unexpected direction + * due to DIR bit readonly in center aligned mode. * @rmtoll CR1 DIR LL_TIM_SetCounterMode\n * CR1 CMS LL_TIM_SetCounterMode * @param TIMx Timer instance @@ -2515,7 +2522,7 @@ __STATIC_INLINE uint32_t LL_TIM_OC_IsEnabledClear(TIM_TypeDef *TIMx, uint32_t Ch } /** - * @brief Set the dead-time delay (delay inserted between the rising edge of the OCxREF signal and the rising edge if the Ocx and OCxN signals). + * @brief Set the dead-time delay (delay inserted between the rising edge of the OCxREF signal and the rising edge of the Ocx and OCxN signals). * @note Macro @ref IS_TIM_BREAK_INSTANCE(TIMx) can be used to check whether or not * dead-time insertion feature is supported by a timer instance. * @note Helper macro @ref __LL_TIM_CALC_DEADTIME can be used to calculate the DeadTime parameter @@ -3644,11 +3651,11 @@ __STATIC_INLINE uint32_t LL_TIM_IsEnabledAllOutputs(TIM_TypeDef *TIMx) * @rmtoll OR2 BKINE LL_TIM_EnableBreakInputSource\n * OR2 BKCMP1E LL_TIM_EnableBreakInputSource\n * OR2 BKCMP2E LL_TIM_EnableBreakInputSource\n - * OR2 BKDFBK0E LL_TIM_EnableBreakInputSource\n - * OR3 BKINE LL_TIM_EnableBreakInputSource\n - * OR3 BKCMP1E LL_TIM_EnableBreakInputSource\n - * OR3 BKCMP2E LL_TIM_EnableBreakInputSource\n - * OR3 BKDFBK0E LL_TIM_EnableBreakInputSource + * OR2 BKDF1BK0E LL_TIM_EnableBreakInputSource\n + * OR3 BK2INE LL_TIM_EnableBreakInputSource\n + * OR3 BK2CMP1E LL_TIM_EnableBreakInputSource\n + * OR3 BK2CMP2E LL_TIM_EnableBreakInputSource\n + * OR3 BK2DF1BK1E LL_TIM_EnableBreakInputSource * @param TIMx Timer instance * @param BreakInput This parameter can be one of the following values: * @arg @ref LL_TIM_BREAK_INPUT_BKIN @@ -3673,11 +3680,11 @@ __STATIC_INLINE void LL_TIM_EnableBreakInputSource(TIM_TypeDef *TIMx, uint32_t B * @rmtoll OR2 BKINE LL_TIM_DisableBreakInputSource\n * OR2 BKCMP1E LL_TIM_DisableBreakInputSource\n * OR2 BKCMP2E LL_TIM_DisableBreakInputSource\n - * OR2 BKDFBK0E LL_TIM_DisableBreakInputSource\n - * OR3 BKINE LL_TIM_DisableBreakInputSource\n - * OR3 BKCMP1E LL_TIM_DisableBreakInputSource\n - * OR3 BKCMP2E LL_TIM_DisableBreakInputSource\n - * OR3 BKDFBK0E LL_TIM_DisableBreakInputSource + * OR2 BKDF1BK0E LL_TIM_DisableBreakInputSource\n + * OR3 BK2INE LL_TIM_DisableBreakInputSource\n + * OR3 BK2CMP1E LL_TIM_DisableBreakInputSource\n + * OR3 BK2CMP2E LL_TIM_DisableBreakInputSource\n + * OR3 BK2DF1BK1E LL_TIM_DisableBreakInputSource * @param TIMx Timer instance * @param BreakInput This parameter can be one of the following values: * @arg @ref LL_TIM_BREAK_INPUT_BKIN @@ -3699,14 +3706,12 @@ __STATIC_INLINE void LL_TIM_DisableBreakInputSource(TIM_TypeDef *TIMx, uint32_t * @brief Set the polarity of the break signal for the timer break input. * @note Macro @ref IS_TIM_BREAKSOURCE_INSTANCE(TIMx) can be used to check whether * or not a timer instance allows for break input selection. - * @rmtoll OR2 BKINE LL_TIM_SetBreakInputSourcePolarity\n - * OR2 BKCMP1E LL_TIM_SetBreakInputSourcePolarity\n - * OR2 BKCMP2E LL_TIM_SetBreakInputSourcePolarity\n - * OR2 BKINP LL_TIM_SetBreakInputSourcePolarity\n - * OR3 BKINE LL_TIM_SetBreakInputSourcePolarity\n - * OR3 BKCMP1E LL_TIM_SetBreakInputSourcePolarity\n - * OR3 BKCMP2E LL_TIM_SetBreakInputSourcePolarity\n - * OR3 BKINP LL_TIM_SetBreakInputSourcePolarity + * @rmtoll OR2 BKINP LL_TIM_SetBreakInputSourcePolarity\n + * OR2 BKCMP1P LL_TIM_SetBreakInputSourcePolarity\n + * OR2 BKCMP2P LL_TIM_SetBreakInputSourcePolarity\n + * OR3 BK2INP LL_TIM_SetBreakInputSourcePolarity\n + * OR3 BK2CMP1P LL_TIM_SetBreakInputSourcePolarity\n + * OR3 BK2CMP2P LL_TIM_SetBreakInputSourcePolarity * @param TIMx Timer instance * @param BreakInput This parameter can be one of the following values: * @arg @ref LL_TIM_BREAK_INPUT_BKIN diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.c index 211b7cd943..a49c43007c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_usart.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief USART LL module driver. ****************************************************************************** * @attention @@ -73,9 +71,28 @@ * @{ */ +#if defined(USART_PRESC_PRESCALER) +#define IS_LL_USART_PRESCALER(__VALUE__) (((__VALUE__) == LL_USART_PRESCALER_DIV1) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV2) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV4) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV6) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV8) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV10) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV12) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV16) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV32) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV64) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV128) \ + || ((__VALUE__) == LL_USART_PRESCALER_DIV256)) + +#endif /* __BAUDRATE__ The maximum Baud Rate is derived from the maximum clock available * divided by the smallest oversampling used on the USART (i.e. 8) */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 15000000U) +#else #define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 10000000U) +#endif /* __VALUE__ In case of oversampling by 16 and 8, BRR content must be greater than or equal to 16d. */ #define IS_LL_USART_BRR(__VALUE__) (((__VALUE__) >= 16U) \ @@ -222,6 +239,9 @@ ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_Ini /* Check the parameters */ assert_param(IS_UART_INSTANCE(USARTx)); +#if defined(USART_PRESC_PRESCALER) + assert_param(IS_LL_USART_PRESCALER(USART_InitStruct->PrescalerValue)); +#endif assert_param(IS_LL_USART_BAUDRATE(USART_InitStruct->BaudRate)); assert_param(IS_LL_USART_DATAWIDTH(USART_InitStruct->DataWidth)); assert_param(IS_LL_USART_STOPBITS(USART_InitStruct->StopBits)); @@ -295,6 +315,9 @@ ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_Ini } /* Configure the USART Baud Rate : +#if defined(USART_PRESC_PRESCALER) + - prescaler value is required +#endif - valid baud rate value (different from 0) is required - Peripheral clock as returned by RCC service, should be valid (different from 0). */ @@ -304,12 +327,23 @@ ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_Ini status = SUCCESS; LL_USART_SetBaudRate(USARTx, periphclk, +#if defined(USART_PRESC_PRESCALER) + USART_InitStruct->PrescalerValue, +#endif USART_InitStruct->OverSampling, USART_InitStruct->BaudRate); /* Check BRR is greater than or equal to 16d */ assert_param(IS_LL_USART_BRR(USARTx->BRR)); } + +#if defined(USART_PRESC_PRESCALER) + /*---------------------------- USART PRESC Configuration ----------------------- + * Configure USARTx PRESC (Prescaler) with parameters: + * - PrescalerValue: USART_PRESC_PRESCALER bits according to USART_InitStruct->PrescalerValue value. + */ + LL_USART_SetPrescaler(USARTx, USART_InitStruct->PrescalerValue); +#endif } /* Endif (=> USART not in Disabled state => return ERROR) */ @@ -326,6 +360,9 @@ ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_Ini void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct) { /* Set USART_InitStruct fields to default values */ +#if defined(USART_PRESC_PRESCALER) + USART_InitStruct->PrescalerValue = LL_USART_PRESCALER_DIV1; +#endif USART_InitStruct->BaudRate = 9600U; USART_InitStruct->DataWidth = LL_USART_DATAWIDTH_8B; USART_InitStruct->StopBits = LL_USART_STOPBITS_1; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.h index 9fc806da08..da5cd195ff 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usart.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_usart.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of USART LL module. ****************************************************************************** * @attention @@ -58,6 +56,30 @@ extern "C" { /* Private types -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup USART_LL_Private_Variables USART Private Variables + * @{ + */ +/* Array used to get the USART prescaler division decimal values versus @ref USART_LL_EC_PRESCALER values */ +static const uint16_t USART_PRESCALER_TAB[] = +{ + (uint16_t)1, + (uint16_t)2, + (uint16_t)4, + (uint16_t)6, + (uint16_t)8, + (uint16_t)10, + (uint16_t)12, + (uint16_t)16, + (uint16_t)32, + (uint16_t)64, + (uint16_t)128, + (uint16_t)256 +}; +/** + * @} + */ +#endif /* Private constants ---------------------------------------------------------*/ /** @defgroup USART_LL_Private_Constants USART Private Constants @@ -88,6 +110,13 @@ extern "C" { */ typedef struct { +#if defined(USART_PRESC_PRESCALER) + uint32_t PrescalerValue; /*!< Specifies the Prescaler to compute the communication baud rate. + This parameter can be a value of @ref USART_LL_EC_PRESCALER. + + This feature can be modified afterwards using unitary function @ref LL_USART_SetPrescaler().*/ + +#endif uint32_t BaudRate; /*!< This field defines expected Usart communication baud rate. This feature can be modified afterwards using unitary function @ref LL_USART_SetBaudRate().*/ @@ -176,6 +205,9 @@ typedef struct #define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise detected flag */ #define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */ #define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_ICR_TXFECF USART_ICR_TXFECF /*!< TX FIFO Empty Clear flag */ +#endif #define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */ #if defined(USART_TCBGT_SUPPORT) #define LL_USART_ICR_TCBGTCF USART_ICR_TCBGTCF /*!< Transmission completed before guard time flag */ @@ -184,6 +216,9 @@ typedef struct #define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */ #define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout flag */ #define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block flag */ +#if defined(USART_CR2_SLVEN) +#define LL_USART_ICR_UDRCF USART_ICR_UDRCF /*!< SPI Slave Underrun Clear flag */ +#endif #define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */ #define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode flag */ /** @@ -199,14 +234,25 @@ typedef struct #define LL_USART_ISR_NE USART_ISR_NE /*!< Noise detected flag */ #define LL_USART_ISR_ORE USART_ISR_ORE /*!< Overrun error flag */ #define LL_USART_ISR_IDLE USART_ISR_IDLE /*!< Idle line detected flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_ISR_RXNE_RXFNE USART_ISR_RXNE_RXFNE /*!< Read data register or RX FIFO not empty flag */ +#else #define LL_USART_ISR_RXNE USART_ISR_RXNE /*!< Read data register not empty flag */ +#endif #define LL_USART_ISR_TC USART_ISR_TC /*!< Transmission complete flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_ISR_TXE_TXFNF USART_ISR_TXE_TXFNF /*!< Transmit data register empty or TX FIFO Not Full flag*/ +#else #define LL_USART_ISR_TXE USART_ISR_TXE /*!< Transmit data register empty flag */ +#endif #define LL_USART_ISR_LBDF USART_ISR_LBDF /*!< LIN break detection flag */ #define LL_USART_ISR_CTSIF USART_ISR_CTSIF /*!< CTS interrupt flag */ #define LL_USART_ISR_CTS USART_ISR_CTS /*!< CTS flag */ #define LL_USART_ISR_RTOF USART_ISR_RTOF /*!< Receiver timeout flag */ #define LL_USART_ISR_EOBF USART_ISR_EOBF /*!< End of block flag */ +#if defined(USART_CR2_SLVEN) +#define LL_USART_ISR_UDR USART_ISR_UDR /*!< SPI Slave underrun error flag */ +#endif #define LL_USART_ISR_ABRE USART_ISR_ABRE /*!< Auto baud rate error flag */ #define LL_USART_ISR_ABRF USART_ISR_ABRF /*!< Auto baud rate flag */ #define LL_USART_ISR_BUSY USART_ISR_BUSY /*!< Busy flag */ @@ -216,9 +262,17 @@ typedef struct #define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */ #define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */ #define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_ISR_TXFE USART_ISR_TXFE /*!< TX FIFO empty flag */ +#define LL_USART_ISR_RXFF USART_ISR_RXFF /*!< RX FIFO full flag */ +#endif #if defined(USART_TCBGT_SUPPORT) #define LL_USART_ISR_TCBGT USART_ISR_TCBGT /*!< Transmission complete before guard time completion flag */ #endif +#if defined(USART_CR1_FIFOEN) +#define LL_USART_ISR_RXFT USART_ISR_RXFT /*!< RX FIFO threshold flag */ +#define LL_USART_ISR_TXFT USART_ISR_TXFT /*!< TX FIFO threshold flag */ +#endif /** * @} */ @@ -228,24 +282,57 @@ typedef struct * @{ */ #define LL_USART_CR1_IDLEIE USART_CR1_IDLEIE /*!< IDLE interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_CR1_RXNEIE_RXFNEIE USART_CR1_RXNEIE_RXFNEIE /*!< Read data register and RXFIFO not empty interrupt enable */ +#else #define LL_USART_CR1_RXNEIE USART_CR1_RXNEIE /*!< Read data register not empty interrupt enable */ +#endif #define LL_USART_CR1_TCIE USART_CR1_TCIE /*!< Transmission complete interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_CR1_TXEIE_TXFNFIE USART_CR1_TXEIE_TXFNFIE /*!< Transmit data register empty and TX FIFO not full interrupt enable */ +#else #define LL_USART_CR1_TXEIE USART_CR1_TXEIE /*!< Transmit data register empty interrupt enable */ +#endif #define LL_USART_CR1_PEIE USART_CR1_PEIE /*!< Parity error */ #define LL_USART_CR1_CMIE USART_CR1_CMIE /*!< Character match interrupt enable */ #define LL_USART_CR1_RTOIE USART_CR1_RTOIE /*!< Receiver timeout interrupt enable */ #define LL_USART_CR1_EOBIE USART_CR1_EOBIE /*!< End of Block interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_CR1_TXFEIE USART_CR1_TXFEIE /*!< TX FIFO empty interrupt enable */ +#define LL_USART_CR1_RXFFIE USART_CR1_RXFFIE /*!< RX FIFO full interrupt enable */ +#endif #define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */ #define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */ #define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */ #define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */ +#if defined(USART_CR1_FIFOEN) +#define LL_USART_CR3_TXFTIE USART_CR3_TXFTIE /*!< TX FIFO threshold interrupt enable */ +#endif #if defined(USART_TCBGT_SUPPORT) #define LL_USART_CR3_TCBGTIE USART_CR3_TCBGTIE /*!< Transmission complete before guard time interrupt enable */ #endif +#if defined(USART_CR1_FIFOEN) +#define LL_USART_CR3_RXFTIE USART_CR3_RXFTIE /*!< RX FIFO threshold interrupt enable */ +#endif /** * @} */ +#if defined(USART_CR1_FIFOEN) +/** @defgroup USART_LL_EC_FIFOTHRESHOLD FIFO Threshold + * @{ + */ +#define LL_USART_FIFOTHRESHOLD_1_8 0x00000000U /*!< FIFO reaches 1/8 of its depth */ +#define LL_USART_FIFOTHRESHOLD_1_4 0x00000001U /*!< FIFO reaches 1/4 of its depth */ +#define LL_USART_FIFOTHRESHOLD_1_2 0x00000002U /*!< FIFO reaches 1/2 of its depth */ +#define LL_USART_FIFOTHRESHOLD_3_4 0x00000003U /*!< FIFO reaches 3/4 of its depth */ +#define LL_USART_FIFOTHRESHOLD_7_8 0x00000004U /*!< FIFO reaches 7/8 of its depth */ +#define LL_USART_FIFOTHRESHOLD_8_8 0x00000005U /*!< FIFO becomes empty for TX and full for RX */ +/** + * @} + */ +#endif + /** @defgroup USART_LL_EC_DIRECTION Communication Direction * @{ */ @@ -334,6 +421,27 @@ typedef struct * @} */ +#if defined(USART_PRESC_PRESCALER) +/** @defgroup USART_LL_EC_PRESCALER Clock Source Prescaler + * @{ + */ +#define LL_USART_PRESCALER_DIV1 0x00000000U /*!< Input clock not devided */ +#define LL_USART_PRESCALER_DIV2 (USART_PRESC_PRESCALER_0) /*!< Input clock devided by 2 */ +#define LL_USART_PRESCALER_DIV4 (USART_PRESC_PRESCALER_1) /*!< Input clock devided by 4 */ +#define LL_USART_PRESCALER_DIV6 (USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 6 */ +#define LL_USART_PRESCALER_DIV8 (USART_PRESC_PRESCALER_2) /*!< Input clock devided by 8 */ +#define LL_USART_PRESCALER_DIV10 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 10 */ +#define LL_USART_PRESCALER_DIV12 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1) /*!< Input clock devided by 12 */ +#define LL_USART_PRESCALER_DIV16 (USART_PRESC_PRESCALER_2 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 16 */ +#define LL_USART_PRESCALER_DIV32 (USART_PRESC_PRESCALER_3) /*!< Input clock devided by 32 */ +#define LL_USART_PRESCALER_DIV64 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 64 */ +#define LL_USART_PRESCALER_DIV128 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1) /*!< Input clock devided by 128 */ +#define LL_USART_PRESCALER_DIV256 (USART_PRESC_PRESCALER_3 | USART_PRESC_PRESCALER_1 | USART_PRESC_PRESCALER_0) /*!< Input clock devided by 256 */ +/** + * @} + */ +#endif + /** @defgroup USART_LL_EC_STOPBITS Stop Bits * @{ */ @@ -508,19 +616,59 @@ typedef struct * @brief Compute USARTDIV value according to Peripheral Clock and * expected Baud Rate in 8 bits sampling mode (32 bits value of USARTDIV is returned) * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + @if USART_PRESC_PRESCALER + * @param __PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + * @param __PRESCALER__ Prescaler value + @endif * @param __BAUDRATE__ Baud rate value to achieve * @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case */ +#if defined(USART_PRESC_PRESCALER) +#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __PRESCALER__, __BAUDRATE__) (((((__PERIPHCLK__)/(uint32_t)(USART_PRESCALER_TAB[(__PRESCALER__)]))*2) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) +#else #define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) +#endif /** * @brief Compute USARTDIV value according to Peripheral Clock and * expected Baud Rate in 16 bits sampling mode (32 bits value of USARTDIV is returned) * @param __PERIPHCLK__ Peripheral Clock frequency used for USART instance + @if USART_PRESC_PRESCALER + * @param __PRESCALER__ This parameter can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + * @param __PRESCALER__ Prescaler value + @endif * @param __BAUDRATE__ Baud rate value to achieve * @retval USARTDIV value to be used for BRR register filling in OverSampling_16 case */ +#if defined(USART_PRESC_PRESCALER) +#define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __PRESCALER__, __BAUDRATE__) ((((__PERIPHCLK__)/(uint32_t)(USART_PRESCALER_TAB[(__PRESCALER__)])) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) +#else #define __LL_USART_DIV_SAMPLING16(__PERIPHCLK__, __BAUDRATE__) (((__PERIPHCLK__) + ((__BAUDRATE__)/2))/(__BAUDRATE__)) +#endif /** * @} @@ -576,6 +724,154 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx) return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief FIFO Mode Enable + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 FIFOEN LL_USART_EnableFIFO + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableFIFO(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_FIFOEN); +} + +/** + * @brief FIFO Mode Disable + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 FIFOEN LL_USART_DisableFIFO + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableFIFO(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_FIFOEN); +} + +/** + * @brief Indicate if FIFO Mode is enabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 FIFOEN LL_USART_IsEnabledFIFO + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledFIFO(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_FIFOEN) == (USART_CR1_FIFOEN)); +} + +/** + * @brief Configure TX FIFO Threshold + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTCFG LL_USART_SetTXFIFOThreshold + * @param USARTx USART Instance + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetTXFIFOThreshold(USART_TypeDef *USARTx, uint32_t Threshold) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_TXFTCFG, Threshold << USART_CR3_TXFTCFG_Pos); +} + +/** + * @brief Return TX FIFO Threshold Configuration + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTCFG LL_USART_GetTXFIFOThreshold + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + */ +__STATIC_INLINE uint32_t LL_USART_GetTXFIFOThreshold(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos); +} + +/** + * @brief Configure RX FIFO Threshold + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 RXFTCFG LL_USART_SetRXFIFOThreshold + * @param USARTx USART Instance + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetRXFIFOThreshold(USART_TypeDef *USARTx, uint32_t Threshold) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_RXFTCFG, Threshold << USART_CR3_RXFTCFG_Pos); +} + +/** + * @brief Return RX FIFO Threshold Configuration + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 RXFTCFG LL_USART_GetRXFIFOThreshold + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + */ +__STATIC_INLINE uint32_t LL_USART_GetRXFIFOThreshold(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos); +} + +/** + * @brief Configure TX and RX FIFOs Threshold + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTCFG LL_USART_ConfigFIFOsThreshold\n + * CR3 RXFTCFG LL_USART_ConfigFIFOsThreshold + * @param USARTx USART Instance + * @param TXThreshold This parameter can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + * @param RXThreshold This parameter can be one of the following values: + * @arg @ref LL_USART_FIFOTHRESHOLD_1_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_1_2 + * @arg @ref LL_USART_FIFOTHRESHOLD_3_4 + * @arg @ref LL_USART_FIFOTHRESHOLD_7_8 + * @arg @ref LL_USART_FIFOTHRESHOLD_8_8 + * @retval None + */ +__STATIC_INLINE void LL_USART_ConfigFIFOsThreshold(USART_TypeDef *USARTx, uint32_t TXThreshold, uint32_t RXThreshold) +{ + MODIFY_REG(USARTx->CR3, USART_CR3_TXFTCFG | USART_CR3_RXFTCFG, TXThreshold << USART_CR3_TXFTCFG_Pos | RXThreshold << USART_CR3_RXFTCFG_Pos); +} +#endif + /** * @brief USART enabled in STOP Mode. * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that @@ -970,6 +1266,60 @@ __STATIC_INLINE void LL_USART_ConfigClock(USART_TypeDef *USARTx, uint32_t Phase, MODIFY_REG(USARTx->CR2, USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL, Phase | Polarity | LBCPOutput); } +#if defined(USART_PRESC_PRESCALER) + +/** + * @brief Configure Clock source prescaler for baudrate generator and oversampling + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll PRESC PRESCALER LL_USART_SetPrescaler + * @param USARTx USART Instance + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + * @retval None + */ +__STATIC_INLINE void LL_USART_SetPrescaler(USART_TypeDef *USARTx, uint32_t PrescalerValue) +{ + MODIFY_REG(USARTx->PRESC, USART_PRESC_PRESCALER, PrescalerValue); +} + +/** + * @brief Retrieve the Clock source prescaler for baudrate generator and oversampling + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll PRESC PRESCALER LL_USART_GetPrescaler + * @param USARTx USART Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + */ +__STATIC_INLINE uint32_t LL_USART_GetPrescaler(USART_TypeDef *USARTx) +{ + return (uint32_t)(READ_BIT(USARTx->PRESC, USART_PRESC_PRESCALER)); +} +#endif + /** * @brief Enable Clock output on SCLK pin * @note Macro @ref IS_USART_INSTANCE(USARTx) can be used to check whether or not @@ -1577,28 +1927,56 @@ __STATIC_INLINE uint32_t LL_USART_GetWKUPType(USART_TypeDef *USARTx) * @rmtoll BRR BRR LL_USART_SetBaudRate * @param USARTx USART Instance * @param PeriphClk Peripheral Clock + @if USART_PRESC_PRESCALER + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + @endif * @param OverSampling This parameter can be one of the following values: * @arg @ref LL_USART_OVERSAMPLING_16 * @arg @ref LL_USART_OVERSAMPLING_8 * @param BaudRate Baud Rate * @retval None */ +#if defined(USART_PRESC_PRESCALER) +__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t PrescalerValue, uint32_t OverSampling, + uint32_t BaudRate) +#else __STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling, uint32_t BaudRate) +#endif { register uint32_t usartdiv = 0x0U; register uint32_t brrtemp = 0x0U; if (OverSampling == LL_USART_OVERSAMPLING_8) { +#if defined(USART_PRESC_PRESCALER) + usartdiv = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, PrescalerValue, BaudRate)); +#else usartdiv = (uint16_t)(__LL_USART_DIV_SAMPLING8(PeriphClk, BaudRate)); +#endif brrtemp = usartdiv & 0xFFF0U; brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U); USARTx->BRR = brrtemp; } else { +#if defined(USART_PRESC_PRESCALER) + USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, PrescalerValue, BaudRate)); +#else USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate)); +#endif } } @@ -1610,15 +1988,37 @@ __STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t Periph * @rmtoll BRR BRR LL_USART_GetBaudRate * @param USARTx USART Instance * @param PeriphClk Peripheral Clock + @if USART_PRESC_PRESCALER + * @param PrescalerValue This parameter can be one of the following values: + * @arg @ref LL_USART_PRESCALER_DIV1 + * @arg @ref LL_USART_PRESCALER_DIV2 + * @arg @ref LL_USART_PRESCALER_DIV4 + * @arg @ref LL_USART_PRESCALER_DIV6 + * @arg @ref LL_USART_PRESCALER_DIV8 + * @arg @ref LL_USART_PRESCALER_DIV10 + * @arg @ref LL_USART_PRESCALER_DIV12 + * @arg @ref LL_USART_PRESCALER_DIV16 + * @arg @ref LL_USART_PRESCALER_DIV32 + * @arg @ref LL_USART_PRESCALER_DIV64 + * @arg @ref LL_USART_PRESCALER_DIV128 + * @arg @ref LL_USART_PRESCALER_DIV256 + @endif * @param OverSampling This parameter can be one of the following values: * @arg @ref LL_USART_OVERSAMPLING_16 * @arg @ref LL_USART_OVERSAMPLING_8 * @retval Baud Rate */ +#if defined(USART_PRESC_PRESCALER) +__STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t PrescalerValue, uint32_t OverSampling) +#else __STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling) +#endif { register uint32_t usartdiv = 0x0U; register uint32_t brrresult = 0x0U; +#if defined(USART_PRESC_PRESCALER) + register uint32_t periphclkpresc = (uint32_t)(PeriphClk / (uint32_t)(USART_PRESCALER_TAB[PrescalerValue])); +#endif usartdiv = USARTx->BRR; @@ -1627,14 +2027,22 @@ __STATIC_INLINE uint32_t LL_USART_GetBaudRate(USART_TypeDef *USARTx, uint32_t Pe if ((usartdiv & 0xFFF7U) != 0U) { usartdiv = (uint16_t)((usartdiv & 0xFFF0U) | ((usartdiv & 0x0007U) << 1U)) ; +#if defined(USART_PRESC_PRESCALER) + brrresult = (periphclkpresc * 2U) / usartdiv; +#else brrresult = (PeriphClk * 2U) / usartdiv; +#endif } } else { if ((usartdiv & 0xFFFFU) != 0U) { +#if defined(USART_PRESC_PRESCALER) + brrresult = periphclkpresc / usartdiv; +#else brrresult = PeriphClk / usartdiv; +#endif } } return (brrresult); @@ -2020,6 +2428,97 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledHalfDuplex(USART_TypeDef *USARTx) * @} */ +#if defined(USART_CR2_SLVEN) + +/** @defgroup USART_LL_EF_Configuration_SPI_SLAVE Configuration functions related to SPI Slave feature + * @{ + */ +/** + * @brief Enable SPI Synchronous Slave mode + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll CR2 SLVEN LL_USART_EnableSPISlave + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSPISlave(USART_TypeDef* USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_SLVEN); +} + +/** + * @brief Disable SPI Synchronous Slave mode + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll CR2 SLVEN LL_USART_DisableSPISlave + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSPISlave(USART_TypeDef* USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_SLVEN); +} + +/** + * @brief Indicate if SPI Synchronous Slave mode is enabled + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll CR2 SLVEN LL_USART_IsEnabledSPISlave + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSPISlave(USART_TypeDef* USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_SLVEN) == (USART_CR2_SLVEN)); +} + +/** + * @brief Enable SPI Slave Selection using NSS input pin + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @note SPI Slave Selection depends on NSS input pin + * (The slave is selected when NSS is low and deselected when NSS is high). + * @rmtoll CR2 DIS_NSS LL_USART_EnableSPISlaveSelect + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableSPISlaveSelect(USART_TypeDef* USARTx) +{ + CLEAR_BIT(USARTx->CR2, USART_CR2_DIS_NSS); +} + +/** + * @brief Disable SPI Slave Selection using NSS input pin + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @note SPI Slave will be always selected and NSS input pin will be ignored. + * @rmtoll CR2 DIS_NSS LL_USART_DisableSPISlaveSelect + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableSPISlaveSelect(USART_TypeDef* USARTx) +{ + SET_BIT(USARTx->CR2, USART_CR2_DIS_NSS); +} + +/** + * @brief Indicate if SPI Slave Selection depends on NSS input pin + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll CR2 DIS_NSS LL_USART_IsEnabledSPISlaveSelect + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledSPISlaveSelect(USART_TypeDef* USARTx) +{ + return (READ_BIT(USARTx->CR2, USART_CR2_DIS_NSS) != (USART_CR2_DIS_NSS)); +} + +/** + * @} + */ +#endif + /** @defgroup USART_LL_EF_Configuration_LIN Configuration functions related to LIN feature * @{ */ @@ -2566,6 +3065,25 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_IDLE(USART_TypeDef *USARTx) return (READ_BIT(USARTx->ISR, USART_ISR_IDLE) == (USART_ISR_IDLE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_IsActiveFlag_RXNE LL_USART_IsActiveFlag_RXNE_RXFNE + +/** + * @brief Check if the USART Read Data Register or USART RX FIFO Not Empty Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR RXNE_RXFNE LL_USART_IsActiveFlag_RXNE_RXFNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE_RXFNE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_RXNE_RXFNE) == (USART_ISR_RXNE_RXFNE)); +} +#else + /** * @brief Check if the USART Read Data Register Not Empty Flag is set or not * @rmtoll ISR RXNE LL_USART_IsActiveFlag_RXNE @@ -2576,6 +3094,7 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(USART_TypeDef *USARTx) { return (READ_BIT(USARTx->ISR, USART_ISR_RXNE) == (USART_ISR_RXNE)); } +#endif /** * @brief Check if the USART Transmission Complete Flag is set or not @@ -2588,6 +3107,25 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(USART_TypeDef *USARTx) return (READ_BIT(USARTx->ISR, USART_ISR_TC) == (USART_ISR_TC)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_IsActiveFlag_TXE LL_USART_IsActiveFlag_TXE_TXFNF + +/** + * @brief Check if the USART Transmit Data Register Empty or USART TX FIFO Not Full Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR TXE_TXFNF LL_USART_IsActiveFlag_TXE_TXFNF + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE_TXFNF(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_TXE_TXFNF) == (USART_ISR_TXE_TXFNF)); +} +#else + /** * @brief Check if the USART Transmit Data Register Empty Flag is set or not * @rmtoll ISR TXE LL_USART_IsActiveFlag_TXE @@ -2598,6 +3136,7 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(USART_TypeDef *USARTx) { return (READ_BIT(USARTx->ISR, USART_ISR_TXE) == (USART_ISR_TXE)); } +#endif /** * @brief Check if the USART LIN Break Detection Flag is set or not @@ -2662,6 +3201,22 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_EOB(USART_TypeDef *USARTx) return (READ_BIT(USARTx->ISR, USART_ISR_EOBF) == (USART_ISR_EOBF)); } +#if defined(USART_CR2_SLVEN) + +/** + * @brief Check if the SPI Slave Underrun error flag is set or not + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll ISR UDR LL_USART_IsActiveFlag_UDR + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_UDR(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_UDR) == (USART_ISR_UDR)); +} +#endif + /** * @brief Check if the USART Auto-Baud Rate Error Flag is set or not * @note Macro @ref IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(USARTx) can be used to check whether or not @@ -2767,7 +3322,37 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(USART_TypeDef *USARTx) return (READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if the USART TX FIFO Empty Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR TXFE LL_USART_IsActiveFlag_TXFE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXFE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_TXFE) == (USART_ISR_TXFE)); +} + +/** + * @brief Check if the USART RX FIFO Full Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR RXFF LL_USART_IsActiveFlag_RXFF + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXFF(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_RXFF) == (USART_ISR_RXFF)); +} +#endif + #if defined(USART_TCBGT_SUPPORT) + /* Function available only on devices supporting Transmit Complete before Guard Time feature */ /** * @brief Check if the Smartcard Transmission Complete Before Guard Time Flag is set or not @@ -2781,6 +3366,35 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(USART_TypeDef *USARTx) } #endif +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if the USART TX FIFO Threshold Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR TXFT LL_USART_IsActiveFlag_TXFT + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXFT(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_TXFT) == (USART_ISR_TXFT)); +} + +/** + * @brief Check if the USART RX FIFO Threshold Flag is set or not + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ISR RXFT LL_USART_IsActiveFlag_RXFT + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXFT(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->ISR, USART_ISR_RXFT) == (USART_ISR_RXFT)); +} +#endif + /** * @brief Clear Parity Error Flag * @rmtoll ICR PECF LL_USART_ClearFlag_PE @@ -2836,6 +3450,22 @@ __STATIC_INLINE void LL_USART_ClearFlag_IDLE(USART_TypeDef *USARTx) WRITE_REG(USARTx->ICR, USART_ICR_IDLECF); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Clear TX FIFO Empty Flag + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll ICR TXFECF LL_USART_ClearFlag_TXFE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_TXFE(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_TXFECF); +} +#endif + /** * @brief Clear Transmission Complete Flag * @rmtoll ICR TCCF LL_USART_ClearFlag_TC @@ -2848,6 +3478,7 @@ __STATIC_INLINE void LL_USART_ClearFlag_TC(USART_TypeDef *USARTx) } #if defined(USART_TCBGT_SUPPORT) + /* Function available only on devices supporting Transmit Complete before Guard Time feature */ /** * @brief Clear Smartcard Transmission Complete Before Guard Time Flag @@ -2911,6 +3542,22 @@ __STATIC_INLINE void LL_USART_ClearFlag_EOB(USART_TypeDef *USARTx) WRITE_REG(USARTx->ICR, USART_ICR_EOBCF); } +#if defined(USART_CR2_SLVEN) + +/** + * @brief Clear SPI Slave Underrun Flag + * @note Macro @ref IS_UART_SPI_SLAVE_INSTANCE(USARTx) can be used to check whether or not + * SPI Slave mode feature is supported by the USARTx instance. + * @rmtoll ICR UDRCF LL_USART_ClearFlag_UDR + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_ClearFlag_UDR(USART_TypeDef *USARTx) +{ + WRITE_REG(USARTx->ICR, USART_ICR_UDRCF); +} +#endif + /** * @brief Clear Character Match Flag * @rmtoll ICR CMCF LL_USART_ClearFlag_CM @@ -2954,6 +3601,25 @@ __STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx) SET_BIT(USARTx->CR1, USART_CR1_IDLEIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_EnableIT_RXNE LL_USART_EnableIT_RXNE_RXFNE + +/** + * @brief Enable RX Not Empty and RX FIFO Not Empty Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 RXNEIE_RXFNEIE LL_USART_EnableIT_RXNE_RXFNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RXNE_RXFNE(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE); +} +#else + /** * @brief Enable RX Not Empty Interrupt * @rmtoll CR1 RXNEIE LL_USART_EnableIT_RXNE @@ -2964,6 +3630,7 @@ __STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx) { SET_BIT(USARTx->CR1, USART_CR1_RXNEIE); } +#endif /** * @brief Enable Transmission Complete Interrupt @@ -2976,6 +3643,25 @@ __STATIC_INLINE void LL_USART_EnableIT_TC(USART_TypeDef *USARTx) SET_BIT(USARTx->CR1, USART_CR1_TCIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_EnableIT_TXE LL_USART_EnableIT_TXE_TXFNF + +/** + * @brief Enable TX Empty and TX FIFO Not Full Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXEIE_TXFNFIE LL_USART_EnableIT_TXE_TXFNF + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TXE_TXFNF(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE); +} +#else + /** * @brief Enable TX Empty Interrupt * @rmtoll CR1 TXEIE LL_USART_EnableIT_TXE @@ -2986,6 +3672,7 @@ __STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx) { SET_BIT(USARTx->CR1, USART_CR1_TXEIE); } +#endif /** * @brief Enable Parity Error Interrupt @@ -3033,6 +3720,33 @@ __STATIC_INLINE void LL_USART_EnableIT_EOB(USART_TypeDef *USARTx) SET_BIT(USARTx->CR1, USART_CR1_EOBIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Enable TX FIFO Empty Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXFEIE LL_USART_EnableIT_TXFE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TXFE(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_TXFEIE); +} + +/** + * @brief Enable RX FIFO Full Interrupt + * @rmtoll CR1 RXFFIE LL_USART_EnableIT_RXFF + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RXFF(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR1, USART_CR1_RXFFIE); +} +#endif + /** * @brief Enable LIN Break Detection Interrupt * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not @@ -3087,7 +3801,24 @@ __STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx) SET_BIT(USARTx->CR3, USART_CR3_WUFIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Enable TX FIFO Threshold Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTIE LL_USART_EnableIT_TXFT + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_TXFT(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_TXFTIE); +} +#endif + #if defined(USART_TCBGT_SUPPORT) + /* Function available only on devices supporting Transmit Complete before Guard Time feature */ /** * @brief Enable Smartcard Transmission Complete Before Guard Time Interrupt @@ -3103,6 +3834,22 @@ __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx) } #endif +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Enable RX FIFO Threshold Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 RXFTIE LL_USART_EnableIT_RXFT + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_EnableIT_RXFT(USART_TypeDef *USARTx) +{ + SET_BIT(USARTx->CR3, USART_CR3_RXFTIE); +} +#endif + /** * @brief Disable IDLE Interrupt * @rmtoll CR1 IDLEIE LL_USART_DisableIT_IDLE @@ -3114,6 +3861,25 @@ __STATIC_INLINE void LL_USART_DisableIT_IDLE(USART_TypeDef *USARTx) CLEAR_BIT(USARTx->CR1, USART_CR1_IDLEIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_DisableIT_RXNE LL_USART_DisableIT_RXNE_RXFNE + +/** + * @brief Disable RX Not Empty and RX FIFO Not Empty Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 RXNEIE_RXFNEIE LL_USART_DisableIT_RXNE_RXFNE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RXNE_RXFNE(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE); +} +#else + /** * @brief Disable RX Not Empty Interrupt * @rmtoll CR1 RXNEIE LL_USART_DisableIT_RXNE @@ -3124,6 +3890,7 @@ __STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx) { CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE); } +#endif /** * @brief Disable Transmission Complete Interrupt @@ -3136,6 +3903,25 @@ __STATIC_INLINE void LL_USART_DisableIT_TC(USART_TypeDef *USARTx) CLEAR_BIT(USARTx->CR1, USART_CR1_TCIE); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_DisableIT_TXE LL_USART_DisableIT_TXE_TXFNF + +/** + * @brief Disable TX Empty and TX FIFO Not Full Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXEIE_TXFNFIE LL_USART_DisableIT_TXE_TXFNF + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TXE_TXFNF(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE); +} +#else + /** * @brief Disable TX Empty Interrupt * @rmtoll CR1 TXEIE LL_USART_DisableIT_TXE @@ -3146,6 +3932,7 @@ __STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx) { CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE); } +#endif /** * @brief Disable Parity Error Interrupt @@ -3193,6 +3980,35 @@ __STATIC_INLINE void LL_USART_DisableIT_EOB(USART_TypeDef *USARTx) CLEAR_BIT(USARTx->CR1, USART_CR1_EOBIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Disable TX FIFO Empty Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXFEIE LL_USART_DisableIT_TXFE + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TXFE(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_TXFEIE); +} + +/** + * @brief Disable RX FIFO Full Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 RXFFIE LL_USART_DisableIT_RXFF + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RXFF(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR1, USART_CR1_RXFFIE); +} +#endif + /** * @brief Disable LIN Break Detection Interrupt * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not @@ -3247,6 +4063,22 @@ __STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx) CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Disable TX FIFO Threshold Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTIE LL_USART_DisableIT_TXFT + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_TXFT(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_TXFTIE); +} +#endif + #if defined(USART_TCBGT_SUPPORT) /* Function available only on devices supporting Transmit Complete before Guard Time feature */ /** @@ -3263,6 +4095,22 @@ __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx) } #endif +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Disable RX FIFO Threshold Interrupt + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 RXFTIE LL_USART_DisableIT_RXFT + * @param USARTx USART Instance + * @retval None + */ +__STATIC_INLINE void LL_USART_DisableIT_RXFT(USART_TypeDef *USARTx) +{ + CLEAR_BIT(USARTx->CR3, USART_CR3_RXFTIE); +} +#endif + /** * @brief Check if the USART IDLE Interrupt source is enabled or disabled. * @rmtoll CR1 IDLEIE LL_USART_IsEnabledIT_IDLE @@ -3274,6 +4122,25 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_IDLE(USART_TypeDef *USARTx) return (READ_BIT(USARTx->CR1, USART_CR1_IDLEIE) == (USART_CR1_IDLEIE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_IsEnabledIT_RXNE LL_USART_IsEnabledIT_RXNE_RXFNE + +/** + * @brief Check if the USART RX Not Empty and USART RX FIFO Not Empty Interrupt is enabled or disabled. + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 RXNEIE_RXFNEIE LL_USART_IsEnabledIT_RXNE_RXFNE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE_RXFNE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE) == (USART_CR1_RXNEIE_RXFNEIE)); +} +#else + /** * @brief Check if the USART RX Not Empty Interrupt is enabled or disabled. * @rmtoll CR1 RXNEIE LL_USART_IsEnabledIT_RXNE @@ -3284,6 +4151,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXNE(USART_TypeDef *USARTx) { return (READ_BIT(USARTx->CR1, USART_CR1_RXNEIE) == (USART_CR1_RXNEIE)); } +#endif /** * @brief Check if the USART Transmission Complete Interrupt is enabled or disabled. @@ -3296,6 +4164,25 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TC(USART_TypeDef *USARTx) return (READ_BIT(USARTx->CR1, USART_CR1_TCIE) == (USART_CR1_TCIE)); } +#if defined(USART_CR1_FIFOEN) + +/* Legacy define */ +#define LL_USART_IsEnabledIT_TXE LL_USART_IsEnabledIT_TXE_TXFNF + +/** + * @brief Check if the USART TX Empty and USART TX FIFO Not Full Interrupt is enabled or disabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXEIE_TXFNFIE LL_USART_IsEnabledIT_TXE_TXFNF + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE_TXFNF(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE_TXFNFIE) == (USART_CR1_TXEIE_TXFNFIE)); +} +#else + /** * @brief Check if the USART TX Empty Interrupt is enabled or disabled. * @rmtoll CR1 TXEIE LL_USART_IsEnabledIT_TXE @@ -3306,6 +4193,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXE(USART_TypeDef *USARTx) { return (READ_BIT(USARTx->CR1, USART_CR1_TXEIE) == (USART_CR1_TXEIE)); } +#endif /** * @brief Check if the USART Parity Error Interrupt is enabled or disabled. @@ -3353,6 +4241,35 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_EOB(USART_TypeDef *USARTx) return (READ_BIT(USARTx->CR1, USART_CR1_EOBIE) == (USART_CR1_EOBIE)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if the USART TX FIFO Empty Interrupt is enabled or disabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 TXFEIE LL_USART_IsEnabledIT_TXFE + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXFE(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_TXFEIE) == (USART_CR1_TXFEIE)); +} + +/** + * @brief Check if the USART RX FIFO Full Interrupt is enabled or disabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR1 RXFFIE LL_USART_IsEnabledIT_RXFF + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXFF(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR1, USART_CR1_RXFFIE) == (USART_CR1_RXFFIE)); +} +#endif + /** * @brief Check if the USART LIN Break Detection Interrupt is enabled or disabled. * @note Macro @ref IS_UART_LIN_INSTANCE(USARTx) can be used to check whether or not @@ -3403,7 +4320,24 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(USART_TypeDef *USARTx) return (READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)); } +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if USART TX FIFO Threshold Interrupt is enabled or disabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 TXFTIE LL_USART_IsEnabledIT_TXFT + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TXFT(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_TXFTIE) == (USART_CR3_TXFTIE)); +} +#endif + #if defined(USART_TCBGT_SUPPORT) + /* Function available only on devices supporting Transmit Complete before Guard Time feature */ /** * @brief Check if the Smartcard Transmission Complete Before Guard Time Interrupt is enabled or disabled. @@ -3419,6 +4353,22 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(USART_TypeDef *USARTx) } #endif +#if defined(USART_CR1_FIFOEN) + +/** + * @brief Check if USART RX FIFO Threshold Interrupt is enabled or disabled + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @rmtoll CR3 RXFTIE LL_USART_IsEnabledIT_RXFT + * @param USARTx USART Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_RXFT(USART_TypeDef *USARTx) +{ + return (READ_BIT(USARTx->CR3, USART_CR3_RXFTIE) == (USART_CR3_RXFTIE)); +} +#endif + /** * @} */ @@ -3652,7 +4602,15 @@ __STATIC_INLINE void LL_USART_RequestEnterMuteMode(USART_TypeDef *USARTx) } /** + @if USART_CR1_FIFOEN + * @brief Request a Receive Data and FIFO flush + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + * @note Allows to discard the received data without reading them, and avoid an overrun + * condition. + @else * @brief Request a Receive Data flush + @endif * @rmtoll RQR RXFRQ LL_USART_RequestRxDataFlush * @param USARTx USART Instance * @retval None @@ -3663,7 +4621,13 @@ __STATIC_INLINE void LL_USART_RequestRxDataFlush(USART_TypeDef *USARTx) } /** + @if USART_CR1_FIFOEN + * @brief Request a Transmit data and FIFO flush + * @note Macro @ref IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not + * FIFO mode feature is supported by the USARTx instance. + @else * @brief Request a Transmit data flush + @endif * @note Macro @ref IS_SMARTCARD_INSTANCE(USARTx) can be used to check whether or not * Smartcard feature is supported by the USARTx instance. * @rmtoll RQR TXFRQ LL_USART_RequestTxDataFlush diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c index d31a3b1f24..544bc6e826 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_usb.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief USB Low Layer HAL module driver. * * This file provides firmware functions to manage the following @@ -67,7 +65,8 @@ #if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /** @addtogroup STM32L4xx_LL_USB_DRIVER * @{ @@ -2386,7 +2385,8 @@ static HAL_StatusTypeDef USB_CoreReset(USB_OTG_GlobalTypeDef *USBx) #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #endif /* defined (HAL_PCD_MODULE_ENABLED) || defined (HAL_HCD_MODULE_ENABLED) */ /** diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.h index 9b30b103fa..d10baf2e60 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_usb.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of USB Core HAL module. ****************************************************************************** * @attention @@ -46,7 +44,8 @@ #if defined(STM32L432xx) || defined(STM32L433xx) || defined(STM32L442xx) || defined(STM32L443xx) || \ defined(STM32L452xx) || defined(STM32L462xx) || \ defined(STM32L475xx) || defined(STM32L476xx) || defined(STM32L485xx) || defined(STM32L486xx) || \ - defined(STM32L496xx) || defined(STM32L4A6xx) + defined(STM32L496xx) || defined(STM32L4A6xx) || \ + defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_hal_def.h" @@ -605,7 +604,8 @@ void USB_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, ui #endif /* STM32L432xx || STM32L433xx || STM32L442xx || STM32L443xx || */ /* STM32L452xx || STM32L462xx || */ /* STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || */ - /* STM32L496xx || STM32L4A6xx */ + /* STM32L496xx || STM32L4A6xx || */ + /* STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx */ #ifdef __cplusplus } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c index 57c477b0c9..ab554fc155 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_utils.c * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief UTILS LL module driver. ****************************************************************************** * @attention @@ -54,8 +52,13 @@ /** @addtogroup UTILS_LL_Private_Constants * @{ */ -#define UTILS_MAX_FREQUENCY_SCALE1 80000000U /*!< Maximum frequency for system clock at power scale1, in Hz */ -#define UTILS_MAX_FREQUENCY_SCALE2 26000000U /*!< Maximum frequency for system clock at power scale2, in Hz */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define UTILS_MAX_FREQUENCY_SCALE1 120000000U /*!< Maximum frequency for system clock at power scale1, in Hz */ +#define UTILS_MAX_FREQUENCY_SCALE2 26000000U /*!< Maximum frequency for system clock at power scale2, in Hz */ +#else +#define UTILS_MAX_FREQUENCY_SCALE1 80000000U /*!< Maximum frequency for system clock at power scale1, in Hz */ +#define UTILS_MAX_FREQUENCY_SCALE2 26000000U /*!< Maximum frequency for system clock at power scale2, in Hz */ +#endif /* Defines used for PLL range */ #define UTILS_PLLVCO_INPUT_MIN 4000000U /*!< Frequency min for PLLVCO input, in Hz */ @@ -68,6 +71,15 @@ #define UTILS_HSE_FREQUENCY_MAX 48000000U /*!< Frequency max for HSE frequency, in Hz */ /* Defines used for FLASH latency according to HCLK Frequency */ +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) +#define UTILS_SCALE1_LATENCY1_FREQ 20000000U /*!< HCLK frequency to set FLASH latency 1 in power scale 1 */ +#define UTILS_SCALE1_LATENCY2_FREQ 40000000U /*!< HCLK frequency to set FLASH latency 2 in power scale 1 */ +#define UTILS_SCALE1_LATENCY3_FREQ 60000000U /*!< HCLK frequency to set FLASH latency 3 in power scale 1 */ +#define UTILS_SCALE1_LATENCY4_FREQ 80000000U /*!< HCLK frequency to set FLASH latency 4 in power scale 1 */ +#define UTILS_SCALE1_LATENCY5_FREQ 100000000U /*!< HCLK frequency to set FLASH latency 4 in power scale 1 */ +#define UTILS_SCALE2_LATENCY1_FREQ 8000000U /*!< HCLK frequency to set FLASH latency 1 in power scale 2 */ +#define UTILS_SCALE2_LATENCY2_FREQ 16000000U /*!< HCLK frequency to set FLASH latency 2 in power scale 2 */ +#else #define UTILS_SCALE1_LATENCY1_FREQ 16000000U /*!< HCLK frequency to set FLASH latency 1 in power scale 1 */ #define UTILS_SCALE1_LATENCY2_FREQ 32000000U /*!< HCLK frequency to set FLASH latency 2 in power scale 1 */ #define UTILS_SCALE1_LATENCY3_FREQ 48000000U /*!< HCLK frequency to set FLASH latency 3 in power scale 1 */ @@ -75,6 +87,7 @@ #define UTILS_SCALE2_LATENCY1_FREQ 6000000U /*!< HCLK frequency to set FLASH latency 1 in power scale 2 */ #define UTILS_SCALE2_LATENCY2_FREQ 12000000U /*!< HCLK frequency to set FLASH latency 2 in power scale 2 */ #define UTILS_SCALE2_LATENCY3_FREQ 18000000U /*!< HCLK frequency to set FLASH latency 3 in power scale 2 */ +#endif /** * @} */ @@ -216,29 +229,51 @@ void LL_mDelay(uint32_t Delay) [..] System, AHB and APB buses clocks configuration - (+) The maximum frequency of the SYSCLK, HCLK, PCLK1 and PCLK2 is 80000000 Hz. + (+) The maximum frequency of the SYSCLK, HCLK, PCLK1 and PCLK2 is + 120000000 Hz for STM32L4Rx/STM32L4Sx devices and 80000000 Hz for others. @endverbatim @internal Depending on the device voltage range, the maximum frequency should be adapted accordingly: - (++) Table 1. HCLK clock frequency. - (++) +-------------------------------------------------------+ - (++) | Latency | HCLK clock frequency (MHz) | - (++) | |-------------------------------------| - (++) | | voltage range 1 | voltage range 2 | - (++) | | 1.2 V | 1.0 V | - (++) |-----------------|------------------|------------------| - (++) |0WS(1 CPU cycles)| 0 < HCLK <= 16 | 0 < HCLK <= 6 | - (++) |-----------------|------------------|------------------| - (++) |1WS(2 CPU cycles)| 16 < HCLK <= 32 | 6 < HCLK <= 12 | - (++) |-----------------|------------------|------------------| - (++) |2WS(3 CPU cycles)| 32 < HCLK <= 48 | 12 < HCLK <= 18 | - (++) |-----------------|------------------|------------------| - (++) |3WS(4 CPU cycles)| 48 < HCLK <= 64 | 18 < HCLK <= 26 | - (++) |-----------------|------------------|------------------| - (++) |4WS(5 CPU cycles)| 64 < HCLK <= 80 | 18 < HCLK <= 26 | - (++) +-------------------------------------------------------+ + (++) Table 1. HCLK clock frequency for STM32L4Rx/STM32L4Sx devices + (++) +--------------------------------------------------------+ + (++) | Latency | HCLK clock frequency (MHz) | + (++) | |--------------------------------------| + (++) | | voltage range 1 | voltage range 2 | + (++) | | 1.2 V | 1.0 V | + (++) |-----------------|-------------------|------------------| + (++) |0WS(1 CPU cycles)| 0 < HCLK <= 20 | 0 < HCLK <= 8 | + (++) |-----------------|-------------------|------------------| + (++) |1WS(2 CPU cycles)| 20 < HCLK <= 40 | 8 < HCLK <= 16 | + (++) |-----------------|-------------------|------------------| + (++) |2WS(3 CPU cycles)| 40 < HCLK <= 60 | 16 < HCLK <= 26 | + (++) |-----------------|-------------------|------------------| + (++) |3WS(4 CPU cycles)| 60 < HCLK <= 80 | 16 < HCLK <= 26 | + (++) |-----------------|-------------------|------------------| + (++) |4WS(5 CPU cycles)| 80 < HCLK <= 100 | 16 < HCLK <= 26 | + (++) |-----------------|-------------------|------------------| + (++) |5WS(6 CPU cycles)| 100 < HCLK <= 120 | 16 < HCLK <= 26 | + (++) +--------------------------------------------------------+ + + (++) Table 2. HCLK clock frequency for other STM32L4 devices + (++) +-------------------------------------------------------+ + (++) | Latency | HCLK clock frequency (MHz) | + (++) | |-------------------------------------| + (++) | | voltage range 1 | voltage range 2 | + (++) | | 1.2 V | 1.0 V | + (++) |-----------------|------------------|------------------| + (++) |0WS(1 CPU cycles)| 0 < HCLK <= 16 | 0 < HCLK <= 6 | + (++) |-----------------|------------------|------------------| + (++) |1WS(2 CPU cycles)| 16 < HCLK <= 32 | 6 < HCLK <= 12 | + (++) |-----------------|------------------|------------------| + (++) |2WS(3 CPU cycles)| 32 < HCLK <= 48 | 12 < HCLK <= 18 | + (++) |-----------------|------------------|------------------| + (++) |3WS(4 CPU cycles)| 48 < HCLK <= 64 | 18 < HCLK <= 26 | + (++) |-----------------|------------------|------------------| + (++) |4WS(5 CPU cycles)| 64 < HCLK <= 80 | 18 < HCLK <= 26 | + (++) +-------------------------------------------------------+ + @endinternal * @{ */ @@ -262,7 +297,7 @@ void LL_SetSystemCoreClock(uint32_t HCLKFrequency) * - PLL output frequency = (((MSI frequency / PLLM) * PLLN) / PLLR) * - PLLM: ensure that the VCO input frequency ranges from 4 to 16 MHz (PLLVCO_input = MSI frequency / PLLM) * - PLLN: ensure that the VCO output frequency is between 64 and 344 MHz (PLLVCO_output = PLLVCO_input * PLLN) - * - PLLR: ensure that max frequency at 80000000 Hz is reached (PLLVCO_output / PLLR) + * - PLLR: ensure that max frequency at 120000000 Hz is reached (PLLVCO_output / PLLR) * @param UTILS_PLLInitStruct pointer to a @ref LL_UTILS_PLLInitTypeDef structure that contains * the configuration information for the PLL. * @param UTILS_ClkInitStruct pointer to a @ref LL_UTILS_ClkInitTypeDef structure that contains @@ -276,6 +311,9 @@ ErrorStatus LL_PLL_ConfigSystemClock_MSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS { ErrorStatus status = SUCCESS; uint32_t pllfreq = 0U, msi_range = 0U; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t hpre = 0U; +#endif /* Check if one of the PLL is enabled */ if(UTILS_PLL_IsBusy() == SUCCESS) @@ -292,7 +330,7 @@ ErrorStatus LL_PLL_ConfigSystemClock_MSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS case LL_RCC_MSIRANGE_3: /* MSI = 800 KHz */ case LL_RCC_MSIRANGE_4: /* MSI = 1 MHz */ case LL_RCC_MSIRANGE_5: /* MSI = 2 MHz */ - /* PLLVCO input frequency can not in the range from 4 to 16 MHz*/ + /* PLLVCO input frequency is not in the range from 4 to 16 MHz*/ status = ERROR; break; @@ -345,8 +383,28 @@ ErrorStatus LL_PLL_ConfigSystemClock_MSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_MSI, UTILS_PLLInitStruct->PLLM, UTILS_PLLInitStruct->PLLN, UTILS_PLLInitStruct->PLLR); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Prevent undershoot at highest frequency by applying intermediate AHB prescaler 2 */ + if(pllfreq > 80000000U) + { + hpre = UTILS_ClkInitStruct->AHBCLKDivider; + if(hpre == LL_RCC_SYSCLK_DIV_1) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_2; + } + } +#endif /* Enable PLL and switch system clock to PLL */ status = UTILS_EnablePLLAndSwitchSystem(pllfreq, UTILS_ClkInitStruct); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Apply definitive AHB prescaler value if necessary */ + if((status == SUCCESS) && (hpre != 0U)) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_1; + LL_RCC_SetAHBPrescaler(UTILS_ClkInitStruct->AHBCLKDivider); + } +#endif } } else @@ -365,7 +423,7 @@ ErrorStatus LL_PLL_ConfigSystemClock_MSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS * - PLL output frequency = (((HSI frequency / PLLM) * PLLN) / PLLR) * - PLLM: ensure that the VCO input frequency ranges from 4 to 16 MHz (PLLVCO_input = HSI frequency / PLLM) * - PLLN: ensure that the VCO output frequency is between 64 and 344 MHz (PLLVCO_output = PLLVCO_input * PLLN) - * - PLLR: ensure that max frequency at 80000000 Hz is reach (PLLVCO_output / PLLR) + * - PLLR: ensure that max frequency at 120000000 Hz is reach (PLLVCO_output / PLLR) * @param UTILS_PLLInitStruct pointer to a @ref LL_UTILS_PLLInitTypeDef structure that contains * the configuration information for the PLL. * @param UTILS_ClkInitStruct pointer to a @ref LL_UTILS_ClkInitTypeDef structure that contains @@ -379,6 +437,9 @@ ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS { ErrorStatus status = SUCCESS; uint32_t pllfreq = 0U; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t hpre = 0U; +#endif /* Check if one of the PLL is enabled */ if(UTILS_PLL_IsBusy() == SUCCESS) @@ -400,8 +461,28 @@ ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, UTILS_PLLInitStruct->PLLM, UTILS_PLLInitStruct->PLLN, UTILS_PLLInitStruct->PLLR); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Prevent undershoot at highest frequency by applying intermediate AHB prescaler 2 */ + if(pllfreq > 80000000U) + { + hpre = UTILS_ClkInitStruct->AHBCLKDivider; + if(hpre == LL_RCC_SYSCLK_DIV_1) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_2; + } + } +#endif /* Enable PLL and switch system clock to PLL */ status = UTILS_EnablePLLAndSwitchSystem(pllfreq, UTILS_ClkInitStruct); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Apply definitive AHB prescaler value if necessary */ + if((status == SUCCESS) && (hpre != 0U)) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_1; + LL_RCC_SetAHBPrescaler(UTILS_ClkInitStruct->AHBCLKDivider); + } +#endif } else { @@ -419,7 +500,7 @@ ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitS * - PLL output frequency = (((HSE frequency / PLLM) * PLLN) / PLLR) * - PLLM: ensure that the VCO input frequency ranges from 4 to 16 MHz (PLLVCO_input = HSE frequency / PLLM) * - PLLN: ensure that the VCO output frequency is between 64 and 344 MHz (PLLVCO_output = PLLVCO_input * PLLN) - * - PLLR: ensure that max frequency at 80000000 Hz is reached (PLLVCO_output / PLLR) + * - PLLR: ensure that max frequency at 120000000 Hz is reached (PLLVCO_output / PLLR) * @param HSEFrequency Value between Min_Data = 4000000 and Max_Data = 48000000 * @param HSEBypass This parameter can be one of the following values: * @arg @ref LL_UTILS_HSEBYPASS_ON @@ -437,6 +518,9 @@ ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypa { ErrorStatus status = SUCCESS; uint32_t pllfreq = 0U; +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + uint32_t hpre = 0U; +#endif /* Check the parameters */ assert_param(IS_LL_UTILS_HSE_FREQUENCY(HSEFrequency)); @@ -473,8 +557,28 @@ ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypa LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, UTILS_PLLInitStruct->PLLM, UTILS_PLLInitStruct->PLLN, UTILS_PLLInitStruct->PLLR); +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Prevent undershoot at highest frequency by applying intermediate AHB prescaler 2 */ + if(pllfreq > 80000000U) + { + hpre = UTILS_ClkInitStruct->AHBCLKDivider; + if(hpre == LL_RCC_SYSCLK_DIV_1) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_2; + } + } +#endif /* Enable PLL and switch system clock to PLL */ status = UTILS_EnablePLLAndSwitchSystem(pllfreq, UTILS_ClkInitStruct); + +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + /* Apply definitive AHB prescaler value if necessary */ + if((status == SUCCESS) && (hpre != 0U)) + { + UTILS_ClkInitStruct->AHBCLKDivider = LL_RCC_SYSCLK_DIV_1; + LL_RCC_SetAHBPrescaler(UTILS_ClkInitStruct->AHBCLKDivider); + } +#endif } else { @@ -519,6 +623,37 @@ static ErrorStatus UTILS_SetFlashLatency(uint32_t HCLK_Frequency) { if(LL_PWR_GetRegulVoltageScaling() == LL_PWR_REGU_VOLTAGE_SCALE1) { +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + if(HCLK_Frequency > UTILS_SCALE1_LATENCY5_FREQ) + { + /* 100 < HCLK <= 120 => 5WS (6 CPU cycles) */ + latency = LL_FLASH_LATENCY_5; + } + else if(HCLK_Frequency > UTILS_SCALE1_LATENCY4_FREQ) + { + /* 80 < HCLK <= 100 => 4WS (5 CPU cycles) */ + latency = LL_FLASH_LATENCY_4; + } + else if(HCLK_Frequency > UTILS_SCALE1_LATENCY3_FREQ) + { + /* 60 < HCLK <= 80 => 3WS (4 CPU cycles) */ + latency = LL_FLASH_LATENCY_3; + } + else if(HCLK_Frequency > UTILS_SCALE1_LATENCY2_FREQ) + { + /* 40 < HCLK <= 20 => 2WS (3 CPU cycles) */ + latency = LL_FLASH_LATENCY_2; + } + else + { + if(HCLK_Frequency > UTILS_SCALE1_LATENCY1_FREQ) + { + /* 20 < HCLK <= 40 => 1WS (2 CPU cycles) */ + latency = LL_FLASH_LATENCY_1; + } + /* else HCLK_Frequency <= 10MHz default LL_FLASH_LATENCY_0 0WS */ + } +#else if(HCLK_Frequency > UTILS_SCALE1_LATENCY4_FREQ) { /* 64 < HCLK <= 80 => 4WS (5 CPU cycles) */ @@ -541,11 +676,28 @@ static ErrorStatus UTILS_SetFlashLatency(uint32_t HCLK_Frequency) /* 16 < HCLK <= 32 => 1WS (2 CPU cycles) */ latency = LL_FLASH_LATENCY_1; } - /* else HCLK_Frequency < 16MHz default LL_FLASH_LATENCY_0 0WS */ + /* else HCLK_Frequency <= 16MHz default LL_FLASH_LATENCY_0 0WS */ } +#endif } else /* SCALE2 */ { +#if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) + if(HCLK_Frequency > UTILS_SCALE2_LATENCY2_FREQ) + { + /* 16 < HCLK <= 26 => 2WS (3 CPU cycles) */ + latency = LL_FLASH_LATENCY_2; + } + else + { + if(HCLK_Frequency > UTILS_SCALE2_LATENCY1_FREQ) + { + /* 8 < HCLK <= 16 => 1WS (2 CPU cycles) */ + latency = LL_FLASH_LATENCY_1; + } + /* else HCLK_Frequency <= 8MHz default LL_FLASH_LATENCY_0 0WS */ + } +#else if(HCLK_Frequency > UTILS_SCALE2_LATENCY3_FREQ) { /* 18 < HCLK <= 26 => 3WS (4 CPU cycles) */ @@ -563,8 +715,9 @@ static ErrorStatus UTILS_SetFlashLatency(uint32_t HCLK_Frequency) /* 6 < HCLK <= 12 => 1WS (2 CPU cycles) */ latency = LL_FLASH_LATENCY_1; } - /* else HCLK_Frequency < 6MHz default LL_FLASH_LATENCY_0 0WS */ + /* else HCLK_Frequency <= 6MHz default LL_FLASH_LATENCY_0 0WS */ } +#endif } LL_FLASH_SetLatency(latency); @@ -604,7 +757,7 @@ static uint32_t UTILS_GetPLLOutputFrequency(uint32_t PLL_InputFrequency, LL_UTIL pllfreq = pllfreq * (UTILS_PLLInitStruct->PLLN & (RCC_PLLCFGR_PLLN >> RCC_PLLCFGR_PLLN_Pos)); assert_param(IS_LL_UTILS_PLLVCO_OUTPUT(pllfreq)); - /* - PLLR: ensure that max frequency at 80000000 Hz is reached */ + /* - PLLR: ensure that max frequency at 120000000 Hz is reached */ pllfreq = pllfreq / (((UTILS_PLLInitStruct->PLLR >> RCC_PLLCFGR_PLLR_Pos) + 1) * 2); assert_param(IS_LL_UTILS_PLL_FREQUENCY(pllfreq)); @@ -634,8 +787,8 @@ static ErrorStatus UTILS_PLL_IsBusy(void) /* PLLSAI1 configuration cannot be modified */ status = ERROR; } - #if defined(RCC_PLLSAI2_SUPPORT) + /* Check if PLLSAI2 is busy*/ if(LL_RCC_PLLSAI2_IsReady() != 0U) { diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.h index cc764390b7..01a32c8ab8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_utils.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of UTILS LL module. @verbatim ============================================================================== @@ -189,6 +187,11 @@ typedef struct #define LL_UTILS_PACKAGETYPE_UFBGA64 0x0000000DU /*!< UFBGA64 package type */ #define LL_UTILS_PACKAGETYPE_UFBGA100 0x0000000EU /*!< UFBGA100 package type */ #define LL_UTILS_PACKAGETYPE_UFBGA169 0x00000010U /*!< UFBGA169 package type */ +#define LL_UTILS_PACKAGETYPE_LQFP100_DSI 0x00000012U /*!< LQFP100 with DSI package type */ +#define LL_UTILS_PACKAGETYPE_WLCSP144_DSI 0x00000013U /*!< WLCSP144 with DSI package type */ +#define LL_UTILS_PACKAGETYPE_UFBGA144_DSI 0x00000013U /*!< UFBGA144 with DSI package type */ +#define LL_UTILS_PACKAGETYPE_UFBGA169_DSI 0x00000014U /*!< UFBGA169 with DSI package type */ +#define LL_UTILS_PACKAGETYPE_LQFP144_DSI 0x00000015U /*!< LQFP144 with DSI package type */ /** * @} */ @@ -243,7 +246,7 @@ __STATIC_INLINE uint32_t LL_GetUID_Word2(void) */ __STATIC_INLINE uint32_t LL_GetFlashSize(void) { - return (uint16_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS))); + return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFFU); } /** @@ -260,12 +263,17 @@ __STATIC_INLINE uint32_t LL_GetFlashSize(void) * @arg @ref LL_UTILS_PACKAGETYPE_UFBGA64 (*) * @arg @ref LL_UTILS_PACKAGETYPE_UFBGA100 (*) * @arg @ref LL_UTILS_PACKAGETYPE_UFBGA169 (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP100_DSI (*) + * @arg @ref LL_UTILS_PACKAGETYPE_WLCSP144_DSI (*) + * @arg @ref LL_UTILS_PACKAGETYPE_UFBGA144_DSI (*) + * @arg @ref LL_UTILS_PACKAGETYPE_UFBGA169_DSI (*) + * @arg @ref LL_UTILS_PACKAGETYPE_LQFP144_DSI (*) * * (*) value not defined in all devices. */ __STATIC_INLINE uint32_t LL_GetPackageType(void) { - return (uint8_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x1FU); + return (uint32_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x1FU); } /** @@ -279,7 +287,7 @@ __STATIC_INLINE uint32_t LL_GetPackageType(void) /** * @brief This function configures the Cortex-M SysTick source of the time base. * @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro) - * @note When a RTOS is used, it is recommended to avoid changing the SysTick + * @note When a RTOS is used, it is recommended to avoid changing the SysTick * configuration by calling this function, for a delay use rather osDelay RTOS service. * @param Ticks Number of ticks * @retval None diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_wwdg.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_wwdg.h index 19528d2527..01ba7d0987 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_wwdg.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_wwdg.h @@ -2,8 +2,6 @@ ****************************************************************************** * @file stm32l4xx_ll_wwdg.h * @author MCD Application Team - * @version V1.7.1 - * @date 21-April-2017 * @brief Header file of WWDG LL module. ****************************************************************************** * @attention From 6b5302c8f59d19f8715791b9824ba2abd4fea809 Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 5 Jan 2018 22:04:19 +0100 Subject: [PATCH 116/133] Add more comments --- .../TARGET_STM32L4/device/stm32l4xx_hal_def.h | 5 ++- .../TARGET_STM32L4/device/stm32l4xx_hal_hcd.c | 9 ++++- .../TARGET_STM32L4/device/stm32l4xx_hal_i2c.c | 2 ++ .../TARGET_STM32L4/device/stm32l4xx_hal_pcd.c | 36 +++++++++++++++---- .../TARGET_STM32L4/device/stm32l4xx_hal_pcd.h | 3 ++ .../TARGET_STM32L4/device/stm32l4xx_hal_spi.c | 1 + .../TARGET_STM32L4/device/stm32l4xx_ll_usb.c | 3 ++ .../device/stm32l4xx_ll_utils.c | 7 ++++ 8 files changed, 57 insertions(+), 9 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h index 28d8e4f906..fcee1d4eca 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_def.h @@ -122,10 +122,13 @@ typedef enum (__HANDLE__)->Lock = HAL_UNLOCKED; \ }while (0) #endif /* USE_RTOS */ + +// Added for MBED PR #3062 #if defined (__CC_ARM) #pragma diag_suppress 3731 #endif +// Added for MBED PR #3062 static inline void atomic_set_u32(volatile uint32_t *ptr, uint32_t mask) { uint32_t newValue; @@ -135,7 +138,7 @@ static inline void atomic_set_u32(volatile uint32_t *ptr, uint32_t mask) } while (__STREXW(newValue, ptr)); } - +// Added for MBED PR #3062 static inline void atomic_clr_u32(volatile uint32_t *ptr, uint32_t mask) { uint32_t newValue; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c index a1b683449b..8409955e3b 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_hcd.c @@ -206,7 +206,9 @@ HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, hhcd->hc[ch_num].ep_num = epnum & 0x7F; hhcd->hc[ch_num].ep_is_in = ((epnum & 0x80) == 0x80); hhcd->hc[ch_num].speed = speed; - /* reset to 0 */ + + // Added for MBED PR #3432 + /* reset to 0 */ hhcd->hc[ch_num].toggle_out = 0; hhcd->hc[ch_num].toggle_in = 0; @@ -346,6 +348,7 @@ HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, uint16_t length, uint8_t do_ping) { + // Added for MBED PR #3432 if ((hhcd->hc[ch_num].ep_is_in != direction)) { if ((hhcd->hc[ch_num].ep_type == EP_TYPE_CTRL)){ /* reconfigure the endpoint !!! from tx -> rx, and rx ->tx */ @@ -401,6 +404,7 @@ HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, hhcd->hc[ch_num].do_ping = do_ping; } } + // Added for MBED PR #3432 else if ((token == 1) && (direction == 1)) { if( hhcd->hc[ch_num].toggle_in == 0) @@ -910,6 +914,7 @@ static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum) } else if ((USBx_HC(chnum)->HCINT) & USB_OTG_HCINT_CHH) { + // Added for MBED PR #3432 int reactivate = 0; __HAL_HCD_MASK_HALT_HC_INT(chnum); @@ -939,6 +944,7 @@ static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum) /* re-activate the channel */ tmpreg = USBx_HC(chnum)->HCCHAR; tmpreg &= ~USB_OTG_HCCHAR_CHDIS; + // Added for MBED PR #3432 #4231 if ( hhcd->hc[chnum].urb_state != URB_ERROR) { tmpreg |= USB_OTG_HCCHAR_CHENA; reactivate = 1; @@ -946,6 +952,7 @@ static void HCD_HC_IN_IRQHandler (HCD_HandleTypeDef *hhcd, uint8_t chnum) USBx_HC(chnum)->HCCHAR = tmpreg; } __HAL_HCD_CLEAR_HC_INT(chnum, USB_OTG_HCINT_CHH); + // Added for MBED PR #3432 #4231 if (hhcd->hc[chnum].state == 0) reactivate = 1; if (reactivate == 0) HAL_HCD_HC_NotifyURBChange_Callback(hhcd, chnum, hhcd->hc[chnum].urb_state); } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c index f46bff66fa..f926f76d79 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_i2c.c @@ -2592,6 +2592,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, /* Prepare transfer parameters */ hi2c->pBuffPtr = pData; hi2c->XferCount = Size; + // Added for MBED PR #3324 hi2c->XferOptions = (XferOptions & (~I2C_RELOAD_MODE)); hi2c->XferISR = I2C_Master_ISR_IT; @@ -2665,6 +2666,7 @@ HAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, /* Prepare transfer parameters */ hi2c->pBuffPtr = pData; hi2c->XferCount = Size; + // Added for MBED PR #3324 hi2c->XferOptions = (XferOptions & (~I2C_RELOAD_MODE)); hi2c->XferISR = I2C_Master_ISR_IT; diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c index 0d8687fa8e..453922e740 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.c @@ -162,8 +162,11 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd) { /* Allocate lock resource and initialize it */ hpcd->Lock = HAL_UNLOCKED; - for (index = 0; index < hpcd->Init.dev_endpoints ; index++) - hpcd->EPLock[index].Lock = HAL_UNLOCKED; + + // Added for MBED PR #3062 + for (index = 0; index < hpcd->Init.dev_endpoints ; index++) + hpcd->EPLock[index].Lock = HAL_UNLOCKED; + /* Init the low level hardware : GPIO, CLOCK, NVIC... */ HAL_PCD_MspInit(hpcd); } @@ -469,6 +472,8 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd) if(( epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC) { fifoemptymsk = 0x1 << epnum; + + // Added for MBED PR #3062 atomic_clr_u32(&USBx_DEVICE->DIEPEMPMSK, fifoemptymsk); CLEAR_IN_EP_INTR(epnum, USB_OTG_DIEPINT_XFRC); @@ -1188,6 +1193,7 @@ HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, u ep->is_in = 0; ep->num = ep_addr & 0x7F; + // Added for MBED PR #3062 __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]); if ((ep_addr & 0x7F) == 0 ) @@ -1198,6 +1204,8 @@ HAL_StatusTypeDef HAL_PCD_EP_Receive(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, u { USB_EPStartXfer(hpcd->Instance, ep, hpcd->Init.dma_enable); } + + // Added for MBED PR #3062 __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]); return HAL_OK; @@ -1233,7 +1241,8 @@ HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, ep->xfer_count = 0; ep->is_in = 1; ep->num = ep_addr & 0x7F; - + + // Added for MBED PR #3062 __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]); if ((ep_addr & 0x7F) == 0 ) @@ -1244,7 +1253,8 @@ HAL_StatusTypeDef HAL_PCD_EP_Transmit(PCD_HandleTypeDef *hpcd, uint8_t ep_addr, { USB_EPStartXfer(hpcd->Instance, ep, hpcd->Init.dma_enable); } - + + // Added for MBED PR #3062 __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]); return HAL_OK; @@ -1272,13 +1282,17 @@ HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) ep->is_stall = 1; ep->num = ep_addr & 0x7F; ep->is_in = ((ep_addr & 0x80) == 0x80); - + + // Added for MBED PR #3062 __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]); + USB_EPSetStall(hpcd->Instance , ep); if((ep_addr & 0x7F) == 0) { USB_EP0_OutStart(hpcd->Instance, hpcd->Init.dma_enable, (uint8_t *)hpcd->Setup); } + + // Added for MBED PR #3062 __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]); return HAL_OK; @@ -1306,9 +1320,13 @@ HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) ep->is_stall = 0; ep->num = ep_addr & 0x7F; ep->is_in = ((ep_addr & 0x80) == 0x80); - + + // Added for MBED PR #3062 __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]); + USB_EPClearStall(hpcd->Instance , ep); + + // Added for MBED PR #3062 __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]); return HAL_OK; @@ -1322,7 +1340,9 @@ HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) */ HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) { + // Added for MBED PR #3062 __HAL_LOCK(&hpcd->EPLock[ep_addr & 0x7F]); + if ((ep_addr & 0x80) == 0x80) { USB_FlushTxFifo(hpcd->Instance, ep_addr & 0x7F); @@ -1331,7 +1351,8 @@ HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr) { USB_FlushRxFifo(hpcd->Instance); } - + + // Added for MBED PR #3062 __HAL_UNLOCK(&hpcd->EPLock[ep_addr & 0x7F]); return HAL_OK; @@ -1444,6 +1465,7 @@ static HAL_StatusTypeDef PCD_WriteEmptyTxFifo(PCD_HandleTypeDef *hpcd, uint32_t if(len <= 0) { fifoemptymsk = 0x1 << epnum; + // Added for MBED PR #3062 atomic_clr_u32(&USBx_DEVICE->DIEPEMPMSK, fifoemptymsk); } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h index 6db33ba463..ff07fdfd25 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_pcd.h @@ -117,6 +117,8 @@ typedef USB_TypeDef PCD_TypeDef; typedef USB_CfgTypeDef PCD_InitTypeDef; typedef USB_EPTypeDef PCD_EPTypeDef; #endif /* USB */ + +// Added for MBED PR #3062 typedef struct { HAL_LockTypeDef Lock; @@ -133,6 +135,7 @@ typedef struct PCD_EPTypeDef IN_ep[15]; /*!< IN endpoint parameters */ PCD_EPTypeDef OUT_ep[15]; /*!< OUT endpoint parameters */ HAL_LockTypeDef Lock; /*!< PCD peripheral status */ +// Added for MBED PR #3062 PCD_EPLockDef EPLock[15]; __IO PCD_StateTypeDef State; /*!< PCD communication state */ uint32_t Setup[12]; /*!< Setup packet buffer */ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c index 46029adbbb..b69650029c 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_spi.c @@ -650,6 +650,7 @@ HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint hspi->ErrorCode = HAL_SPI_ERROR_FLAG; } + // Added for MBED PR #4975 if (hspi->Init.Direction == SPI_DIRECTION_1LINE) { __HAL_SPI_DISABLE(hspi); } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c index 544bc6e826..ce44b68be8 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_usb.c @@ -570,6 +570,7 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeDe /* Enable the Tx FIFO Empty Interrupt for this EP */ if (ep->xfer_len > 0) { + // Added for MBED PR #3062 atomic_set_u32(&USBx_DEVICE->DIEPEMPMSK, 1 << ep->num); } } @@ -680,6 +681,7 @@ HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx , USB_OTG_EPTypeD /* Enable the Tx FIFO Empty Interrupt for this EP */ if (ep->xfer_len > 0) { + // Added for MBED PR #3062 atomic_set_u32(&USBx_DEVICE->DIEPEMPMSK, 1 << (ep->num)); } @@ -1406,6 +1408,7 @@ HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDe /* Write packet into the Tx FIFO. */ USB_WritePacket(USBx, hc->xfer_buff, hc->ch_num, hc->xfer_len, 0); + // Added for MBED PR #3432 hc->xfer_count = hc->xfer_len; } diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c index ab554fc155..dff9d0b8ff 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_ll_utils.c @@ -38,6 +38,13 @@ #include "stm32l4xx_ll_system.h" #include "stm32l4xx_ll_pwr.h" +// Removed from MBED PR #3410 +//#ifdef USE_FULL_ASSERT +//#include "stm32_assert.h" +//#else +//#define assert_param(expr) ((void)0U) +//#endif /* USE_FULL_ASSERT */ + /** @addtogroup STM32L4xx_LL_Driver * @{ */ From fb71917adb8bcd8a26f044c0263383916e4f3132 Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 5 Jan 2018 22:04:49 +0100 Subject: [PATCH 117/133] Remove release notes file --- .../device/Release_Notes_stm32l4xx_hal.html | 1016 ----------------- 1 file changed, 1016 deletions(-) delete mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/Release_Notes_stm32l4xx_hal.html diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/Release_Notes_stm32l4xx_hal.html b/targets/TARGET_STM/TARGET_STM32L4/device/Release_Notes_stm32l4xx_hal.html deleted file mode 100644 index 12ece83fdd..0000000000 --- a/targets/TARGET_STM/TARGET_STM32L4/device/Release_Notes_stm32l4xx_hal.html +++ /dev/null @@ -1,1016 +0,0 @@ - -Release Notes for STM32L4xx HAL Drivers - -
-

 

-
- - - - - - -
- - - - - - - - - -
-

Back to Release page

-
-

Release -Notes for STM32L4xx HAL Drivers

-

Copyright -2017 STMicroelectronics

-

-
-

 

- - - - - - -
-

Update History

-

V1.8.2 -/ 22-December-2017

-

Main -Changes

-
  • Maintenance Release of HAL and Low Layer drivers
-

   

HAL Drivers changes

-
  • HAL CAN driver
    • Rework of HAL CAN driver (compatibility break) 
      • A -new HAL CAN driver has been redesigned with new APIs, to bypass -limitations on CAN Tx/Rx FIFO management present with previous HAL CAN -driver version.
      • The -new HAL CAN driver is the recommended version. It is located as usual -in Drivers/STM32L4xx_HAL_Driver/Src and -Drivers/STM32L4xx_HAL_Driver/Inc folders. It can be enabled through -switch HAL_CAN_MODULE_ENABLED in stm32l4xx_hal_conf.h
      • The -legacy HAL CAN -driver is also present in the release in -Drivers/STM32L4xx_HAL_Driver/Src/Legacy and -Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -folders for software compatibility reasons. Its usage is not -recommended as deprecated. It can however be enabled through -switch HAL_CAN_LEGACY_MODULE_ENABLED in -stm32l4xx_hal_conf.h
      • Short migration guide:
        • Fields of CAN_InitTypeDef structure are renamed : 
          • SJW -to SyncJumpWidth, BS1 to TimeSeg1, BS2 to TimeSeg2, TTCM to -TimeTriggeredMode, ABOM to AutoBusOff, AWUM to AutoWakeUp, NART to -AutoRetransmission (inversed), RFLM to ReceiveFifoLocked and TXFP to -TransmitFifoPriority
        • HAL_CAN_Init() is split into both HAL_CAN_Init() and HAL_CAN_Start()
        • HAL_CAN_Transmit() -is replaced by HAL_CAN_AddTxMessage() to place Tx request, then -HAL_CAN_GetTxMailboxesFreeLevel() for polling until completion
        • HAL_CAN_Transmit_IT() -is replaced by HAL_CAN_ActivateNotification() to enable transmission with interrupt mode, then HAL_CAN_AddTxMessage() to place Tx request
        • HAL_CAN_Receive() -is replaced by HAL_CAN_GetRxFifoFillLevel() for polling until reception, then HAL_CAN_GetRxMessage() to get Rx message
        • HAL_CAN_Receive_IT() -is replaced by HAL_CAN_ActivateNotification() to enable reception with interrupt mode, then HAL_CAN_GetRxMessage() in the receive callback to get Rx message
        • HAL_CAN_Sleep() is renamed to HAL_CAN_RequestSleep()
        • HAL_CAN_TxCpltCallback() is split into HAL_CAN_TxMailbox0CompleteCallback(), HAL_CAN_TxMailbox1CompleteCallback() and HAL_CAN_TxMailbox2CompleteCallback()
        • HAL_CAN_RxCpltCallback() is split into HAL_CAN_RxFifo0MsgPendingCallback() and HAL_CAN_RxFifo1MsgPendingCallback()
      • More complete "how to use the new driver" is detailed in the driver header section itself
  • HAL CORTEX driver
    • HAL_MPU_Enable() and HAL_MPU_Disable() functions moved to stm32l4xx_hal_cortex.c
  • HAL CRC driver
    • Fix GCC warning 
  • HAL FLASH driver
    • HAL_FLASH_Unlock() updated to not return HAL_ERROR if flash is already unlocked 
  • HAL OSPI driver
    • Cleanup IO Manager ports
  • HAL RCC driver
    • RCC_RTCCLKSOURCE_NO_CLK renamed to RCC_RTCCLKSOURCE_NONE
    • HAL_RCC_DeInit() updates
      • Clear of status flags
      • Wait for PLLs disable flags to clear PLLs configuration registers
    • Fix MISRA C-2004 rule 10.6 ('U' suffix)
  • HAL TIM driver
    • Fix MISRA C-2004 rule 10.6 ('U' suffix)

LL Drivers changes

-
  • LL CRC driver
    • Fix GCC warning
  • LL RCC driver
    • Add LL_RCC_PLL_SetMainSource() and LL_RCC_HSI_IsEnabledInStopMode() APIs
    • LL_RCC_DeInit() update
      • Clear of status flags
      • Wait for PLLs disable flags to clear PLLs configuration registers
    • Fix IS_LL_RCC_I2C_CLKSOURCE() assert macro

V1.8.1 -/ 13-October-2017

-

Main -Changes

-
  • Maintenance Release of HAL and Low Layer drivers
-

   

HAL Drivers changes

-
  • HAL generic driver
    • Fix compilation issue with ARMCC --gnu option on __packed declaration in stm32l4xx_hal_def.h
  • HAL ADC driver
    • Reuse LL ADC definitions
    • Fix MISRA C-2004 rule 19.10
  • HAL DSI driver
    • Fix -timing issue at highest optimization level on IAR on DSI Host, DSI -Wrapper, DSI PLL and DSI regulator enable/disable macros 
    • Add macro __HAL_DSI_RESET_HANDLE_STATE()
  • HAL FLASH driver
    • HAL_FLASH_Unlock() shall not return an error when Flash already unlocked
  • HAL I2C driver
    • Fix race condition in HAL_I2C_Master_Receive() and HAL_I2C_Slave_Receive()
    • Fix RD_WRN bit management in case of I2C_NO_STARTSTOP request
  • HAL OSPI driver
    • Add note on limitation of HAL_OSPI_AutoPolling() and HAL_OSPI_AutoPolling_IT() usage in octal mode (cf. Errata Sheet)
    • Fix compilation warning in C++
  • HAL QSPI driver
    • Fix MISRA C-2004 rules 10.3, 11.4 and 12.6
  • HAL RCC driver
    • Update -SDMMC1 clock source selection on STM32L4Rx/STM32L4Sx devices to -select PLL divider "P" output instead of internal multiplexor on -MSI, HSI48, PLLSAI1 or PLL "Q" outputs as SDMMC1 kernel clock source
    • Fix __HAL_RCC_GPIOB_IS_CLK_ENABLED() macro definition
  • HAL SDMMC driver
    • Fix management of peripheral flags depending on command or data transfers.
  • HAL SMBUS driver
    • Fix RD_WRN bit management in case of SMBUS_NO_STARTSTOP request

LL Drivers changes

-
  • LL DAC driver
    • Add missing definition for external triggers from TIM and LPTIM instances
  • LL DMA2D driver
    • Fix CodeSonar warning in LL_DMA2D_StructInit()
  • LL I2C driver
    • Fix RD_WRN bit management in case of LL_I2C_GENERATE_NOSTARTSTOP request in LL_I2C_HandleTransfer()
  • LL RCC driver
    • Update SDMMC1 clock -source selection on STM32L4Rx/STM32L4Sx devices to select PLL divider -"P" output instead of internal multiplexor on MSI, HSI48, PLLSAI1 or -PLL "Q" outputs as SDMMC1 kernel clock source
      • Add LL_RCC_SetSDMMCKernelClockSource(), LL_RCC_GetSDMMCKernelClockSource() and LL_RCC_GetSDMMCKernelClockFreq() APIs

V1.8.0 -/ 25-August-2017

-

Main -Changes

- -
  • Release of HAL and Low Layer drivers to add support of STM32L4R5xx/STM32L4R7xx/STM32L4R9xx/ STM32L4S5xx/STM32L4S7xx/STM32L4S9xx devices
-
  • New OctoSPI, DSI, LTDC, GFXMMU peripherals supported in new HAL OSPI, HAL DSI, HAL LTDC and HAL GFXMMU drivers
  • Superset features device STM32L4S9xx API User Manual available (STM32L4S9xx_User_Manual.chm)  
   

HAL Drivers changes

-
  • HAL DSI driver (NEW):stm32l4xx_hal_dsi.h/.c files
  • HAL GFXMMU driver (NEW):stm32l4xx_hal_gfxmmu.h/.c files
  • HAL LTDC driver (NEW):stm32l4xx_hal_ltdc.h/.c and extension stm32l4xx_hal_ltdc_ex.h/.c files
  • HAL OSPI driver (NEW):stm32l4xx_hal_ospi.h/.c files
-
  • HAL generic driver
    • Add HAL_GetUIDw0(), HAL_GetUIDw1() and HAL_GetUIDw2() APIs
    • Default HAL_Delay() implementation updated to insure minimum requested delay
    • Add -__HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE() and -__HAL_SYSCFG_SRAM2_WRP_32_63_ENABLE() macros to set respectively SRAM2 -page protection attribute for page 0 to 31 and page 32 to 63
  • HAL CAN driver
    • Add FIFOs overrun error management (new error codes HAL_CAN_ERROR_FOV0 and HAL_CAN_ERROR_FOV1)
  • HAL CRYP driver
    • Fix zero padding in case of Data type
    • Fix phase setting related to payload suspension
    • Fix to not be too restrictive on input parameters in HAL_CRYPEx_AES_Auth() and  HAL_CRYPEx_AES_Auth_DMA()
  • HAL DAC driver
    • Fix Sample & Hold configuration in case of multi-channel
    • Rename DAC_HIGH_FREQUENCY_INTERFACE_MODE_ENABLE to DAC_HIGH_FREQUENCY_INTERFACE_MODE_ABOVE_80MHZ
  • HAL DMA driver
    • Fix DMAMUX synchronization signal configuration in HAL_DMAEx_ConfigMuxSync()
    • Support of DMAMUX1 peripheral via new DMA Extension APIs
      • HAL_DMAEx_ConfigMuxRequestGenerator()
      • HAL_DMAEx_EnableMuxRequestGenerator(), HAL_DMAEx_DisableMuxRequestGenerator()
      • HAL_DMAEx_ConfigMuxSync()
      • HAL_DMAEx_MUX_IRQHandler()
  • HAL DFSDM driver extension (new stm32l4xx_hal_dfsdm_ex.h/.c)
    • New APIs HAL_DFSDMEx_ChannelSetPulsesSkipping() and HAL_DFSDMEx_ChannelGetPulsesSkipping()
  • HAL DFSDM driver
    • Fix -cast issue to return possible negative value in -HAL_DFSDM_FilterGetRegularValue(), HAL_DFSDM_FilterGetInjectedValue(), -HAL_DFSDM_FilterGetExdMaxValue() and HAL_DFSDM_FilterGetExdMinValue()
  • HAL FLASH driver
    • Add new LVE pin management in HAL_FLASHEx_ConfigLVEPin()
    • Fix timeout issue in private FLASH_WaitForLastOperation() API
    • Fix error status of HAL_FLASHEx_OBProgram(
  • FMC driver
    • New field NBLSetupTime added in FMC_NORSRAM_InitTypeDef structure
    • New field DataHoldTime added in FMC_NORSRAM_TimingTypeDef structure
  • HAL HASH driver
    • Update of context swap mechanism implemented in HAL_HASH_DMAFeed_ProcessSuspend() when input data are fed to the IP by DMA
  • HAL HCD/PCD driver
    • Add support of STM32L4R5xx/STM32L4R7xx/STM32L4R9xx/ STM32L4S5xx/STM32L4S7xx/STM32L4S9xx devices
  • HAL IRDA driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • IRDA_InitTypeDef structure update to add ClockPrescaler parameter
  • HAL PCD driver
    • Fix USB PCD lock/unlock and flush TX fifo during device reset
  • HAL PWR driver
    • Add PWR_REGULATOR_VOLTAGE_SCALE1_BOOST new parameter value for HAL_PWREx_ControlVoltageScaling() to use higher supply voltage (1.28V) with main regulator voltage in range 1 above 80Mhz (maximum frequency equals to 120Mhz) for STM32L4Rx/STM32L4Sx devices  
    • Add -SRAM3 retention management APIs: HAL_PWREx_EnableSRAM3ContentRetention() and HAL_PWREx_DisableSRAM3ContentRetention()
    • Add DSI pins pull-down management
      • new HAL_PWREx_EnableDSIPinsPDActivation() and HAL_PWREx_DisableDSIPinsPDActivation() APIs
  • HAL RCC driver
    • Add clock management of new peripherals: DSI, GFXMMU, LTDC, OSPI1, OSPI2, OSPIM
    • Add OctoSPI peripherals clock source frequency computation in HAL_RCCEx_GetPeriphCLKFreq()
    • Fix issue with main PLL divider M value to allow 1 to 16 value range on STM32L4Rx/STM32L4Sx devices
    • Fix SDMMC1 clock source selection possibilities in HAL_RCCEx_PeriphCLKConfig(), __HAL_RCC_SDMMC1_CONFIG() and __HAL_RCC_GET_SDMMC1_SOURCE()
    • Fix HAL_RCCEx_GetPeriphCLKFreq() to take into account PLLSAI1 and PLLSAI2 divider M values (1 to 16 range) on STM32L4Rx/STM32L4Sx devices
    • Add undershoot/overshoot management in HAL_RCC_ClockConfig() when switching to/from system clock from main PLL above 80Mhz
  • HAL RNG driver
    • Add support of Clock Error detection and Bypass mode management in new RNG_InitTypeDef and HAL_RNG_Init() API
      • parameters ClockErrorDetection and BypassMode added in new RNG_InitTypeDef
  • HAL RTC driver
    • Fix HAL_RTC_Init() to wait for synchronization and avoid RTC registers access timing issues
  • HAL SAI driver
    • Add FIFO flush in HAL_SAI_DMAStop()
    • Fix HAL_SAI_Transmit_DMA() to follow the slave TX mode sequence described in the Reference Manual
  • HAL SD driver
    • Major rework of HAL SD driver aligned with STM32F7 series
      • BlockSize parameter removed in Read&Write block APIs since 512 byte size is always read&write.
  • HAL SMARTCARD driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • SMARTCARD_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new -HAL_SMARTCARDEx_EnableFifoMode(), HAL_SMARTCARDEx_DisableFifoMode(), -HAL_SMARTCARDEx_SetTxFifoThreshold(), HAL_SMARTCARDEx_SetRxFifoThreshold(), -HAL_SMARTCARDEx_RxFifoFullCallback() and HAL_SMARTCARDEx_TxFifoEmptyCallback() -APIs
  • HAL SMBUS driver
    • Add Analog and digital filter configuration APIs: HAL_SMBUS_ConfigAnalogFilter() and HAL_SMBUS_ConfigDigitalFilter() 
    • Add error management if occuring during STOP process
  • HAL SPI driver
    • Add control of RXFIFO emty at end of transmissing in Master transmission 2 lines mode
  • HAL SWPMI driver
    • Fix missing clock initialization before register update in HAL_SWPMI_Init()
  • HAL TIM driver
    • Add TIM_TIM1_ETR_GPIO and TIM_TIM8_ETR_GPIO definitions
    • Add TIM_TIM16_TI1_MSI, TIM_TIM16_TI1_HSE_32 and TIM_TIM16_TI1_MCO definitions for STM32L4Rx/STM32L4Sx
    • Add new AutoReloadPreload parameter in TIM_Base_InitTypeDef (user code impacted)
    • Fix wrong MOE disable conditions with new macro __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY()
  • HAL UART driver
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • UART_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new -HAL_UARTEx_EnableFifoMode(), HAL_UARTEx_DisableFifoMode(), -HAL_UARTEx_SetTxFifoThreshold(), HAL_UARTEx_SetRxFifoThreshold(), -HAL_UARTEx_RxFifoFullCallback() and HAL_UARTEx_TxFifoEmptyCallback() -APIs
    • Add SPI Slave mode management for STM32L4Rx/STM32L4Sx devices only
      • new HAL_UARTEx_EnableSlaveMode(), HAL_UARTEx_DisableSlaveMode() and HAL_UARTEx_ConfigNSS()
  • HAL USART driver (new stm32l4xx_hal_usart_ex.c)
    • Add Clock Prescaler management for STM32L4Rx/STM32L4Sx devices only
      • USART_InitTypeDef structure update to add ClockPrescaler parameter
    • Add FIFO mode management for STM32L4Rx/STM32L4Sx devices only
      • new -HAL_USARTEx_EnableFifoMode(), HAL_USARTEx_DisableFifoMode(), -HAL_USARTEx_SetTxFifoThreshold(), HAL_USARTEx_SetRxFifoThreshold(), -HAL_USARTEx_RxFifoFullCallback() and HAL_USARTEx_TxFifoEmptyCallback() -APIs
    • Add SPI Slave mode management for STM32L4Rx/STM32L4Sx devices only
      • new HAL_USARTEx_EnableSlaveMode(), HAL_USARTEx_DisableSlaveMode() and HAL_USARTEx_ConfigNSS()

-

LL Drivers changes

  • LL DMAMUX driver (NEW):stm32l4xx_ll_dmamux.h
  • All LL drivers update to remove usage of CMSIS POSITION_VAL() macro and resort to xx_Pos position bit definition
  • LL ADC
    • Fix legacy APIs LL_ADC_REG_SetTrigSource() and LL_ADC_INJ_SetTrigSource()
  • LL BUS 
    • Add management of new peripherals: DSI, GFXMMU, LTDC, OSPI1, OSPI2, OSPIM
  • LL DMA
    • Fix simple write register access to clear DMA flags in LL_DMA_ClearFlag_XXX() APIs
  • LL DMA2D
    • Add management of output swapping mode (regular or bytes two by two) and line offset mode (pixel or byte)
  • LL EXTI 
    • Add management of EXTI line 40 (I2C4)
  • LL I2C
    • Fix LL_I2C_Init() to not set OAEN1 bit when Own Address 1 value is 0
  • LL LPUART / LL USART
    • Add management of Rx FIFO and Tx FIFO
  • LL PWR
    • Add -SRAM3 retention management APIs 
      • LL_PWR_EnableSRAM3Retention(), -LL_PWR_DisableSRAM3Retention() and LL_PWR_IsEnabledSRAM3Retention()
    • Add voltage range 1 boost mode APIs
      • LL_PWR_EnableRange1BoostMode(), LL_PWR_DisableRange1BoostMode() and LL_PWR_IsEnabledRange1BoostMode()
    • For compatibility purpose accross STM32 series, rename LL_PWR_IsActiveFlag_VOSF() to LL_PWR_IsActiveFlag_VOS()
    • Add DSI pins pull-down management
      • new LL_PWR_EnableDSIPinsPDActivation(), LL_PWR_DisableDSIPinsPDActivation() and LL_PWR_IsEnabledDSIPinsPDActivation() APIs
  • LL RCC
    • Add management of new peripheral clock sources for DSI, LTDC, OSPI1, OSPI2 and SDMMC
    • Add -new definitions for main PLL divider M values above LL_RCC_PLLM_DIV_8 -and up to LL_RCC_PLLM_DIV_16 for STM32L4Rx/STM32L4Sx devices
    • Fix -in __LL_RCC_CALC_PLLCLK_SAI_FREQ(), __LL_RCC_CALC_PLLSAI1_SAI_FREQ(), -__LL_RCC_CALC_PLLSAI1_48M_FREQ(), __LL_RCC_CALC_PLLSAI1_ADC_FREQ(), -__LL_RCC_CALC_PLLSAI2_SAI_FREQ()
    • Fix -in LL_RCC_PLLSAI1_ConfigDomain_48M(), -LL_RCC_PLLSAI1_ConfigDomain_SAI(), LL_RCC_PLLSAI1_ConfigDomain_ADC(), -LL_RCC_PLLSAI1_GetP(), LL_RCC_PLLSAI2_ConfigDomain_SAI() and -LL_RCC_PLLSAI2_GetP()
    • Fix LL_RCC_GetSDMMCClockFreq() to take into account all SDMMC1 possible clock sources
    • Add HSI48 oscillator clock source value for RNG and USB: 
      • LL_RCC_RNG_CLKSOURCE_HSI48 and update LL_RCC_GetRNGClockFreq()
      • LL_RCC_USB_CLKSOURCE_HSI48 and update LL_RCC_GetUSBClockFreq()
    • General fixes
      • Renaming of RCC_DFSDM1CLKSOURCE_PCLK to RCC_DFSDM1CLKSOURCE_PCLK2
      • Renaming of RCC_SWPMI1CLKSOURCE_PCLK to RCC_SWPMI1CLKSOURCE_PCLK1
      • Renaming of RCC_LPTIMxCLKSOURCE_PCLK to RCC_LPTIMxCLKSOURCE_PCLK1
  • LL RNG
    • Add Clock Error detection and Bypass mode management in new LL_RNG_InitTypeDef and new LL_RNG_Init() API
      • new LL_RNG_EnableClkErrorDetect(), LL_RNG_DisableClkErrorDetect() and LL_RNG_IsEnableClkErrorDetect()
      • new LL_RNG_EnableBypassMode(), LL_RNG_DisableBypassMode() and LL_RNG_IsEnabledBypassMode
  • LL RTC
    • LL_RTC_TIME_Get() and LL_RTC_DATE_Get() implementations optimization (single register read access)
  • LL SYSTEM
    • Add SRAM2 page write protection APIs: LL_SYSCFG_EnableSRAM2PageWRP_0_31() and LL_SYSCFG_EnableSRAM2PageWRP_32_63()
  • LL TIM
    • Fix definition of TIM break input polarity (inverse values LL_TIM_BKIN_POLARITY_LOW / LL_TIM_BKIN_POLARITY_HIGH)
    • Fix LL_TIM_EnableUpdateEvent(), LL_TIM_DisableUpdateEvent() and LL_TIM_IsEnabledUpdateEvent()
  • LL UTILS
    • Add management of new flash latency ranges in UTILS_SetFlashLatency()
    • Add undershoot management when switching to system clock from main PLL above 80Mhz in LL_PLL_ConfigSystemClock_MSI(), LL_PLL_ConfigSystemClock_HSI() and LL_PLL_ConfigSystemClock_HSE()

V1.7.2 -/ 16-June-2017

-

Main -Changes

-
  • Maintenance Release of HAL and Low Layer drivers

-

HAL Drivers changes

-
  • HAL CAN driver
    • Add overrun error management by the error callback
  • HAL CRC driver
    • Update of HAL_CRCEx_Polynomial_Set() to return an error when a non-supported polynomial length is passed as parameter
  • HAL CRYP driver
    • Update zero padding management with respect to data type
    • Phase setting and comments correction in case of payload phase suspension
    • Correct input parameters tests in HAL_CRYPEx_AES_Auth() and HAL_CRYPEx_AES_Auth_DMA() APIs
    • Correct interruptions and IP enabling flags setting for key derivation in IT mode
  • HAL DCMI driver
    • Comments correction to describe image size management when larger than maximum authorized DMA transfer size
  • HAL FLASH driver
    • Add software work-around in HAL_FLASH_Unlock() to clear OPTVERR flag on STM32L45x/L46x parts when initially improperly raised
    • Correct timeout issue in FLASH_WaitForLastOperation()
  • HAL HASH driver
    • Update of context swap mechanism implemented in HAL_HASH_DMAFeed_ProcessSuspend() when input data are fed to the IP by DMA

LL Drivers changes

-
  • LL RCC
    • Correct duplication of aRCC_APBAHBPrescTable
  • LL RTC
    • Simplication of implementation of function LL_RTC_DATE_Get()
  • LL TIM
    • Fix LL_TIM_EnableUpdateEvent(), LL_TIM_DisableUpdateEvent() and LL_TIM_IsEnabledUpdateEvent()

V1.7.1 -/ 21-April-2017

-

Main -Changes

-
  • Maintenance Release of HAL and Low Layer drivers
-

   

HAL Drivers changes

-
  • HAL generic driver
    • Add HAL_GetUIDw0(), HAL_GetUIDw1() and HAL_GetUIDw2() APIs
  • HAL DAC driver
    • Fix Sample & Hold configuration in case of multi-channel
  • HAL HASH driver
    • Fix to ensure proper DMA-based HASH processing suspension/resumption
  • HAL PCD driver
    • Fix USB PCD lock/unlock and flush TX fifo during device reset
  • HAL RTC driver
    • Add wait for synchronization in HAL_RTC_Init() to insure RTC time initialization 

LL Drivers changes

-
  • LL ADC
    • Fix legacy APIs LL_ADC_REG_SetTrigSource() and LL_ADC_INJ_SetTrigSource()
  • LL DMA 
    • Write only operation on IFCR register

V1.7.0 -/ 17-February-2017

-

Main -Changes

-
  • Release of HAL and Low Layer drivers to add support of STM32L496xx/STM32L4A6xx devices
-
  • New DCMI, DMA2D, HASH peripherals supported in new HAL DCMI, HAL & LL DMA2D and HAL HASH drivers
  • New CAN2 instance supported in HAL CAN
  • Superset features device STM32L4A6xx API User Manual available (STM32L4A6xx_User_Manual.chm) 

   

HAL Drivers changes

-
  • HAL DCMI driver (NEW): stm32l4xx_hal_dcmi.h/.c files
  • HAL DMA2D driver (NEW): stm32l4xx_hal_dma2d.h/.c files
  • HAL HASH driver (NEW): stm32l4xx_hal_hash.h/.c and extension stm32l4xx_hal_hash_ex.h/.c files
  • The following changes done on the HAL drivers require an update on the application code based on older HAL versions
    • HAL SD update
      • Overall rework of the driver for a more efficient implementation
        • Modify initialization API and structures
        • Modify Read / Write sequences: separate transfer process and SD Cards state management 
        • Adding interrupt mode for Read / Write operations
        • Update the HAL_SD_IRQHandler function by optimizing the management of interrupt errors
      • Refer -to the following examples in STM32CubeL4 firmware package V1.7.0 to -identify the changes: BSP example and USB_Device/MSC_Standalone -application
  • HAL generic update
    • stm32l4xx_hal_conf_template.h updated for new HAL DCMI, HAL DMA2D and HAL HASH
      • #define HAL_DCMI_MODULE_ENABLED
      • #define HAL_DMA2D_MODULE_ENABLED
      • HAL_HASH_MODULE_ENABLED
    • HAL_Delay() updated to guarantee minimum delay
  • HAL CAN driver
    • Add support of CAN2 instance
  • HAL GPIO driver
    • Add support of GPIOI port and STM32L496xx/STM32L4A6xx alternate functions
  • HAL PWR driver
    • Add support of GPIOI port pull-up/pull-down state in Standby and Shutdown modes
  • HAL QSPI driver
    • Fix QSPI_HandleTypeDef structure to handle data size as uint32_t
  • HAL RCC driver
    • Add new macros for new peripherals clock and reset for CAN2, DCMI, DMA2D, GPIOI and HASH
    • Fix HAL_RCCEx_GetPeriphCLKFreq() to compute peripheral frequencies from MSI frequency
    • Fix HAL_RCCEx_GetPeriphCLKFreq() to compute DFSDM1 frequency from PCLK2 frequency
    • Rename some peripheral clock sources to specify the corresponding APB clock:
      • RCC_DFSDM1CLKSOURCE_PCLK to RCC_DFSDM1CLKSOURCE_PCLK2
      • RCC_SWPMI1CLKSOURCE_PCLK to RCC_SWPMI1CLKSOURCE_PCLK1
      • RCC_LPTIMxCLKSOURCE_PCLK to RCC_LPTIMxCLKSOURCE_PCLK1
  • HAL RTC driver
    • Fix wrong clear of time and date registers in HAL_RTCEx_TamperTimeStampIRQHandler()
  • HAL SPI driver
    • Add internal timeout to exit HAL_SPI_Abort() and HAL_SPI_Abort_IT() 
  • HAL TIM driver
    • Fix wrong MOE disable conditions with new macro __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY()
  • HAL SWPMI driver
    • Fix peripheral clock management sequence in HAL_SWPMI_Init()

LL Drivers changes

-
  • LL DMA2D driver (NEW)
  • LL BUS 
    • Add management of new peripherals: CAN2, DCMI, DMA2D, GPIOI and HASH
  • LL PWR
    • For compatibility purpose accross STM32 series, rename LL_PWR_IsActiveFlag_VOSF() to LL_PWR_IsActiveFlag_VOS()
  • LL RCC
    • Fix LL_RCC_GetDFSDMClockFreq() to compute frequency from PCLK2 frequency
  • LL SDMMC
    • Add new internal functions after HAL SD rework
  • LL TIM
    • Fix definition of TIM break input polarity (fix values LL_TIM_BKIN_POLARITY_LOW / LL_TIM_BKIN_POLARITY_HIGH)

V1.6.0 -/ 28-October-2016

-

Main -Changes

-
  • Release of HAL and Low Layer drivers to add support of STM32L451xx/STM32L452xx/STM32L462xx devices
-
  • Superset features device STM32L462xx API User Manual available (STM32L462xx_User_Manual.chm) 

   

HAL Drivers changes

-
  • HAL CRYP driver
    • HAL CRYP exported macros alignment with other STM32 series to use CRYP handle address as parameter in:
      • __HAL_CRYP_ENABLE(), __HAL_CRYP_DISABLE(), __HAL_CRYP_SET_OPERATINGMODE(), -__HAL_CRYP_SET_CHAININGMODE(), __HAL_CRYP_GET_FLAG(), __HAL_CRYP_CLEAR_FLAG(), -__HAL_CRYP_GET_IT_SOURCE(), __HAL_CRYP_GET_IT(), __HAL_CRYP_CLEAR_IT(), -__HAL_CRYP_ENABLE_IT() and __HAL_CRYP_DISABLE_IT()
  • HAL FLASH driver
    • Temporary data cache deactivation on 
      • Flash programming in HAL_FLASH_Program() and HAL_FLASH_Program_IT()
      • Flash erase in HAL_FLASHEx_Erase() and HAL_FLASHEx_Erase_IT()
    • To insure LSB/MSB address order in C compiler assembly output, split 64-bit programming in 2 double-word write operations
  • HAL I2C driver
    • Fix -to reset HAL I2C handle LISTEN state option in transfer direction -change with HAL_I2C_Slave_Sequential_Transmit_IT() and -HAL_I2C_Slave_Sequential_Receive_IT() 
  • HAL SMBUS driver
    • Add -support of Zone read/write feature thanks to new XferOptions parameter -values SMBUS_OTHER_FRAME_NO_PEC, SMBUS_OTHER_FRAME_WITH_PEC, -SMBUS_OTHER_AND_LAST_FRAME_NO_PEC and -SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC that may be used in -HAL_SMBUS_Master_Transmit_IT(), HAL_SMBUS_Master_Receive_IT(), -HAL_SMBUS_Slave_Transmit_IT() and HAL_SMBUS_Slave_Receive_IT()
  • HAL RTC driver
    • Fix -race conditions on EXTI flags clearing in HAL_RTC_AlarmIRQHandler(), -HAL_RTCEx_TamperTimeStampIRQHandler() and -HAL_RTCEx_WakeUpTimerIRQHandler()
  • Fix CodeSonar warnings in 
    • HAL ADC, HAL CRC, HAL CRYP, HAL I2C, HAL IRDA, HAL SMARTCARD, HAL SMBUS, HAL OPAMP, HAL RTC, HAL UART, HAL USART

   

-

LL Drivers changes

  • LL I2C driver
    • Add I2C4 management in LL_I2C_DeInit()
  • LL SYSTEM driver
    • Application -shall be responsible to write the correct key sequence in SYSCFG_SKR -register prior to call LL_SYSCFG_EnableSRAM2Erase()
  • LL TIM driver
    • New APIs to insure BDTR register initialization in a single write operation 
      • LL_TIM_BDTR_StructInit()
      • LL_TIM_BDTR_Init()
  • LL UTILS driver
    • Fix LL_RCC_PLLSOURCE_HSE in LL_PLL_ConfigSystemClock_HSE()  

V1.5.2 -/ 12-September-2016

-

HAL Drivers changes

-
  • HAL ADC driver
    • No need to configure number of discontinuous conversions if discontinuous mode is not enabled
    • HAL_ADCEx_MultiModeConfigChannel() returns HAL_ERROR if no Slave instance defined
  • HAL DAC driver
    • Fix calibration with correct handling of DAC_SR_CAL_FLAGx bits in HAL_DACEx_SelfCalibrate()
  • HAL FLASH driver
    • Change in HAL_FLASHEx_OBGetConfig() to not return PCROP and/or WRP data if their respective areas are not defined
    • Fix -error management in HAL_FLASH_IRQHandler() to simply call -HAL_FLASH_OperationErrorCallback() instead of calling both -HAL_FLASH_EndOfOperationCallback() and HAL_FLASH_OperationErrorCallback()
  • HAL I2C driver
    • Fix wrong state check in HAL_I2C_Master_Sequential_Transmit_IT()
    • Add -new option I2C_FIRST_AND_NEXT_FRAME to manage a sequencewith start -condition, address and data to transfer without a final stop condition -allowing successive calls to HAL_I2C_Master_Sequential_Transmit_IT()
  • HAL IRDA driver
    • Add transfer abort functions and associated callbacks in interrupt mode
      • HAL_IRDA_Abort(), HAL_IRDA_AbortTransmit(), HAL_IRDA_AbortReceive()
      • HAL_IRDA_Abort_IT(), HAL_IRDA_AbortTransmit_IT(), HAL_IRDA_AbortReceive_IT()
      • HAL_IRDA_AbortCpltCallback(), HAL_IRDA_AbortTransmitCpltCallback()HAL_IRDA_AbortReceiveCpltCallback()
    • IRQ Handler + DMA model optimizations
  • HAL RTC driver
    • Fix missing wakeup flag clear in HAL_RTCEx_SetWakeUpTimer_IT()  
  • HAL SMARTCARD driver
    • Add transfer abort functions and associated callbacks in interrupt mode
      • HAL_SMARTCARD_Abort(), HAL_SMARTCARD_AbortTransmit(), HAL_SMARTCARD_AbortReceive()
      • HAL_SMARTCARD_Abort_IT(), HAL_SMARTCARD_AbortTransmit_IT(), HAL_SMARTCARD_AbortReceive_IT()
      • HAL_SMARTCARD_AbortCpltCallback(), HAL_SMARTCARD_AbortTransmitCpltCallback(), HAL_SMARTCARD_AbortReceiveCpltCallback()
    • IRQ Handler + DMA model optimizations
  • HAL SMBUS driver
    • Fix issue on last data reception in host or device modes
  • HAL SPI driver
    • USE_SPI_CRC -compilation define added to provide the mean to optimize the HAL SPI -driver when CRC feature is not used (when CRC is used, application must be changed to set USE_SPI_CRC in stm32l4xx_hal_conf.h (see Inc\stm32l4xx_hal_conf_template.h))
    • Add transfer abort functions and associated callbacks in interrupt mode
      • HAL_SPI_Abort()
      • HAL_SPI_Abort_IT()
      • HAL_SPI_AbortCpltCallback()
  • HAL SWPMI driver
    • Fix SWPMI peripheral errors management in DMA (resort to HAL_DMA_Abort_IT() and DMA XferAbortCallback in HAL_SWPMI_IRQHandler())
  • HAL UART driver
    • New APIs to abort UART tranfer with associated callbacks added 
      • HAL_UART_Abort(), -HAL_UART_AbortTransmit(), HAL_UART_AbortReceive(), HAL_UART_Abort_IT(), -HAL_UART_AbortTransmit_IT(), HAL_UART_AbortReceive_IT(), -HAL_UART_AbortCpltCallback(), HAL_UART_AbortTransmitCpltCallback() and -HAL_UART_AbortReceiveCpltCallback()
  • HAL USART driver
    • New APIs to abort USART tranfer with associated callbacks added
      • HAL_USART_Abort(), HAL_USART_Abort_IT() and HAL_USART_AbortCpltCallback()

LL Drivers -changes

-
  • LL COMP driver
    • Fix LL_COMP_INPUT_PLUS_IO3 definition

V1.5.1 -/ 31-May-2016

-

HAL Drivers changes

-
  • HAL ADC driver
    • Bypass multimode assert_param macro calls depending on configuration
  • HAL CRC driver -
    • HAL_CRC_DeInit() resets CRC_IDR -register to reset value

LL Drivers -changes

-
  • LL BUS driver -
    • LL_APB1_GRP1_PERIPH_USBFS -renamed to LL_APB1_GRP1_PERIPH_USB
    -
  • LL SYSTEM driver -
    • Fix typo on -LL_DBGMCU_APB1_xxx and LL_DBGMCU_APB2_xxx
-

V1.5.0 -/ 29-April-2016

-

Main -Changes

-
  • Maintenance Release of HAL and Low Layer drivers
-

   

HAL Drivers changes

- - -
  • Enhance HAL delay and timebase implementation
    • Add -new driver -stm32l4xx_hal_timebase_tim_template.c which overrides the native HAL -time base functions (defined as weak) to use the TIM peripheral as time -base tick source. For more details about the usage of this driver, please refer to -HAL\HAL_TimeBase example and FreeRTOS-based applications
  • The following changes done on the HAL drivers require an update on the application code based on HAL V1.4.0
    • HAL RCC driver
      • To -use PLLSAI1 and PLLSAI2 indidependently from main system PLL, PLLSAI1 -& PLLSAI2 initialization enriched to add PLL entry clock source and -divider M
        • RCC_PLLSAI1InitTypeDef includes PLLSAI1Source and PLLSAI1M new fields
        • RCC_PLLSAI2InitTypeDef includes PLLSAI2Source and PLLSAI2M new fields
      • Add missing RTC clock source definition RCC_RTCCLKSOURCE_NO_CLK
      • DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
        • All macros __HAL_RCC_DFSDM_xxx() renamed to __HAL_RCC_DFSDM1_xxx()
        • DfsdmClockSelection field of RCC_PeriphCLKInitTypeDef renamed to Dfsdm1ClockSelection
        • RCC_PERIPHCLK_DFSDM renamed to RCC_PERIPHCLK_DFSDM1
        • RCC_DFSDMCLKSOURCE_PCLK renamed to RCC_DFSDM1CLKSOURCE_PCLK
        • RCC_DFSDMCLKSOURCE_SYSCLK renamed to RCC_DFSDM1CLKSOURCE_SYSCLK
        • __HAL_RCC_DFSDM_CONFIG() renamed to __HAL_RCC_DFSDM1_CONFIG()
        • __HAL_RCC_GET_DFSDM_SOURCE() renamed to __HAL_RCC_GET_DFSDM1_SOURCE()
      • Add missing RTC clock source definition RCC_RTCCLKSOURCE_NO_CLK
    • HAL I2C driver
      • Update to avoid waiting on STOPF/BTF/AF flag under DMA ISR by using -the PPP end of transfer interrupt in the DMA transfer process. This requires the following -updates on user application:
        • Configure and enable the I2Cx IRQ in HAL_I2C_MspInit() function
        • In stm32l4xx_it.c file, I2Cx_IRQHandler() function: add a -call to HAL_I2C_IRQHandler() function
    • HAL UART/USART drivers
      • IRQ Handler global optimization 
      • Add error management in case of DMA transfer through - HAL_DMA_Abort_IT() and DMA XferAbortCallback()
      • Polling management update:
        • The user Timeout value must be estimated for the overall process -duration
    • HAL IRDA/SMARTCARD drivers
      • Polling management update:
        • The user Timeout value must be estimated for the overall process -duration
    • HAL SPI driver
      • Add SPI error management during DMA process: this requires the following updates in the user - application:
        • Configure and enable the SPIx IRQ in - HAL_SPI_MspInit() function
        • In stm32l4xx_it.c file, SPIx_IRQHandler() - function: add a call to HAL_SPI_IRQHandler() function
        • - -Add and customize the -Error Callback API: HAL_SPI_ErrorCallback()
    • HAL QSPI driver
      • Add QSPI error management during DMA process
      • Improve the DMA transmit process by using QSPI TC interrupt instead of -waiting on TC flag under DMA ISR. 
      • These two improvements require the following updates on user -application:
        • Configure and enable the QSPI IRQ in HAL_QSPI_MspInit() function
        • In stm32l4xx_it.c file, QSPI_IRQHandler() function: add a -call to HAL_QSPI_IRQHandler() function
        • Add and customize the Error Callback API: HAL_QSPI_ErrorCallback()
      • Add the management of non-blocking transfer abort -service: HAL_QSPI_Abort_IT(). In this case the user must:
        • Add new callback HAL_QSPI_AbortCpltCallback() - to inform user at the end of abort process
        • A new value of State in -the HAL_QSPI_StateTypeDef provides the current state during the abort phase
- -
      • Polling management update:
        • The user Timeout value must be estimated for the overall process -duration
      • Fix wrong data size management in HAL_QSPI_Receive_DMA()
        • New API HAL_QSPI_SetFifoThreshold() and HAL_QSPI_GetFifoThreshold()
    • HAL IWDG driver
      • New simplified HAL IWDG driver: remove HAL_IWDG_Start(), HAL_IWDG_MspInit() -and HAL_IWDG_GetState() APIs
        • API functions are: 
          • HAL_IWDG_Init(): this function insures the configuration and the start of the IWDG -counter
          • HAL_IWDG_Refresh(): this function insures the reload of the IWDG counter
        • Refer to the following example to identify the changes: IWDG_Example
    • HAL WWDG driver
      • New simplified HAL WWDG driver: remove HAL_WWDG_Start(), HAL_WWDG_Start_IT(), HAL_WWDG_MspDeInit() -and HAL_WWDG_GetState() APIs
        • Update HAL_WWDG_Refresh() API to remove counter parameter
        • New field EWIMode in WWDG_InitTypeDef to specify need for Early Wakeup Interrupt
        • API -functions are: HAL_WWDG_Init(), HAL_WWDG_MspInit(), HAL_WWDG_Refresh(), -HAL_WWDG_IRQHandler() and HAL_WWDG_EarlyWakeupCallback()
  • HAL DMA driver
    • Global driver code optimization to reduce memory footprint 
    • New APIs HAL_DMA_RegisterCallback() and HAL_DMA_UnRegisterCallback() to register/unregister the different possible callbacks identified by enum typedef HAL_DMA_CallbackIDTypeDef
    • New API HAL_DMA_Abort_IT() to abort DMA transfer in non-blocking mode for interrupt context
      • The new registered Abort callback is called when DMA transfer abortion is completed
    • Add new Error Codes: HAL_DMA_ERROR_NO_XFER and -HAL_DMA_ERROR_NOT_SUPPORTED
    • Add __HAL_DMA_GET_COUNTER() macro
  • HAL COMP driver
    • EXTI -configuration done in HAL_COMP_Init() based on TriggerMode field of -COMP_InitTypeDef structure; HAL_COMP_Start()/HAL_COMP_Stop() APIs are sufficient to start and stop comparators (HAL_COMP_Start_IT() and HAL_COMP_Stop_IT() are preserved for -legacy compatibility)
    • Add comparator startup time and scaler bridge stabilization time in HAL_COMP_Init()
    • Fix to call HAL_COMP_TriggerCallback() only once when the 2 comparators are configured in window mode
    • Inverting & Non-inverting inputs renaming (previous definitions preserved for legacy compatibility)
      • COMP_INVERTING_xxx definitions renamed to COMP_INPUT_MINUS_xxx
      • COMP_NONINVERTING_xxx definitions renamed to COMP_INPUT_PLUS_xxx
    • Blanking sources renaming to highlight Comparator & Timer instances connections (previous definitions preserved for legacy compatibility)
      • COMP_BLANKINGSRCE_TIM1OC5 renamed to COMP_BLANKINGSRC_TIM1_OC5_COMP1
      • COMP_BLANKINGSRCE_TIM2OC3 renamed to COMP_BLANKINGSRC_TIM2_OC3_COMP1
      • COMP_BLANKINGSRCE_TIM3OC3 renamed to COMP_BLANKINGSRC_TIM3_OC3_COMP1
      • COMP_BLANKINGSRCE_TIM3OC4 renamed to COMP_BLANKINGSRC_TIM3_OC4_COMP2
      • COMP_BLANKINGSRCE_TIM8OC5 renamed to COMP_BLANKINGSRC_TIM8_OC5_COMP2
      • COMP_BLANKINGSRCE_TIM15OC1 renamed to COMP_BLANKINGSRC_TIM15_OC1_COMP2
      • COMP_BLANKINGSRCE_NONE renamed to COMP_BLANKINGSRC_NONE
  • HAL CRYP driver
    • Software workaround for AES issue on GCM encryption with payload length not a multiple of 128 bits
    • Add support of payload length not multiple of 32 bits
  • HAL GPIO driver
    • Add missing GPIO_AF6_COMP1 for STM32L431xx/STM32L432xx/STM32L433xx/STM32L442xx/STM32L443xx
    • DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
      • GPIO_AF6_DFSDM renamed to GPIO_AF6_DFSDM1
  • HAL HCD driver
    • Clear NACK flag before re-enabling the channel for new IN request
  • HAL PCD driver
    • Host mode
      • Use HCLK frequency to set TRDT value
    • Device mode
      • Force suspend and low-power mode before going to L1 state
      • Unmask Start Of Frame interrupt
  • HAL TIM driver
    • DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
      • TIM_BREAKINPUTSOURCE_DFSDM renamed to TIM_BREAKINPUTSOURCE_DFSDM1
  • HAL SAI driver
    • Update - HAL_SAI_IRQHandler:
      • Add error management in case of DMA transfer through - HAL_DMA_Abort_IT() and DMA XferAbortCallback()
  • HAL SWPMI driver
    • Update initialization sequence in voltage class B

   

-

LL Drivers changes

  • LL ADC driver
    • Fix injected conversion configuration with SW start in LL_ADC_INJ_ConfigQueueContext()
  • LL BUS driver
    • DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
      • LL_APB2_GRP1_PERIPH_DFSDM renamed to LL_APB2_GRP1_PERIPH_DFSDM1
  • LL COMP driver
    • Window mode renaming to highlight Comparator instances connection (previous definitions preserved for legacy compatibility)
      • LL_COMP_WINDOWMODE_ENABLE renamed to LL_COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON
    • Blanking sources renaming to highlight Comparator & Timer instances connections (previous definitions preserved for legacy compatibility)
      • LL_COMP_BLANKINGSRCE_TIM1OC5 renamed to LL_COMP_BLANKINGSRC_TIM1_OC5_COMP1
      • LL_COMP_BLANKINGSRCE_TIM2OC3 renamed to LL_COMP_BLANKINGSRC_TIM2_OC3_COMP1
      • LL_COMP_BLANKINGSRCE_TIM3OC3 renamed to LL_COMP_BLANKINGSRC_TIM3_OC3_COMP1
      • LL_COMP_BLANKINGSRCE_TIM3OC4 renamed to LL_COMP_BLANKINGSRC_TIM3_OC4_COMP2
      • LL_COMP_BLANKINGSRCE_TIM8OC5 renamed to LL_COMP_BLANKINGSRC_TIM8_OC5_COMP2
      • LL_COMP_BLANKINGSRCE_TIM15OC1 renamed to LL_COMP_BLANKINGSRC_TIM15_OC1_COMP2
  • LL I2C driver
    •  Add SMBus feature support
      •  LL_I2C_InitTypeDef structure enriched with new PeripheralMode field to indicate I2C or SMBus modes
      • New -APIs LL_I2C_EnableSMBusAlert(), LL_I2C_DisableSMBusAlert(), -LL_I2C_IsEnabledSMBusAlert(), LL_I2C_EnableSMBusPEC(), -LL_I2C_DisableSMBusPEC(), LL_I2C_IsEnabledSMBusPEC(), -LL_I2C_ConfigSMBusTimeout(), LL_I2C_EnableSMBusTimeout(), LL_I2C_DisableSMBusTimeout(), LL_I2C_IsEnabledSMBusTimeout(), LL_I2C_SetSMBusTimeoutA(), LL_I2C_GetSMBusTimeoutA(), LL_I2C_SetSMBusTimeoutAMode(), LL_I2C_GetSMBusTimeoutAMode(), LL_I2C_SetSMBusTimeoutB(), -LL_I2C_GetSMBusTimeoutB(), LL_I2C_SetSMBusTimeoutBMode(), -LL_I2C_GetSMBusTimeoutBMode(), LL_I2C_IsActiveSMBusFlag_PECERR(), LL_I2C_IsActiveSMBusFlag_TIMEOUT(), -LL_I2C_IsActiveSMBusFlag_ALERT(), LL_I2C_ClearSMBusFlag_PECERR(), -LL_I2C_ClearSMBusFlag_TIMEOUT(), LL_I2C_ClearSMBusFlag_ALERT(), -LL_I2C_EnableSMBusPECCompare(), LL_I2C_IsEnabledSMBusPECCompare() and -LL_I2C_GetSMBusPEC()
    • New APIs LL_I2C_SetMode() and LL_I2C_GetMode()
    • New APIs LL_I2C_EnableAutoEndMode(), LL_I2C_DisableAutoEndMode() and LL_I2C_IsEnabledAutoEndMode()
    • New APIs LL_I2C_EnableReloadMode(), LL_I2C_DisableReloadMode() and LL_I2C_IsEnabledReloadMode()
    • New APIs LL_I2C_EnableSlaveByteControl(), LL_I2C_DisableSlaveByteControl() and LL_I2C_IsEnabledSlaveByteControl()
    • New APIs LL_I2C_SetTransferRequest(), LL_I2C_GetTransferRequest(), LL_I2C_SetSlaveAddr() and LL_I2C_GetSlaveAdd()
    • New APIs LL_I2C_SetTransferSize() and LL_I2C_GetTransferSize()
    • New APIs LL_I2C_GenerateStopCondition(), LL_I2C_GenerateStartCondition()
    • New APIs LL_I2C_EnableAuto10BitRead(), LL_I2C_DisableAuto10BitRead() and LL_I2C_IsEnabledAuto10BitRead()
  • LL PWR driver
    •  New APIs LL_PWR_EnterLowPowerRunMode() and LL_PWR_ExitLowPowerRunMode()
  • LL RCC driver
    •  DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
      • LL_RCC_DFSDM_CLKSOURCE renamed to LL_RCC_DFSDM1_CLKSOURCE
      • LL_RCC_DFSDM_CLKSOURCE_PCLK renamed to LL_RCC_DFSDM1_CLKSOURCE_PCLK
      • LL_RCC_DFSDM_CLKSOURCE_SYSCLK renamed to LL_RCC_DFSDM1_CLKSOURCE_SYSCLK
  • LL SYSTEM driver
    •  New API LL_FLASH_IsPrefetchEnabled()
  • LL TIM driver
    •  DFSDM renaming to DFSDM1 (previous definitions preserved for legacy compatibility)
      • LL_TIM_BKIN_SOURCE_DFBK renamed to LL_TIM_BKIN_SOURCE_DF1BK
    • New OCRef clear input selection definitions LL_TIM_OCREF_CLR_INT_NC and LL_TIM_OCREF_CLR_INT_ETR
    • New OCRef clear API LL_TIM_SetOCRefClearInputSource()

V1.4.0 -/ 26-February-2016

-

Main -Changes

-
  • Release of HAL and Low Layer drivers to add support of STM32L431xx/STM32L432xx/STM32L433xx/STM32L442xx/ STM32L443xx devices
-
  • Low Layer driver initialization/de-initialization APIs applicable to all STM32L4xx devices
  • CRS peripheral implemented as an extension of HAL RCC (HAL_RCCEx_CRS_xxxx() APIs)
  • Superset features device STM32L443xx API User Manual available (STM32L443xx_User_Manual.chm) 

   

HAL Drivers changes

-
  • HAL generic update
    • Add default HSI48_VALUE in stm32l4xx_hal_conf_template
  • HAL CRYP update
    • New error code HAL_CRYP_BUSY_ERROR to reject new request while ongoing processing
  • HAL IRDA/SMARTCARD/UART/USART update
    • Improvement of baud rate computation at initialization

   

-

LL Drivers changes

  • New C files requiring to use USE_FULL_LL_DRIVER compilation switch in user project to benefit from new APIs
    • stm32l4xx_ll_crs.c
  • LL BUS update
    •  Add read-back register on clock enable functions to take into account any delay on bus
  • LL ADC update
    •  Trigger sources renaming:
      • LL_ADC_REG_TRIG_SW_START renamed to LL_ADC_REG_TRIG_SOFTWARE
      • LL_ADC_REG_TRIG_EXT_TIMx_CCy renamed to LL_ADC_REG_TRIG_EXT_TIMx_CHy
      • LL_ADC_INJ_TRIG_SW_START renamed to LL_ADC_INJ_TRIG_SOFTWARE
      • LL_ADC_INJ_TRIG_EXT_TIMx_CCy renamed to LL_ADC_INJ_TRIG_EXT_TIMx_CHy
    • Oversamping data shift renaming:
      • LL_ADC_OVS_DATA_SHIFT_NONE renamed to LL_ADC_OVS_SHIFT_NONE
      • LL_ADC_OVS_DATA_SHIFT_xxx renamed to LL_ADC_OVS_SHIFT_xxx
  • LL DAC update
    •  Trigger sources renaming:
      • LL_DAC_TRIGGER_SOFTWARE renamed to LL_DAC_TRIG_SOFTWARE
      • LL_DAC_TRIGGER_TIMx_TRGO renamed to LL_DAC_TRIG_EXT_TIMx_TRGO
      • LL_DAC_TRIGGER_EXT_IT9 renamed to LL_DAC_TRIG_EXT_EXTI_LINE9
  • LL LPUART update
    •  Improvement of LPUARTDIV value in baud rate computation in __LL_LPUART_DIV() macro
  • LL USART update
    •  Improvement of USARTDIV value in baud rate computation in __LL_USART_DIV_SAMPLING8() and __LL_USART_DIV_SAMPLING16() macros

V1.3.0 -/ 29-January-2016

-

Main -Changes

-
  • New Low Layer driver initialization/de-initialization APIs
    • Naming rule is LL_PPP_Init(), LL_PPP_StructInit(), LL_PPP_DeInit() -and more initialization APIs when applicable for peripheral PPP: -ADC, COMP, CRC, DAC, DMA, EXTI, GPIO, I2C, LPTIM, LPUART, OPAMP, PWR, -RCC, RNG, RTC, SPI, SWPMI, TIM and USART. 
    • New C files requiring to use USE_FULL_LL_DRIVER compilation switch in user project to benefit from new APIs
      • stm32l4xx_ll_adc.c, stm32l4xx_ll_comp.c, stm32l4xx_ll_crc.c, stm32l4xx_ll_dac.c, stm32l4xx_ll_dma.c, stm32l4xx_ll_exti.c, stm32l4xx_ll_gpio.c, stm32l4xx_ll_i2c.c, stm32l4xx_ll_lptim.c, stm32l4xx_ll_lpuart.c, stm32l4xx_ll_opamp.c, stm32l4xx_ll_pwr.c, stm32l4xx_ll_rcc.c, stm32l4xx_ll_rng.c, stm32l4xx_ll_rtc.c, stm32l4xx_ll_spi.c, stm32l4xx_ll_swpmi.c, stm32l4xx_ll_tim.c and stm32l4xx_ll_usart.c
      • stm32l4xx_ll_utils.c contains some Low Layer utilities for SysTick, Flash latency and clock configuration. 
  • Fix "parameter unused" GCC compilation warnings on __weak functions

HAL Drivers changes

-
  • HAL generic update
    • Declare uwTick as global variable to allow weak HAL_IncTick() API updates in user application 
    • Add new API HAL_SYSCFG_EnableIOAnalogSwitchBooster() and HAL_SYSCFG_DisableIOAnalogSwitchBooster()
  • HAL COMP update
    • Allow comparator lock from the reset state with HAL_COMP_Lock()
  • HAL CRYP update
    • Fix state issue to resume AES calculations
  • HAL DMA update
    • Fix state issue after DMA transfer error 
  • HAL FLASH update
    • Fix __HAL_FLASH_INSTRUCTION_CACHE_RESET() and __HAL_FLASH_DATA_CACHE_RESET() to allow multiple resets
  • HAL I2C update
    • Add support of repeated start feature with the following new APIs
      • HAL_I2C_Master_Sequential_Transmit_IT(), HAL_I2C_Master_Sequential_Receive_IT() and  HAL_I2C_Master_Abort_IT(), 
      • HAL_I2C_Slave_Sequential_Transmit_IT() and HAL_I2C_Slave_Sequential_Receive_IT()
      • HAL_I2C_EnableListen_IT() and HAL_I2C_DisableListen_IT()
      • New user callbacks HAL_I2C_ListenCpltCallback() and HAL_I2C_AddrCallback()
    • Fix acknowledge failure error management (STOP being automatically generated)
    • Review -state machine and provide new API  HAL_I2C_GetMode() to return -HAL_I2C_MODE_MASTER, HAL_I2C_MODE_SLAVE or HAL_I2C_MODE_NONE
  • HAL IRDA update
    • Add missing IRDA_CLEAR_IDLEF definition for IDLE flag clear with __HAL_IRDA_CLEAR_FLAG()
  • HAL SD update
    • Fix SD card capacity calculation for cards with capacity over 4GB in HAL_SD_Get_CardInfo()
  • HAL SMARTCARD update
    • Add missing SMARTCARD_STOPBITS_0_5 definition for frame with 0.5 stop bit
    • HAL SMARTCARD guardtime correction to not expect a minimum  of 12 etu
  • HAL UART update
    • Add missing UART_STOPBITS_0_5 definition for frame with 0.5 stop bit
    • RX Buffer flush request should not be called at each RXNE processing
    • Fix wrong macro used in assert_param in HAL_LIN_SendBreak()
  • HAL USART update
    • Add missing USART_STOPBITS_0_5 definition for frame with 0.5 stop bit

LL Drivers changes

-
  • LL UTILS update (user code impacted !)
    • Move the following functions declaration from stm32l4xx_ll_utils.h to stm32l4xx_ll_utils.c file
      • LL_mDelay(), LL_Init1msTick() and LL_SetSystemCoreClock()
  • LL ADC update
    •  FLAG & IT definition name change
  • LL COMP update
    •  Rename InputInverting and InputNonInverting APIs
      • LL_COMP_Set{/Get}InputNonInverting() renamed to LL_COMP_Set{/Get}InputMinus
      • LL_COMP_Set{/Get}InputInverting() renamed to LL_COMP_Set{/Get}InputPlus
    • Remove LL_COMP_SetWindowMode() and LL_COMP_GetWindowMode()
  • LL DMA update
    •  Add helper macro __LL_DMA_GET_CHANNEL_INSTANCE()
  • LL GPIO update
    • Fix definition LL_GPIO_OUTPUT_OPENDRAIN
    • Add -the explicit possible values in the API description of -LL_GPIO_GetPinMode(), LL_GPIO_GetPinOutputType(), -LL_GPIO_GetPinSpeed(), LL_GPIO_GetPinPull(), LL_GPIO_GetAFPin_0_7() and -LL_GPIO_GetAFPin_8_15()
    • Add -GPIO speed definitions LL_GPIO_SPEED_FREQ_LOW, -LL_GPIO_SPEED_FREQ_MEDIUM, LL_GPIO_SPEED_FREQ_HIGH and -LL_GPIO_SPEED_FREQ_VERY_HIGH to align with HAL GPIO
  • LL I2C update
    •  Add missing function LL_I2C_ConfigFilters() to configure noise filters
  • LL LPTIM update
    • Add missing functions
      • LL_LPTIM_IsEnabled()
      • LL_LPTIM_SetWaveform()
      • LL_LPTIM_SetPolarity()
  • LL OPAMP update
    • Rename power range APIs
      • LL_OPAMP_Get{/Set}PowerRange() renamed to LL_OPAMP_Get{/Set}CommonPowerRange()
  • LL SPI update
    • Fix LL_SPI_IsEnabled(), LL_SPI_IsEnabledCRC() and LL_SPI_IsEnabledNSSPulse()
    • Remove -LL_SPI_Set{/Get}HalfDuplexDirection() functions: this is managed with -TransferDirection parameter in LL_SPI_Set{/Get}TransferDirection()
  • LL SWPMI update
    • Add missing function LL_SWPMI_IsActivated()
  • LL TIM update
    • Add missing functions
      • LL_TIM_CC_IsEnabledChannel()
      • LL_TIM_OC_IsEnabledFast(), LL_TIM_OC_IsEnabledPreload() and LL_TIM_OC_IsEnabledClear()
      • LL_TIM_IsEnabledMasterSlaveMode()
      • LL_TIM_EnableExternalClock(), LL_TIM_DisableExternalClock() and LL_TIM_IsEnabledExternalClock()
  • LL USART update
    • Add LL_USART_STOPBITS_0_5 definition for usage in LL_USART_Set{/Get}StopBitsLength() and LL_USART_ConfigCharacter()

V1.2.0 -/ 25-November-2015

-

Main -Changes

-
  • HAL generic update
    • Reduce default HSE startup timeout value to 100ms in Inc\stm32l4xx_hal_conf_template.h file
  • HAL PWR update (User application code impacted)
    • Stop 1 with main regulator renamed into Stop 0, to be aligned with latest version of Reference Manual
    • Change HAL_PWREx_EnterSTOP1Mode(uint32_t Regulator, uint8_t STOPEntry) into HAL_PWREx_EnterSTOP1Mode(uint8_t STOPEntry)
      • Application code using HAL_PWREx_EnterSTOP1Mode(PWR_LOWPOWERREGULATOR_ON, STOPEntry) must be updated to use HAL_PWREx_EnterSTOP1Mode(STOPEntry)
    • Add new API HAL_PWREx_EnterSTOP0Mode(uint8_t STOPEntry)
      • Application code using HAL_PWREx_EnterSTOP1Mode(PWR_MAINREGULATOR_ON, STOPEntry) must be updated to use HAL_PWREx_EnterSTOP0Mode(STOPEntry)
      •  
  • HAL OPAMP update
    • Provide capability to run calibration despite PGA mode by switching temporary to standalone mode
  • HAL SAI update
    • Update SAI block synchronization selection (User application code impacted)
      • Replace uncomplete SAI_SYNCHRONOUS_EXT value for with SAI_SYNCHRONOUS_EXT_SAI1 and SAI_SYNCHRONOUS_EXT_SAI2
    • Update external synchronization input selection (User application code impacted)
      • Remove useless SAI_SYNCEXT_IN_ENABLE value for SynchroExt field in SAI_InitTypeDef structure
    • Add support of 24bits configuration in PCM protocol
    • Add codec not ready interrupt management
    • Fix computation of data size, frame length, active frame length, slot size and first bit offset in I2S protocol
    • Fix mute counter setting in HAL_SAI_EnableRxMuteMode()
    • Fix -ambiguous clock strobing values: fix HAL_SAI_Init() to set correct -CKSTR bits in SAI_xCR1 according to ClockStrobing and AudioMode -parameters
    • Fill in the Fifo before enable interrupt in HAL_SAI_Transmit_IT()
    • Fix assert on active slot selection in HAL_SAI_Init()
    • Fix companding mode management in HAL_SAI_Init()
  • HAL TSC update
    • Improve IODefault state management
  • HAL NOR/HAL SRAM/FMC update
    • WriteFifo field of FMC_NORSRAM_InitTypeDef structure is not applicable on STM32L47x/STM32L48x devices
  • LL PWR update (User application code impacted)
    • LL PWR API change to add new Stop 0 mode and update Stop 1 mode definition
    • Change LL_PWR_SetPowerMode(uint32_t LowPowerMode) possible LowPowerMode values update 
      • LL_PWR_MODE_STOP1_LP_REGU renamed into LL_PWR_MODE_STOP1
        • Application code using LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1_LP_REGU) must be updated to use LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1)
      • LL_PWR_MODE_STOP1_MAIN_REGU renamed into LL_PWR_MODE_STOP0
        • Application code using LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1_MAIN_REGU) must be updated to use LL_PWR_SetPowerMode(LL_PWR_MODE_STOP0)

V1.1.1 -/ 16-October-2015

-

Main -Changes

-
  • HAL generic update
    • Fine -tuning of Inc\stm32l4xx_hal_conf_template.h file to keep Flash prefetch -off as default system configuration (PREFETCH_ENABLE set to 0)
  • HAL TIM update
    • Removed -useless assert_param() macro check on input parameters in -HAL_TIM_OC_ConfigChannel(), HAL_TIM_PWM_ConfigChannel() and -HAL_TIM_ConfigClockSource(), 
  • LL ADC update
    • Fix LL_ADC_GetAnalogWDMonitChannels() for AWD2 and AWD3
  • LL RCC update
    • Add new API LL_RCC_LSE_DisableCSS()
  • LL UTILS update
    • Fix LL_GetPackageType()

V1.1.0 -/ 16-September-2015

-

Main -Changes

-
  • Add Low Layer drivers allowing performance and footprint optimization 
    • Low -Layer drivers APIs provide register level programming: they require -deep knowledge of peripherals described in STM32L4x6 Reference Manual
    • Low -Layer drivers are available for: ADC, COMP, Cortex, CRC, DAC, DMA, -EXTI, GPIO, I2C, IWDG, LPYIM, LPUART, OPAMP, PWR, RCC, RNG, RTC, SPI, -SWPMI, TIM, USART, WWDG peripherals and additionnal Low Level Bus, -System and Utilities APIs.
    • Low Layer drivers APIs are implemented as static inline function in new Inc/stm32l4xx_ll_ppp.h files for PPP peripherals, there is no configuration file and each stm32l4xx_ll_ppp.h file must be included in user code.
  • HAL ADC update
    • Channel 5 is not usable for ADC3
  • HAL CAN update
    • Update HAL_CAN_IRQHandler() to clear ERRI bit prior to call HAL_CAN_ErrorCallback()
  • HAL COMP update
    • Update HAL_COMP_Init() for low power optimization in case of COMP_INVERTINGINPUT_VREFINT
  • HAL CRC update
    • Add new API HAL_CRYPEx_ProcessSuspend()
  • HAL DMA update
    • Update HAL_DMA_IRQHandler() to set HAL_DMA_ERROR_TE error bit in handle ErrorCode field
  • HAL FLASH update
    • Add option byte OB_USER_nRST_SHDW to be used with HAL_FLASHEx_OBProgram()
  • HAL GPIO update
    • Rename -GPIO speed definitions to GPIO_SPEED_FREQ_LOW, -GPIO_SPEED_FREQ_MEDIUM, GPIO_SPEED_FREQ_HIGH and -GPIO_SPEED_FREQ_VERY_HIGH
    • Fix macro __HAL_GPIO_EXTI_GENERATE_SWIT()
  • HAL PWR update
    • Fix HAL_PWR_DisableWakeUpPin() to clear only appropriate bits in PWR CR3 register
    • Combination -of GPIO pins possible in HAL_PWREx_EnableGPIOPullUp(), -HAL_PWREx_DisableGPIOPullUp(), HAL_PWREx_EnableGPIOPullDown() and -HAL_PWREx_DisableGPIOPullDown()
  • HAL RCC update
    • Add -LSE Clock Security System (CSS) management with new APIs: -HAL_RCCEx_EnableLSECSS_IT(), HAL_RCCEx_LSECSS_IRQHandler() and -HAL_RCCEx_LSECSS_Callback()
    • Add RCC_MCO1SOURCE_NOCLOCK to provide capability to disable MCO output in HAL_RCC_MCOConfig()
    • Update -HAL_RCC_OscConfig() and HAL_RCCEx_PeriphCLKConfig() to keep backup -domain enabled when configuring respectively LSE and RTC clock -source
    • Update HAL_RCCEx_DisablePLLSAI1() and HAL_RCCEx_DisablePLLSAI2() to disable respectively PLLSAI1 and PLLSAI2 clock outputs
    • Update HAL_RCCEx_GetPeriphCLKFreq() to return the frequency in Hz applied to peripherals via HAL_RCCEx_PeriphCLKConfig()
    • Update HAL_RCC_DeInit() to set default MSI range
    • Remove old workaround on LSE drive medium configuration values
  • HAL SPI update
    • Fix issue to receive CRC in RX 2 lines mode 8-bit dataSize and even buffer size.
  • HAL TIM update
    • Fix macro __HAL_TIM_SET_COMPARE()
  • HAL UART update
    • Remove enable of Error interrupt in HAL_UART_Transmit_IT()

V1.0.0 -/ 26-June-2015

-

Main -Changes

-
  • First official release of STM32L4xx HAL Drivers for STM32L471xx/STM32L475xx/ STM32L476xx/ STM32L485xx and STM32L486xx devices.
-

License

-
-
Redistribution -and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met:
-
-
    -
  1. Redistributions -of source code must retain the above copyright notice, this list of -conditions and the following disclaimer.
  2. -
  3. Redistributions -in binary form must reproduce the above copyright notice, this list of -conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution.
  4. -
  5. Neither the -name of STMicroelectronics nor the names of its contributors may be -used to endorse or promote products derived
    -
  6. -
-       -from this software without specific prior written permission.
-
-THIS -SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE.
-
- -
-
-

For -complete documentation on STM32 Microcontrollers visit www.st.com/STM32

-
-

-
-
-

 

-
- \ No newline at end of file From 9971ad27ca9e12f2758260dde16a4e17b738e995 Mon Sep 17 00:00:00 2001 From: bcostm Date: Fri, 5 Jan 2018 22:05:57 +0100 Subject: [PATCH 118/133] Update system_stm32l4xx.c with latest version --- .../TARGET_STM32L4/device/system_stm32l4xx.c | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/system_stm32l4xx.c b/targets/TARGET_STM/TARGET_STM32L4/device/system_stm32l4xx.c index 4e9cc827c4..f8719f6b4d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/system_stm32l4xx.c +++ b/targets/TARGET_STM/TARGET_STM32L4/device/system_stm32l4xx.c @@ -2,8 +2,6 @@ ****************************************************************************** * @file system_stm32l4xx.c * @author MCD Application Team - * @version V1.3.1 - * @date 21-April-2017 * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File * * This file provides two functions and one global variable to be called from @@ -110,15 +108,15 @@ #include "stm32l4xx.h" #if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ + #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ #if !defined (MSI_VALUE) - #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ + #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ #endif /* MSI_VALUE */ #if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ + #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ #endif /* HSI_VALUE */ /** @@ -167,12 +165,12 @@ is no need to call the 2 first functions listed above, since SystemCoreClock variable is updated automatically. */ - uint32_t SystemCoreClock = 4000000; + uint32_t SystemCoreClock = 4000000U; - const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; - const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - const uint32_t MSIRangeTable[12] = {100000, 200000, 400000, 800000, 1000000, 2000000, \ - 4000000, 8000000, 16000000, 24000000, 32000000, 48000000}; + const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U}; + const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U}; + const uint32_t MSIRangeTable[12] = {100000U, 200000U, 400000U, 800000U, 1000000U, 2000000U, \ + 4000000U, 8000000U, 16000000U, 24000000U, 32000000U, 48000000U}; /** * @} */ @@ -189,6 +187,7 @@ * @{ */ +// Removed from MBED PR #4740 /*+ MBED */ #if 0 /*- MBED */ @@ -205,24 +204,25 @@ void SystemInit(void) #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ /* Set MSION bit */ RCC->CR |= RCC_CR_MSION; /* Reset CFGR register */ - RCC->CFGR = 0x00000000; + RCC->CFGR = 0x00000000U; /* Reset HSEON, CSSON , HSION, and PLLON bits */ - RCC->CR &= (uint32_t)0xEAF6FFFF; + RCC->CR &= 0xEAF6FFFFU; /* Reset PLLCFGR register */ - RCC->PLLCFGR = 0x00001000; + RCC->PLLCFGR = 0x00001000U; /* Reset HSEBYP bit */ - RCC->CR &= (uint32_t)0xFFFBFFFF; + RCC->CR &= 0xFFFBFFFFU; /* Disable all interrupts */ - RCC->CIER = 0x00000000; + RCC->CIER = 0x00000000U; /* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAM @@ -280,16 +280,16 @@ void SystemInit(void) */ void SystemCoreClockUpdate(void) { - uint32_t tmp = 0, msirange = 0, pllvco = 0, pllr = 2, pllsource = 0, pllm = 2; + uint32_t tmp = 0U, msirange = 0U, pllvco = 0U, pllr = 2U, pllsource = 0U, pllm = 2U; /* Get MSI Range frequency--------------------------------------------------*/ if((RCC->CR & RCC_CR_MSIRGSEL) == RESET) { /* MSISRANGE from RCC_CSR applies */ - msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> 8; + msirange = (RCC->CSR & RCC_CSR_MSISRANGE) >> 8U; } else { /* MSIRANGE from RCC_CR applies */ - msirange = (RCC->CR & RCC_CR_MSIRANGE) >> 4; + msirange = (RCC->CR & RCC_CR_MSIRANGE) >> 4U; } /*MSI frequency range in HZ*/ msirange = MSIRangeTable[msirange]; @@ -314,7 +314,7 @@ void SystemCoreClockUpdate(void) SYSCLK = PLL_VCO / PLLR */ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC); - pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4) + 1 ; + pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> 4U) + 1U ; switch (pllsource) { @@ -330,8 +330,8 @@ void SystemCoreClockUpdate(void) pllvco = (msirange / pllm); break; } - pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8); - pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25) + 1) * 2; + pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 8U); + pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> 25U) + 1U) * 2U; SystemCoreClock = pllvco/pllr; break; @@ -341,7 +341,7 @@ void SystemCoreClockUpdate(void) } /* Compute HCLK clock frequency --------------------------------------------*/ /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; /* HCLK clock frequency */ SystemCoreClock >>= tmp; } From 4c7f0e6e5b3451ce5981682837ecea1dc294b218 Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 9 Jan 2018 15:12:06 +0100 Subject: [PATCH 119/133] Update stm32l4xx.h files --- .../TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l4xx.h | 4 ++-- .../TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l4xx.h | 4 ++-- .../TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l4xx.h | 4 ++-- .../TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h | 4 ++-- .../TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l4xx.h index fc2df3cbca..098dcae95d 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l4xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l4xx.h @@ -8,8 +8,8 @@ * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The STM32L4xx device used in the target application - * - To use or not the peripheral�s drivers in application code(i.e. - * code will be based on direct access to peripheral�s registers + * - To use or not the peripheral’s drivers in application code(i.e. + * code will be based on direct access to peripheral’s registers * rather than drivers API), this option is controlled by * "#define USE_HAL_DRIVER" * diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l4xx.h index 7a1b40b4f0..d0222219ce 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l4xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l4xx.h @@ -8,8 +8,8 @@ * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The STM32L4xx device used in the target application - * - To use or not the peripheral�s drivers in application code(i.e. - * code will be based on direct access to peripheral�s registers + * - To use or not the peripheral’s drivers in application code(i.e. + * code will be based on direct access to peripheral’s registers * rather than drivers API), this option is controlled by * "#define USE_HAL_DRIVER" * diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l4xx.h index 49a5aaca38..ebbb0a21d1 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l4xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l4xx.h @@ -8,8 +8,8 @@ * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The STM32L4xx device used in the target application - * - To use or not the peripheral's drivers in application code(i.e. - * code will be based on direct access to peripheral’s registers + * - To use or not the peripheral’s drivers in application code(i.e. + * code will be based on direct access to peripheral’s registers * rather than drivers API), this option is controlled by * "#define USE_HAL_DRIVER" * diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h index b9fe2a860a..f8eb206aec 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l4xx.h @@ -8,8 +8,8 @@ * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The STM32L4xx device used in the target application - * - To use or not the peripheral's drivers in application code(i.e. - * code will be based on direct access to peripheral’s registers + * - To use or not the peripheral’s drivers in application code(i.e. + * code will be based on direct access to peripheral’s registers * rather than drivers API), this option is controlled by * "#define USE_HAL_DRIVER" * diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h index 8a55c79896..cad28cf905 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l4xx.h @@ -8,8 +8,8 @@ * is using in the C source code, usually in main.c. This file contains: * - Configuration section that allows to select: * - The STM32L4xx device used in the target application - * - To use or not the peripheral's drivers in application code(i.e. - * code will be based on direct access to peripheral’s registers + * - To use or not the peripheral’s drivers in application code(i.e. + * code will be based on direct access to peripheral’s registers * rather than drivers API), this option is controlled by * "#define USE_HAL_DRIVER" * From 5bb6edc9527e6483961af095fabb9dcaa9204fbb Mon Sep 17 00:00:00 2001 From: bcostm Date: Tue, 9 Jan 2018 15:20:42 +0100 Subject: [PATCH 120/133] Update stm32l4xxxx.h files --- .../TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h | 4 ++-- .../TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h | 2 +- .../TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l476xx.h | 2 +- .../TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l486xx.h | 2 +- .../TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h | 4 +++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h index 5dc42a0c10..2ed3383594 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L432xC/device/stm32l432xx.h @@ -7,7 +7,7 @@ * This file contains: * - Data structures and the address mapping for all peripherals * - Peripheral's registers declarations and bits definition - * - Macros to access peripheral’s registers hardware + * - Macros to access peripheral’s registers hardware * ****************************************************************************** * @attention @@ -1063,7 +1063,7 @@ typedef struct #define I2C1 ((I2C_TypeDef *) I2C1_BASE) #define I2C3 ((I2C_TypeDef *) I2C3_BASE) #define CRS ((CRS_TypeDef *) CRS_BASE) -//#define CAN ((CAN_TypeDef *) CAN1_BASE) +//#define CAN ((CAN_TypeDef *) CAN1_BASE) // MBED FIX : already defined in mbed API #define CAN1 ((CAN_TypeDef *) CAN1_BASE) #define USB ((USB_TypeDef *) USB_BASE) #define PWR ((PWR_TypeDef *) PWR_BASE) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h index d19a39436f..a26a4b0e50 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L433xC/device/stm32l433xx.h @@ -1133,7 +1133,7 @@ typedef struct #define I2C2 ((I2C_TypeDef *) I2C2_BASE) #define I2C3 ((I2C_TypeDef *) I2C3_BASE) #define CRS ((CRS_TypeDef *) CRS_BASE) -// #define CAN ((CAN_TypeDef *) CAN1_BASE) +// #define CAN ((CAN_TypeDef *) CAN1_BASE) // MBED FIX : already defined in mbed API #define CAN1 ((CAN_TypeDef *) CAN1_BASE) #define USB ((USB_TypeDef *) USB_BASE) #define PWR ((PWR_TypeDef *) PWR_BASE) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l476xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l476xx.h index 738f95e0d2..b5b7968c89 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l476xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L476xG/device/stm32l476xx.h @@ -1345,7 +1345,7 @@ typedef struct #define I2C1 ((I2C_TypeDef *) I2C1_BASE) #define I2C2 ((I2C_TypeDef *) I2C2_BASE) #define I2C3 ((I2C_TypeDef *) I2C3_BASE) -//#define CAN ((CAN_TypeDef *) CAN1_BASE) +//#define CAN ((CAN_TypeDef *) CAN1_BASE) // MBED FIX : already defined in mbed API #define CAN1 ((CAN_TypeDef *) CAN1_BASE) #define PWR ((PWR_TypeDef *) PWR_BASE) #define DAC ((DAC_TypeDef *) DAC1_BASE) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l486xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l486xx.h index a8be1c5319..c4011208aa 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l486xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L486xG/device/stm32l486xx.h @@ -1379,7 +1379,7 @@ typedef struct #define I2C1 ((I2C_TypeDef *) I2C1_BASE) #define I2C2 ((I2C_TypeDef *) I2C2_BASE) #define I2C3 ((I2C_TypeDef *) I2C3_BASE) -//#define CAN ((CAN_TypeDef *) CAN1_BASE) +//#define CAN ((CAN_TypeDef *) CAN1_BASE) // MBED FIX : already defined in mbed API #define CAN1 ((CAN_TypeDef *) CAN1_BASE) #define PWR ((PWR_TypeDef *) PWR_BASE) #define DAC ((DAC_TypeDef *) DAC1_BASE) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h index be0eeca82b..4b717f963e 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_STM32L496xG/device/stm32l496xx.h @@ -7,7 +7,7 @@ * This file contains: * - Data structures and the address mapping for all peripherals * - Peripheral's registers declarations and bits definition - * - Macros to access peripheral�s registers hardware + * - Macros to access peripheral’s registers hardware * ****************************************************************************** * @attention @@ -1425,6 +1425,7 @@ typedef struct #define I2C2 ((I2C_TypeDef *) I2C2_BASE) #define I2C3 ((I2C_TypeDef *) I2C3_BASE) #define CRS ((CRS_TypeDef *) CRS_BASE) +//#define CAN ((CAN_TypeDef *) CAN1_BASE) // MBED FIX : already defined in mbed API #define CAN1 ((CAN_TypeDef *) CAN1_BASE) #define CAN2 ((CAN_TypeDef *) CAN2_BASE) #define I2C4 ((I2C_TypeDef *) I2C4_BASE) @@ -16051,6 +16052,7 @@ typedef struct #define TIM16_OR1_TI1_RMP TIM16_OR1_TI1_RMP_Msk /*! Date: Wed, 10 Jan 2018 15:15:08 +0100 Subject: [PATCH 121/133] Use legacy CAN api --- .../device/stm32l4xx_hal_can_legacy.c | 1480 +++++++++++++++++ .../device/stm32l4xx_hal_conf.h | 7 +- 2 files changed, 1484 insertions(+), 3 deletions(-) create mode 100644 targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.c diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.c b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.c new file mode 100644 index 0000000000..7e93892d6a --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_can_legacy.c @@ -0,0 +1,1480 @@ +/** + ****************************************************************************** + * @file stm32l4xx_hal_can.c + * @author MCD Application Team + * @brief CAN HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the Controller Area Network (CAN) peripheral: + * + Initialization and de-initialization functions + * + IO operation functions + * + Peripheral Control functions + * + Peripheral State and Error functions + * + @verbatim + ============================================================================== + ##### User NOTE ##### + ============================================================================== + [..] + (#) This HAL CAN driver is deprecated, it contains some CAN Tx/Rx FIFO management limitations. + Another HAL CAN driver version has been designed with new API's, to fix these limitations. + + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) Enable the CAN controller interface clock using + __HAL_RCC_CAN1_CLK_ENABLE() for CAN1. + + (#) CAN pins configuration + (++) Enable the clock for the CAN GPIOs using the following function: + __HAL_RCC_GPIOx_CLK_ENABLE(); + (++) Connect and configure the involved CAN pins using the + following function HAL_GPIO_Init(); + + (#) Initialize and configure the CAN using HAL_CAN_Init() function. + + (#) Transmit the desired CAN frame using HAL_CAN_Transmit() or + HAL_CAN_Transmit_IT() function. + + (#) Receive a CAN frame using HAL_CAN_Receive() or HAL_CAN_Receive_IT() function. + + *** Polling mode IO operation *** + ================================= + [..] + (+) Start the CAN peripheral transmission and wait the end of this operation + using HAL_CAN_Transmit(), at this stage user can specify the value of timeout + according to his end application + (+) Start the CAN peripheral reception and wait the end of this operation + using HAL_CAN_Receive(), at this stage user can specify the value of timeout + according to his end application + + *** Interrupt mode IO operation *** + =================================== + [..] + (+) Start the CAN peripheral transmission using HAL_CAN_Transmit_IT() + (+) Start the CAN peripheral reception using HAL_CAN_Receive_IT() + (+) Use HAL_CAN_IRQHandler() called under the used CAN Interrupt subroutine + (+) At CAN end of transmission HAL_CAN_TxCpltCallback() function is executed and user can + add his own code by customization of function pointer HAL_CAN_TxCpltCallback + (+) In case of CAN Error, HAL_CAN_ErrorCallback() function is executed and user can + add his own code by customization of function pointer HAL_CAN_ErrorCallback + + *** CAN HAL driver macros list *** + ============================================= + [..] + Below the list of most used macros in CAN HAL driver. + + (+) __HAL_CAN_ENABLE_IT: Enable the specified CAN interrupts + (+) __HAL_CAN_DISABLE_IT: Disable the specified CAN interrupts + (+) __HAL_CAN_GET_IT_SOURCE: Check if the specified CAN interrupt source is enabled or disabled + (+) __HAL_CAN_CLEAR_FLAG: Clear the CAN's pending flags + (+) __HAL_CAN_GET_FLAG: Get the selected CAN's flag status + + [..] + (@) You can refer to the CAN Legacy HAL driver header file for more useful macros + + @endverbatim + + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2017 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32l4xx_hal.h" + +/** @addtogroup STM32L4xx_HAL_Driver + * @{ + */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED +#ifdef HAL_CAN_MODULE_ENABLED +/* Select HAL CAN module in stm32l4xx_hal_conf.h file: + (#) HAL_CAN_MODULE_ENABLED for new HAL CAN driver fixing FIFO limitations + (#) HAL_CAN_LEGACY_MODULE_ENABLED for legacy HAL CAN driver */ +#error 'The HAL CAN driver cannot be used with its legacy, Please ensure to enable only one HAL CAN module at once in stm32l4xx_hal_conf.h file' +#endif /* HAL_CAN_MODULE_ENABLED */ + +#warning 'Legacy HAL CAN driver is enabled! It can be used with known limitations, refer to the release notes. However it is recommended to use rather the new HAL CAN driver' + +#if defined(CAN1) + +/** @defgroup CAN CAN + * @brief CAN driver modules + * @{ + */ + + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/** @defgroup CAN_Private_Constants CAN Private Constants + * @{ + */ +#define CAN_TIMEOUT_VALUE 10 +/** + * @} + */ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/** @defgroup CAN_Private_Functions CAN Private Functions + * @{ + */ +static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); +static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup CAN_Exported_Functions CAN Exported Functions + * @{ + */ + +/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions + * @brief Initialization and Configuration functions + * +@verbatim + ============================================================================== + ##### Initialization and de-initialization functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Initialize and configure the CAN. + (+) De-initialize the CAN. + +@endverbatim + * @{ + */ + +/** + * @brief Initialize the CAN peripheral according to the specified parameters + * in the CAN_InitStruct structure and initialize the associated handle. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) +{ + uint32_t status = CAN_INITSTATUS_FAILED; /* Default init status */ + uint32_t tickstart = 0; + + /* Check CAN handle */ + if(hcan == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TTCM)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.ABOM)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.AWUM)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.NART)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.RFLM)); + assert_param(IS_FUNCTIONAL_STATE(hcan->Init.TXFP)); + assert_param(IS_CAN_MODE(hcan->Init.Mode)); + assert_param(IS_CAN_SJW(hcan->Init.SJW)); + assert_param(IS_CAN_BS1(hcan->Init.BS1)); + assert_param(IS_CAN_BS2(hcan->Init.BS2)); + assert_param(IS_CAN_PRESCALER(hcan->Init.Prescaler)); + + if(hcan->State == HAL_CAN_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hcan->Lock = HAL_UNLOCKED; + + /* Init the low level hardware */ + HAL_CAN_MspInit(hcan); + } + + /* Initialize the CAN state*/ + hcan->State = HAL_CAN_STATE_BUSY; + + /* Exit from sleep mode */ + hcan->Instance->MCR &= (~(uint32_t)CAN_MCR_SLEEP); + + /* Request initialisation */ + hcan->Instance->MCR |= CAN_MCR_INRQ ; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) + { + if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + { + hcan->State= HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + + /* Check acknowledge */ + if ((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) + { + /* Set the time triggered communication mode */ + if (hcan->Init.TTCM == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_TTCM; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TTCM; + } + + /* Set the automatic bus-off management */ + if (hcan->Init.ABOM == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_ABOM; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_ABOM; + } + + /* Set the automatic wake-up mode */ + if (hcan->Init.AWUM == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_AWUM; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_AWUM; + } + + /* Set the no automatic retransmission */ + if (hcan->Init.NART == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_NART; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_NART; + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.RFLM == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_RFLM; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_RFLM; + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TXFP == ENABLE) + { + hcan->Instance->MCR |= CAN_MCR_TXFP; + } + else + { + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TXFP; + } + + /* Set the bit timing register */ + hcan->Instance->BTR = (uint32_t)((uint32_t)hcan->Init.Mode) | \ + ((uint32_t)hcan->Init.SJW) | \ + ((uint32_t)hcan->Init.BS1) | \ + ((uint32_t)hcan->Init.BS2) | \ + ((uint32_t)hcan->Init.Prescaler - 1); + + /* Request leave initialisation */ + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_INRQ; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK) + { + if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + { + hcan->State= HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + + /* Check acknowledged */ + if ((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) + { + status = CAN_INITSTATUS_SUCCESS; + } + } + + if(status == CAN_INITSTATUS_SUCCESS) + { + /* Set CAN error code to none */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Return function status */ + return HAL_OK; + } + else + { + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Configure the CAN reception filter according to the specified + * parameters in the CAN_FilterInitStruct. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param sFilterConfig: pointer to a CAN_FilterConfTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) +{ + uint32_t filternbrbitpos = 0; + + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* Check the parameters */ + assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); + assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode)); + assert_param(IS_CAN_FILTER_SCALE(sFilterConfig->FilterScale)); + assert_param(IS_CAN_FILTER_FIFO(sFilterConfig->FilterFIFOAssignment)); + assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); + assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); + + filternbrbitpos = ((uint32_t)1) << sFilterConfig->FilterNumber; + + /* Initialisation mode for the filter */ + CAN1->FMR |= (uint32_t)CAN_FMR_FINIT; + +#if defined(CAN2) + /* Select the start slave bank */ + CAN1->FMR &= ~((uint32_t)CAN_FMR_CAN2SB); + CAN1->FMR |= (uint32_t)(sFilterConfig->BankNumber << 8); +#endif + + /* Filter Deactivation */ + CAN1->FA1R &= ~(uint32_t)filternbrbitpos; + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + { + /* 16-bit scale for the filter */ + CAN1->FS1R &= ~(uint32_t)filternbrbitpos; + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16) | + (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh); + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + { + /* 32-bit scale for the filter */ + CAN1->FS1R |= filternbrbitpos; + /* 32-bit identifier or First 32-bit identifier */ + CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = + ((0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh) << 16) | + (0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); + /* 32-bit mask or Second 32-bit identifier */ + CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = + ((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | + (0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow); + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + { + /*Id/Mask mode for the filter*/ + CAN1->FM1R &= ~(uint32_t)filternbrbitpos; + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /*Identifier list mode for the filter*/ + CAN1->FM1R |= (uint32_t)filternbrbitpos; + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + { + /* FIFO 0 assignation for the filter */ + CAN1->FFA1R &= ~(uint32_t)filternbrbitpos; + } + + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO1) + { + /* FIFO 1 assignation for the filter */ + CAN1->FFA1R |= (uint32_t)filternbrbitpos; + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == ENABLE) + { + CAN1->FA1R |= filternbrbitpos; + } + + /* Leave the initialisation mode for the filter */ + CAN1->FMR &= ~((uint32_t)CAN_FMR_FINIT); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief DeInitialize the CAN peripheral registers to their default reset values. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) +{ + /* Check CAN handle */ + if(hcan == NULL) + { + return HAL_ERROR; + } + + /* Check the parameters */ + assert_param(IS_CAN_ALL_INSTANCE(hcan->Instance)); + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY; + + /* DeInit the low level hardware */ + HAL_CAN_MspDeInit(hcan); + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Initialize the CAN MSP. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_CAN_MspInit could be implemented in the user file + */ +} + +/** + * @brief DeInitialize the CAN MSP. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_CAN_MspDeInit could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group2 Input and Output operation functions + * @brief I/O operation functions + * +@verbatim + ============================================================================== + ##### IO operation functions ##### + ============================================================================== + [..] This section provides functions allowing to: + (+) Transmit a CAN frame message. + (+) Receive a CAN frame message. + (+) Enter CAN peripheral in sleep mode. + (+) Wake up the CAN peripheral from sleep mode. + +@endverbatim + * @{ + */ + +/** + * @brief Initiate and transmit a CAN frame message. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param Timeout: Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) +{ + uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + uint32_t tickstart = 0; + + /* Check the parameters */ + assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); + assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); + assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); + + /* Process locked */ + __HAL_LOCK(hcan); + + if(hcan->State == HAL_CAN_STATE_BUSY_RX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX; + } + + /* Select one empty transmit mailbox */ + if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) + { + transmitmailbox = 0; + } + else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) + { + transmitmailbox = 1; + } + else if ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) + { + transmitmailbox = 2; + } + + if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX) + { + /* Set up the Id */ + hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; + if (hcan->pTxMsg->IDE == CAN_ID_STD) + { + assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ + hcan->pTxMsg->RTR); + } + else + { + assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ + hcan->pTxMsg->IDE | \ + hcan->pTxMsg->RTR); + } + + /* Set up the DLC */ + hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; + hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; + hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; + + /* Set up the data field */ + hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | + ((uint32_t)hcan->pTxMsg->Data[2] << 16) | + ((uint32_t)hcan->pTxMsg->Data[1] << 8) | + ((uint32_t)hcan->pTxMsg->Data[0])); + hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | + ((uint32_t)hcan->pTxMsg->Data[6] << 16) | + ((uint32_t)hcan->pTxMsg->Data[5] << 8) | + ((uint32_t)hcan->pTxMsg->Data[4])); + /* Request transmission */ + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check End of transmission flag */ + while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) + { + /* Check for the Timeout */ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + { + hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + } + if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_OK; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_ERROR; + } +} + +/** + * @brief Initiate and transmit a CAN frame message in Interrupt mode. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +{ + uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX; + + /* Check the parameters */ + assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); + assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); + assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); + + if((hcan->State == HAL_CAN_STATE_READY) || (hcan->State == HAL_CAN_STATE_BUSY_RX)) + { + /* Process Locked */ + __HAL_LOCK(hcan); + + /* Select one empty transmit mailbox */ + if((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) + { + transmitmailbox = 0; + } + else if((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) + { + transmitmailbox = 1; + } + else if((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) + { + transmitmailbox = 2; + } + + if(transmitmailbox != CAN_TXSTATUS_NOMAILBOX) + { + /* Set up the Id */ + hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; + if(hcan->pTxMsg->IDE == CAN_ID_STD) + { + assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ + hcan->pTxMsg->RTR); + } + else + { + assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ + hcan->pTxMsg->IDE | \ + hcan->pTxMsg->RTR); + } + + /* Set up the DLC */ + hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; + hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; + hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; + + /* Set up the data field */ + hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | + ((uint32_t)hcan->pTxMsg->Data[2] << 16) | + ((uint32_t)hcan->pTxMsg->Data[1] << 8) | + ((uint32_t)hcan->pTxMsg->Data[0])); + hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | + ((uint32_t)hcan->pTxMsg->Data[6] << 16) | + ((uint32_t)hcan->pTxMsg->Data[5] << 8) | + ((uint32_t)hcan->pTxMsg->Data[4])); + + if(hcan->State == HAL_CAN_STATE_BUSY_RX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX; + } + + /* Set CAN error code to none */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Process Unlocked */ + __HAL_UNLOCK(hcan); + + /* Enable interrupts: */ + /* - Enable Error warning Interrupt */ + /* - Enable Error passive Interrupt */ + /* - Enable Bus-off Interrupt */ + /* - Enable Last error code Interrupt */ + /* - Enable Error Interrupt */ + /* - Enable Transmit mailbox empty Interrupt */ + __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR | + CAN_IT_TME ); + + /* Request transmission */ + hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; + } + } + else + { + return HAL_BUSY; + } + + return HAL_OK; +} + +/** + * @brief Receive a correct CAN frame. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param FIFONumber: FIFO number. + * @param Timeout: Timeout duration. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) +{ + uint32_t tickstart = 0; + + /* Check the parameters */ + assert_param(IS_CAN_FIFO(FIFONumber)); + + /* Process locked */ + __HAL_LOCK(hcan); + + if(hcan->State == HAL_CAN_STATE_BUSY_TX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_RX; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Check pending message */ + while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0) + { + /* Check for the Timeout */ + if(Timeout != HAL_MAX_DELAY) + { + if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout)) + { + hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + } + + /* Get the Id */ + hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; + if (hcan->pRxMsg->IDE == CAN_ID_STD) + { + hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); + } + else + { + hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); + } + + hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; + /* Get the DLC */ + hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; + /* Get the FMI */ + hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); + /* Get the data field */ + hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; + hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); + hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); + hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); + hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; + hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); + hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); + hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); + + /* Release the FIFO */ + if(FIFONumber == CAN_FIFO0) + { + /* Release FIFO0 */ + __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); + } + else /* FIFONumber == CAN_FIFO1 */ + { + /* Release FIFO1 */ + __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); + } + + if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Receive a correct CAN frame in Interrupt mode. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param FIFONumber: FIFO number. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +{ + /* Check the parameters */ + assert_param(IS_CAN_FIFO(FIFONumber)); + + if((hcan->State == HAL_CAN_STATE_READY) || (hcan->State == HAL_CAN_STATE_BUSY_TX)) + { + /* Process locked */ + __HAL_LOCK(hcan); + + if(hcan->State == HAL_CAN_STATE_BUSY_TX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_RX; + } + + /* Set CAN error code to none */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + + /* Enable interrupts: */ + /* - Enable Error warning Interrupt */ + /* - Enable Error passive Interrupt */ + /* - Enable Bus-off Interrupt */ + /* - Enable Last error code Interrupt */ + /* - Enable Error Interrupt */ + __HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR ); + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + if(FIFONumber == CAN_FIFO0) + { + /* Enable FIFO 0 overrun and message pending Interrupt */ + __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + } + else + { + /* Enable FIFO 1 overrun and message pending Interrupt */ + __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + } + + } + else + { + return HAL_BUSY; + } + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Enter the Sleep (low power) mode. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) +{ + uint32_t tickstart = 0; + + /* Process locked */ + __HAL_LOCK(hcan); + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY; + + /* Request Sleep mode */ + hcan->Instance->MCR = (((hcan->Instance->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP); + + /* Sleep mode status */ + if ((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK) + { + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_ERROR; + } + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Wait the acknowledge */ + while((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK) + { + if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + { + hcan->State = HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Wake up the CAN peripheral from sleep mode (after that the CAN peripheral + * is in the normal mode). + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) +{ + uint32_t tickstart = 0; + + /* Process locked */ + __HAL_LOCK(hcan); + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY; + + /* Wake up request */ + hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_SLEEP; + + /* Get tick */ + tickstart = HAL_GetTick(); + + /* Sleep mode status */ + while((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK) + { + if((HAL_GetTick()-tickstart) > CAN_TIMEOUT_VALUE) + { + hcan->State= HAL_CAN_STATE_TIMEOUT; + /* Process unlocked */ + __HAL_UNLOCK(hcan); + return HAL_TIMEOUT; + } + } + if((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK) + { + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_ERROR; + } + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hcan); + + /* Return function status */ + return HAL_OK; +} + +/** + * @brief Handle CAN interrupt request. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) +{ + uint32_t errorcode = HAL_CAN_ERROR_NONE; + + /* Check Overrun flag for FIFO0 */ + if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0))) + { + /* Set CAN error code to FOV0 error */ + errorcode |= HAL_CAN_ERROR_FOV0; + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + } + + /* Check Overrun flag for FIFO1 */ + if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1))) + { + /* Set CAN error code to FOV1 error */ + errorcode |= HAL_CAN_ERROR_FOV1; + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + } + + /* Check End of transmission flag */ + if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) + { + if((__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_0)) || + (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_1)) || + (__HAL_CAN_TRANSMIT_STATUS(hcan, CAN_TXMAILBOX_2))) + { + /* Call transmit function */ + CAN_Transmit_IT(hcan); + } + } + + /* Check End of reception flag for FIFO0 */ + if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0)) && + (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0) != 0)) + { + /* Call receive function */ + CAN_Receive_IT(hcan, CAN_FIFO0); + } + + /* Check End of reception flag for FIFO1 */ + if((__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1)) && + (__HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1) != 0)) + { + /* Call receive function */ + CAN_Receive_IT(hcan, CAN_FIFO1); + } + + /* Set error code in handle */ + hcan->ErrorCode |= errorcode; + + /* Check Error Warning Flag */ + if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) + { + /* Set CAN error code to EWG error */ + hcan->ErrorCode |= HAL_CAN_ERROR_EWG; + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) + { + /* Set CAN error code to EPV error */ + hcan->ErrorCode |= HAL_CAN_ERROR_EPV; + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-Off Flag */ + if((__HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) + { + /* Set CAN error code to BOF error */ + hcan->ErrorCode |= HAL_CAN_ERROR_BOF; + /* No need for clear of Bus-Off Flag as read-only */ + } + + /* Check Last error code Flag */ + if((!HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC)) && + (__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR))) + { + switch(hcan->Instance->ESR & CAN_ESR_LEC) + { + case(CAN_ESR_LEC_0): + /* Set CAN error code to STF error */ + hcan->ErrorCode |= HAL_CAN_ERROR_STF; + break; + case(CAN_ESR_LEC_1): + /* Set CAN error code to FOR error */ + hcan->ErrorCode |= HAL_CAN_ERROR_FOR; + break; + case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0): + /* Set CAN error code to ACK error */ + hcan->ErrorCode |= HAL_CAN_ERROR_ACK; + break; + case(CAN_ESR_LEC_2): + /* Set CAN error code to BR error */ + hcan->ErrorCode |= HAL_CAN_ERROR_BR; + break; + case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0): + /* Set CAN error code to BD error */ + hcan->ErrorCode |= HAL_CAN_ERROR_BD; + break; + case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + hcan->ErrorCode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + } + + /* Clear Last error code Flag */ + hcan->Instance->ESR &= ~(CAN_ESR_LEC); + } + + /* Call the Error call Back in case of Errors */ + if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) + { + /* Clear ERRI bit */ + SET_BIT(hcan->Instance->MSR, CAN_MSR_ERRI); + + /* Set the CAN state ready to be able to start again the process */ + hcan->State = HAL_CAN_STATE_READY; + + /* Disable interrupts: */ + /* - Disable Error warning Interrupt */ + /* - Disable Error passive Interrupt */ + /* - Disable Bus-off Interrupt */ + /* - Disable Last error code Interrupt */ + /* - Disable Error Interrupt */ + /* - Disable FIFO 0 message pending Interrupt */ + /* - Disable FIFO 0 Overrun Interrupt */ + /* - Disable FIFO 1 message pending Interrupt */ + /* - Disable FIFO 1 Overrun Interrupt */ + /* - Disable Transmit mailbox empty Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR | + CAN_IT_FMP0| + CAN_IT_FOV0| + CAN_IT_FMP1| + CAN_IT_FOV1| + CAN_IT_TME ); + + /* Call Error callback function */ + HAL_CAN_ErrorCallback(hcan); + } +} + +/** + * @brief Transmission complete callback in non-blocking mode. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_CAN_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Reception complete callback in non-blocking mode. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_CAN_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Error CAN callback. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hcan); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_CAN_ErrorCallback could be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions + * @brief CAN Peripheral State functions + * +@verbatim + ============================================================================== + ##### Peripheral State and Error functions ##### + ============================================================================== + [..] + This subsection provides functions allowing to : + (+) Check the CAN state. + (+) Check CAN Errors detected during interrupt process. + +@endverbatim + * @{ + */ + +/** + * @brief Return the CAN handle state. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL state + */ +HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan) +{ + /* Return CAN handle state */ + return hcan->State; +} + +/** + * @brief Return the CAN error code. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval CAN Error Code + */ +uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan) +{ + return hcan->ErrorCode; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup CAN_Private_Functions CAN Private Functions + * @{ + */ +/** + * @brief Initiate and transmit a CAN frame message. + * @param hcan: pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) +{ + /* Disable Transmit mailbox empty Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_TME); + + if(hcan->State == HAL_CAN_STATE_BUSY_TX) + { + /* Disable interrupts: */ + /* - Disable Error warning Interrupt */ + /* - Disable Error passive Interrupt */ + /* - Disable Bus-off Interrupt */ + /* - Disable Last error code Interrupt */ + /* - Disable Error Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR ); + } + + if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_RX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + } + + /* Transmission complete callback */ + HAL_CAN_TxCpltCallback(hcan); + + return HAL_OK; +} + +/** + * @brief Receive a correct CAN frame. + * @param hcan: Pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @param FIFONumber: Specify the FIFO number + * @retval HAL status + */ +static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) +{ + /* Get the Id */ + hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; + if (hcan->pRxMsg->IDE == CAN_ID_STD) + { + hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); + } + else + { + hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); + } + + hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; + /* Get the DLC */ + hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; + /* Get the FMI */ + hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); + /* Get the data field */ + hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; + hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); + hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); + hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); + hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; + hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); + hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); + hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); + /* Release the FIFO */ + /* Release FIFO0 */ + if (FIFONumber == CAN_FIFO0) + { + __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO0); + + /* Disable FIFO 0 overrun and message pending Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0); + } + /* Release FIFO1 */ + else /* FIFONumber == CAN_FIFO1 */ + { + __HAL_CAN_FIFO_RELEASE(hcan, CAN_FIFO1); + + /* Disable FIFO 1 overrun and message pending Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_FOV1 | CAN_IT_FMP1); + } + + if(hcan->State == HAL_CAN_STATE_BUSY_RX) + { + /* Disable interrupts: */ + /* - Disable Error warning Interrupt */ + /* - Disable Error passive Interrupt */ + /* - Disable Bus-off Interrupt */ + /* - Disable Last error code Interrupt */ + /* - Disable Error Interrupt */ + __HAL_CAN_DISABLE_IT(hcan, CAN_IT_EWG | + CAN_IT_EPV | + CAN_IT_BOF | + CAN_IT_LEC | + CAN_IT_ERR ); + } + + if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX) + { + /* Disable CAN state */ + hcan->State = HAL_CAN_STATE_BUSY_TX; + } + else + { + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_READY; + } + + /* Receive complete callback */ + HAL_CAN_RxCpltCallback(hcan); + + /* Return function status */ + return HAL_OK; +} +/** + * @} + */ + +/** + * @} + */ + +#endif /* CAN1 */ + +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h index cb4789fe3c..5ad54eb713 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h +++ b/targets/TARGET_STM/TARGET_STM32L4/device/stm32l4xx_hal_conf.h @@ -52,8 +52,9 @@ */ #define HAL_MODULE_ENABLED #define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ +// For MBED we use the CAN legacy for now +//#define HAL_CAN_MODULE_ENABLED +#define HAL_CAN_LEGACY_MODULE_ENABLED #define HAL_COMP_MODULE_ENABLED #define HAL_CORTEX_MODULE_ENABLED #define HAL_CRC_MODULE_ENABLED @@ -245,7 +246,7 @@ #endif /* HAL_CAN_MODULE_ENABLED */ #ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32l4xx_hal_can_legacy.h" + #include "stm32l4xx_hal_can_legacy.h" #endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ #ifdef HAL_COMP_MODULE_ENABLED From 05bcc9a95376589f7770d74ac78227540b178656 Mon Sep 17 00:00:00 2001 From: chrisyang Date: Wed, 24 Jan 2018 22:51:53 +0800 Subject: [PATCH 122/133] rtl8195am - restructure target files restructure target files to better sync with Ameba sdk base --- .../TARGET_AMEBA/{ => TARGET_RTL8195A}/analogin_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/analogin_ext.h | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/analogout_api.c | 0 .../TARGET_AMEBA/{sdk => TARGET_RTL8195A/device}/platform_opts.h | 0 .../soc/realtek/8195a/cmsis => TARGET_RTL8195A}/device/strproc.h | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_ext.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_ext.h | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/gpio_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/gpio_irq_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/i2c_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/log_uart_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/log_uart_api.h | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/ota_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/ota_api.h | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/port_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/pwmout_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/rtc_api.c | 0 .../TARGET_AMEBA/{ => TARGET_RTL8195A}/serial_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/spi_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/timer_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/timer_api.h | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/trng_api.c | 0 .../TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/us_ticker.c | 0 .../os/{rtx2/rtx2_service.c => cmsis_rtos/cmsis_rtos_service.c} | 0 .../os/{rtx2/rtx2_service.h => cmsis_rtos/cmsis_rtos_service.h} | 0 .../device => sdk/soc/realtek/8195a/fwlib}/hal_pinmux.h | 0 .../device => sdk/soc/realtek/8195a/fwlib}/hal_platform.h | 0 .../device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_adc.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_dac.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_gdma.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_gpio.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_i2c.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_peri_on.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_pwm.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_sdio.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_spi_flash.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_ssi.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_sys_on.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_timer.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_uart.h | 0 .../soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_wdt.h | 0 43 files changed, 0 insertions(+), 0 deletions(-) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/analogin_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/analogin_ext.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/analogout_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{sdk => TARGET_RTL8195A/device}/platform_opts.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{sdk/soc/realtek/8195a/cmsis => TARGET_RTL8195A}/device/strproc.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_ext.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/flash_ext.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/gpio_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/gpio_irq_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/i2c_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/log_uart_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/log_uart_api.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/ota_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/ota_api.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/port_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/pwmout_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/rtc_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/serial_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/spi_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/timer_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/timer_api.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/trng_api.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{ => TARGET_RTL8195A}/us_ticker.c (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/{rtx2/rtx2_service.c => cmsis_rtos/cmsis_rtos_service.c} (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/{rtx2/rtx2_service.h => cmsis_rtos/cmsis_rtos_service.h} (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib}/hal_pinmux.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib}/hal_platform.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_adc.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_dac.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_gdma.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_gpio.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_i2c.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_peri_on.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_pwm.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_sdio.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_spi_flash.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_ssi.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_sys_on.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_timer.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_uart.h (100%) rename targets/TARGET_Realtek/TARGET_AMEBA/{TARGET_RTL8195A/device => sdk/soc/realtek/8195a/fwlib/rtl8195a}/rtl8195a_wdt.h (100%) diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/analogin_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogin_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/analogin_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogin_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/analogin_ext.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogin_ext.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/analogin_ext.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogin_ext.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/analogout_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogout_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/analogout_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/analogout_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/sdk/platform_opts.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/platform_opts.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/sdk/platform_opts.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/platform_opts.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/cmsis/device/strproc.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/strproc.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/cmsis/device/strproc.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/strproc.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/flash_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/flash_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/flash_ext.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_ext.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/flash_ext.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_ext.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/flash_ext.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_ext.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/flash_ext.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/flash_ext.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/gpio_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/gpio_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/gpio_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/gpio_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/gpio_irq_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/gpio_irq_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/gpio_irq_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/gpio_irq_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/i2c_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/i2c_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/i2c_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/i2c_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/log_uart_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/log_uart_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/log_uart_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/log_uart_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/log_uart_api.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/log_uart_api.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/log_uart_api.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/log_uart_api.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/ota_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/ota_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/ota_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/ota_api.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/ota_api.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/ota_api.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/port_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/port_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/port_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/port_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/pwmout_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/pwmout_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/pwmout_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/pwmout_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/rtc_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/rtc_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/rtc_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/rtc_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/serial_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/serial_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/serial_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/serial_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/spi_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/spi_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/timer_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/timer_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/timer_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/timer_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/timer_api.h b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/timer_api.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/timer_api.h rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/timer_api.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/trng_api.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/trng_api.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/trng_api.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/trng_api.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/us_ticker.c b/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/us_ticker.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/us_ticker.c rename to targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/us_ticker.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/rtx2/rtx2_service.c b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/cmsis_rtos/cmsis_rtos_service.c similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/rtx2/rtx2_service.c rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/cmsis_rtos/cmsis_rtos_service.c diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/rtx2/rtx2_service.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/cmsis_rtos/cmsis_rtos_service.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/rtx2/rtx2_service.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/cmsis_rtos/cmsis_rtos_service.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/hal_pinmux.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/hal_pinmux.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/hal_pinmux.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/hal_pinmux.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/hal_platform.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/hal_platform.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/hal_platform.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/hal_platform.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_adc.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_adc.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_adc.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_dac.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_dac.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_dac.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_gdma.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_gdma.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gdma.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_gpio.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_gpio.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_gpio.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_i2c.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_i2c.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_i2c.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_peri_on.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_peri_on.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_peri_on.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_peri_on.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_pwm.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_pwm.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_pwm.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_sdio.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_sdio.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_spi_flash.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_spi_flash.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_spi_flash.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_spi_flash.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_ssi.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_ssi.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_ssi.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_sys_on.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_sys_on.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sys_on.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_timer.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_timer.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_timer.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_uart.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_uart.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_uart.h diff --git a/targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_wdt.h b/targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_wdt.h similarity index 100% rename from targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/device/rtl8195a_wdt.h rename to targets/TARGET_Realtek/TARGET_AMEBA/sdk/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_wdt.h From e38489980c49f2c534e4feddabbec88937353ff5 Mon Sep 17 00:00:00 2001 From: chrisyang Date: Fri, 26 Jan 2018 10:58:42 +0800 Subject: [PATCH 123/133] rtl8195am - add missing changes --- mbed-os.IAB | Bin 0 -> 10256384 bytes mbed-os.IAD | Bin 0 -> 100488 bytes mbed-os.IMB | Bin 0 -> 2641920 bytes mbed-os.IMD | Bin 0 -> 26128 bytes mbed-os.PFI | Bin 0 -> 336 bytes mbed-os.PO | Bin 0 -> 776 bytes mbed-os.PR | Bin 0 -> 39512 bytes mbed-os.PRI | Bin 0 -> 253512 bytes mbed-os.PS | Bin 0 -> 2159800 bytes mbed-os.SearchResults | 164 ++++++++++++++++++ mbed-os.WK3 | Bin 0 -> 25994 bytes .../sdk/os/os_dep/include/osdep_service.h | 2 +- 12 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 mbed-os.IAB create mode 100644 mbed-os.IAD create mode 100644 mbed-os.IMB create mode 100644 mbed-os.IMD create mode 100644 mbed-os.PFI create mode 100644 mbed-os.PO create mode 100644 mbed-os.PR create mode 100644 mbed-os.PRI create mode 100644 mbed-os.PS create mode 100644 mbed-os.SearchResults create mode 100644 mbed-os.WK3 diff --git a/mbed-os.IAB b/mbed-os.IAB new file mode 100644 index 0000000000000000000000000000000000000000..2738a4d20ca052a492ebaf6bf6ab03986c81722f GIT binary patch literal 10256384 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 z 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Ï-$XJ($>|BwKHc^u4{71eZ)_-@ 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�-HBA7O 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℘O%AG!|cDdJ#2fp*B@zov;D#L2iqU? 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 z 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

-|(>>J}0>U|Iv<_W3RXA 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

Yejzc2%x{Of%^emO;r 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 literal 0 HcmV?d00001 diff --git a/mbed-os.IAD b/mbed-os.IAD new file mode 100644 index 0000000000000000000000000000000000000000..bc82f58884817f2cb9ad26d2db23ee2bc98dda54 GIT binary patch literal 100488 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

c16w9eM}Pgs?X>d+)ij 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 literal 0 HcmV?d00001 diff --git a/mbed-os.IMB b/mbed-os.IMB new file mode 100644 index 0000000000000000000000000000000000000000..1322631e1b533f62d25148b496be93b8454985ae GIT binary patch literal 2641920 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 literal 0 HcmV?d00001 diff --git a/mbed-os.IMD b/mbed-os.IMD new file mode 100644 index 0000000000000000000000000000000000000000..81266deb27f0bf726f989b665d1f8710e2ce8e7f GIT binary patch literal 26128 zcmc)Sd6*n!od@u0l8|s0hb%WGBq9h}fPl9>nIjp;oYAc9H*ih@TrlW_}D(`FSgT{){qheR$K9vvzEp zB0JABjXmWzHm}7_AADSY9l1;TEKR?Ds4*>j-aAn1lgH0WV#1m7Al>$yX6%|hZtWc! zl*iwf#I|-ZY#xv$M$Ro<&>`d&NgOzb?wn~8fflaUPsU_iTyv?O)mF3fV4+59iaJpQ}el%NgxLz9UHh7tnpyG^WbS zvdwWi7s~IyND{$Cbo=gV>?JSDHn(@ETYmph664J{9y}!5cIA`G+?IJFzAcFbhmhG; zn$GrH**m25{fX?f;cU9YrWq4GHH-I>xH4RsZg6j7UwK)!!INql?<#pxg{#u7n!@AJ z>2zzmydutpbLpOZdoJGEinens&V%#lzOTJCZNf?=?N<+o^Wl8Dx9x6BH0J!yPA%UL z#MR;IbZw=H@_7q8wEG$3;zGEPZobXqFJmZ-Z(oCD|3UB3_8 zFN?QBTotZLSIaWRt}Na^#JO-T-G}#Lf2njWY7z3PBtD!^_rQ#t>rThVu(�oo+*k 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 E1&wMdula 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 literal 0 HcmV?d00001 diff --git a/mbed-os.PS b/mbed-os.PS new file mode 100644 index 0000000000000000000000000000000000000000..5abf7487c7e229d6a2c4d5149a1d8f8a102a8dc2 GIT binary patch literal 2159800 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

Z%vr12)nlH_N&} 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%0A3< zmG$pzMfzA5McY~V{@v!Im9D{2*1xh9nZa6UhILd~|H4+Jk2T(Y%{OKHbxc|R$X29} z71t4A!lJkC(487NdKue>(aN^s=;mTI^WMR@vR=mf1xOz&t|5W7Z?st7Ua5|CSB3|Q z)p}+pbzM+V)(hE+^sz?Ugu)t~L^hEI!GyA2%vPk273+dC3$4w#EiO1uS)an=73pKe zJ*QlE^CN{-Wj&CsNFOWiiR$j%fHB(DZ+!DcO0`w) z_@2^OPjS3BTrxf1*B8k!y-|m$E*Itway?Bsma#`!k6|k^gS9Eg2hLa4W7&%Iv0@$D zSE`mLMoLv|8Cc$beu1*$4q=P|q>mN*hD}+p$aA5xwz3uJV~xh^mgbDtirDpgS9Ew5j{^?*RU0t!P=B-b1qTV7PcaNtk}-#k1imw-!pi=vR=g7 z+DISk+{juh)i>9w^y`{_E>+e=)H=p1(#MKz?S8zOo2*8=E{)&!GG)D-`xWV9#q%xgq7bxrV*^2bBVqFkfn{c%F zh01ynTai9iY!AfNv7+@s*ejIv0=6QvTIpd=J1q~vU8$^BvlW@uDo@N)bD2L^DeD!~ zB9<+rj}_-OqA`FQA}l+VJXb60BwLX_RvddvtkDaYHWx=HjjkoRMp<{U73pJb%mdV~ zT|ND#J^LbM-OW~{kF_xdtS15TT&t`vV=L0f+L*JX)o5k=Vr6{;uVaxu) z7rb0qU&vOZk998Y;fn@={Y`wYP}c3dY$1KDjXA4t(tN%3N@cBczalePtp_W4UZt!r zW-HRi+E{P(mxjBl=b5gzUahQ`uodZJjrL=)Ul8qd_3!Q|Z?9N^U!$xqWh>Ih+L*KY z3wi4c2wtnKJK2i#u{O4|`gh}2Y0KTM;C0G+8C#J)*2X+wJ-L$S^~!oJTaiB2#k*oySA;##t3RgkY&CXDB;>y`BywjwiIjmNCKUA)?m3Ec~>3E^#`GPkoD_&2E{aB>8wXLhStqCU$Zcx_a*oySA;v6UX zwX;&AcLZ7XY7o3xSKO2 zV_@8`H!15uY(@H5r}`Be1l9BCsYGV|`gUcV%T}b171xmDM=HD4PnJiA@F)_aV=lxA z-l43|<9$PcbA}7gWzUmEztKc4ssBD%bTwaZc)}F*oySAVp|(lb0~Slyma$R@TGVip*eb$~pP>C@cMI zG+vQD)@UA>D0hq&YxHzw+wH9PD(e=uB7LklR!rkHvRaSX_bKbCY(@H5aV;6mSvUf3 zxE3G`ecrFE&*yak(#MMHi1M{Ey~<>d(H2YW#GfBf*1PF@m|u}T)@Z!e%GRd}ND~Af zRMrpD_h3c(SaIBi`qlbW0cnEZR%QJFeGgWoj}_MskQHa*#_95b>f}TnFOD-A54S1n zhuDhru^u(kinnu4T0C3xL(2MDwjzD3k8N1{i@O?KYs3ApvVMWBNFQsotsRYl_&9NQ zX=f>Up-qw6%<}n&vffFJVZ0)Jtj9F^H9uP1S>k1^G+eIH=*>84Z&%hYvK8rLjgAjQ z{c2NpVl+N?DC;Nazo1`{KGvx*P>9YISdM{@D(hWrMfzBIy(Q0bQ%g3Vk16Yys9E$Y z(#Oj4YhwnmT!DRDSwGKKq>mNHUuj*?uv)Ib?o`&#u@&iKjrO-{Wt@MZ0|bT-*Cx+h z%6cnXkv`UF`?Xf4P1mu>-Ikq7o=+(2``L>0u}1rbwKDEGHN7T-IKd~C^;2v``dD#} zlg2BojWL^X6#!=R`INHWL*K68^0>982ucJKkio6k5i+tB7Lmfue4mn zXE*vQb{FT|qpWwZ73pK;`4tBV&9`4at*p1P73pI=HXg5JjkmK3Bh^xEq%t~Wu(JJ( zvVN4UNFOWDS!B%*j_&9iDc0<+&-$#geuS+^A1kl75^H6&SS{C$c4Kf_j}k9BIi#@mFJ9N_ zSkbT1ef&*0yYXdZ?PDu4lXZ=K$9_dw&tfam$BOOOs9#$Ol~atlUscvTTai9i?88LX z>G#8!95=pSSzpb^ijh9n#(1@ReF^ni{P~))uBMGwY`-FXtXLPs{W>{D*JoLsj*qYp zDCmMnVCtFpeF zmo21^73VhMeyyH|Y0Gle^(|$6BKIrO$BJtoXIgDK_CaNRDfcTfs}-+_%6fd5r>iI) zQr5NHuSg#&_G6QNr73IL;q0uv`)y@?8TTvF$BOeXiFE+iA@;mig=NDeDt>ydr(9xHd;vvkuW|zu)(j^)=kDNFQrs zI}1nOa+S$(!$&IqKv`S3Uy(jm>>Eb?I>Va1i+`xBui$<~`dCH3;y8S=2b&#Aqv1!& z`bxGUeXP;;K!0nl-TDF&vi?|EPp9uu`2(bn72AY(&{q?74TGO3>t?nheXQu$$l8Q{ z{i(9Thkiw7u{PskvY#pIO12`iSetP%+0T`A6mNr*e#=Nc({xCvEtt=>$BL3^s!i7wjzD3%R5`U!wr31y7- z30sjq)};+Ac4KXfRO0CK7iB$=tw(m&) zK_Xfe7>QGM_K2y z73pK0+9rh6b{y=htP9wR^s!Ej*XU9r(@ASTWu3!Tq>q)(ZB&P%V_EdjukoSLlHt>J z_gB{aXv`8bK>Aqc(8~>JFE%%_sX{H-ejcT)A#W2ReXI+~+LiB*`_yEsb?Wy$Kv}P5 zE7He057rva#8f72&%_16fy(+L`ZX{HkUrKWWbNO&f!-zF=-sJ~$@tYl%K8&(4_2hF zwa_H%!OHq$wjzD32X@tJ6UD(2{dM!t9A!O%Iu-qj^s&z0QQ8x>42~45E#s48w%obO z`XaU>eXIwDW2Lddu?bsc+}b>4J)NycAL~J3^RV-k^{H${`dH(Bo!HZieqErfPh%_6 z$IAWM6zoD}eL7o_KGwyJ7X;aF4=hsF{i%4w43Iw7XbjX!)~l>&NG(>@Gq_)oKGt{) zGzYsxS)ajHq>ptjje$a`Ru8KcZ~E0C%6blu0i=)hAXvlJwlhtYabqi$^;v91`dH^B)^O+Q7Gv)!W&Ipmkv`VA zU+tavwGUO+&#)EgV_gtV6sxsTSf;x;hb?!w$$FTwp3Tb^(#Lw}bZfZ1ynAvYtQLpL zyEBi7!wy#1ovrmsIb#>5{`I4kwV$m>AM1Rwwv~&+eN~#Zwx|9`?{7Xv zSx;jt(#N`ht@$QkAFHfSVJp(ddN5h@^e*{k93ePHS^LAn@p<@_fu~ZA!w453aZW|1TN`uus6DC_)Pf*sIc?=*;tfg@?>l2mr zooq$=SXU(d%Kb_GTDH26>q*M`9=0NVtjo03Od14FR@Qg173pJb^eflivR_v#>-*V? z^szSjHL)7@>l$T!FI$m5)|JT^z)p8{yf|t&5ws}lyV;7gvD!@pYnAnVY(@H57t;0s z&9K{QwXifkWVbDVb;3!?`h8v(AbqThr>w?XEBqC zie=wjvD20HFKk8nSdZVEbtk>tWc!{>-TPE!{Xe!MeXP;8b}|NrOXC^4QtlQ6PgB-E zvK8rLT_yV!Rt#2pzIN5%6ynpB^-pX?`dA+~-5L&6CZoOY!6H5VZ)|e39`2<5aJqbJ zT93`{U(Qh0zp)kRW1Ti$hfCphvTxf{rya2I(l8zA&Oi;Gp{##rE7HfR#y~i+Hmp}7 z?CkpPfBnB&mGvKNMfzBeRAZnvRs3!AyvqMYdBp#=URnRiR-}(L+J~8%2kbhPev_QC z{)??hAM0}2ueHID7N_D+mX($0?KWloH(QYw)@o^J(&~!6c4hq!TaiB2!)3qny2@&b z?NHV~vlZ!MT?p&QSaC3{jTBqfoh(Y2`O6K;`U$ooeXP;4C9L7j=;D{mPBhS|taq^$ z>0@0^#|gu(o(*fl&8^*CZDC()q0o+pNE&>)lyx(2zao9C(Xout^0wj83hm0`5cgQo z>Y~jvmG!%9MfzBIzhEr7Jf}*R5zvjNJJ*D(R~z)}MrA#ftwH;}z*+T?uP%TaUCxhvf~hJ<577TaiB2RY||LZ|)h|R;cuq zs)MERIz5;qJ9d+@euk|`AM0ZiYe#XkR%*pYYxHEQQZ-Mnw4n#8l?Q9S>Rx6299xk- z)*}-u-Fn_u+Fqos>s)nDy*Nt$%VnGq`jqucY(@H54^OPowHf`p`*u~$hQV3N`f0Wz zeXP;C0P_G{n?W5)2Qo5uXJg3pE9)28iuAEImMyZjx8-uJjfa6Zex&yod1d`PTaiB2 z#mN{TYoUL4&t&$?vKqfzL0P}RR-}*hsD>5$+M{{eg(>wECnji>kolUT0cHIxTaiB2 zXq#}Nwj;VmYeQjUqf-pN*sQECVJkATwa?bNMOk0UR-}(L+Rj41_7!WjU6txkC%u%> zpij}nR%LxLTaiB2=y+DO{M_-OVrg_^X%8)8lN0UZCRaqCt*p1O73pJLjD47R_r-FT zAgatc%KAyRB7LlL*t%|w^;N||@Jwa>6+ji$^sz?!+)2OUFoEGf2$l7>Y(@H5 zqvKi9O0V6qxptG)?2$qi{r+}hkz|9>$my13)06r zKeA5Hp{&8mxXmIJ^(p??uB^M*iuAG0O{|3>i$hoqC%za~);(-R`dH^pSx++V)?h?g zce54gW1Z^Pl6k+Dm31dukv`U=`}3Q^)`3E2xUv20uxCS0A?(X<40|`X_lKvhZVA`m z!Lpv8=PGNBtwg%L_%nx)G+QVF~r_Zw^ z)n6M`*7Mkkw6SjL-PEprsOP_qDeE{}kv7)C#xA3N9aq)~wjzD3hs+oQTiW~9tUk%J zE2sUnin3POiuAFrNVA?~Gkr}cYlW>yAL~L`X@bgk^==B+=i8=rOvZmXPgy6~iuAG0 z>#y&?rdH=^sz3E$1C2q!l&Y>A*0V8W&J(1i!p%ou`Y?N^sGNR1!Fu6&R5o7 zuodZJT_ml>!{7pC{W)8aK2~0~`YO9hRqLtXLS_8{Tai9i?$`d(V5z*bWc$#+i`dG1S<%^@VS=c*aJPicTSJpppzao9C7z5I3*}0c0>owf3NFOVW zfzcctb;CO$j9+aRT&Ap#qXi4g7ShK`+gWVwH-FgI<;wbawjzD3G{3U7K+l7>^}aw^ zPhcz3$BHq~zPntH#{m_{@bf}tJ&~p==qr@< z?bIYO17rqkaTNC!)hpq)(%KfQiyyC4);F^i>0@0I_v`xTI!!AiS@5|^SzCF|Li$*7 zZzPR@_1mi@x<|w4V$zrzT&=9@*^2bBE{m;n`4ByxF07hzuTj=B*oySA;&~a=uY*y) z+ERlTDeE)XiuAGa7#O5Wpv}j?waU7Ptw-3w}ClJE?ZWs+E*#-yV;8Lu^uh0;b3`Uq*P5FnUQrE zyjoe`$5y17HQ9>I*uk$+*7vd%>0_O?Y$g3_G!eX3S>MA}q>q)?u|qA}vR0e`>hn5f z?d0_q(#N_e97`etQ)JX?`jthGt|mBCw-^+dKJeXPm+TCWt1j}8RETb1<` zwjzD3$+A_i*pJt@DeGg|iuAEg^=tX$lZ;2~jmml$TaiB2seUaROM~DhWj&OwNFOU7 zcNwZzCe5*LSJuPXiuAG0jkmK()#`Xfts*o3>pPV7du&DeSh-)f7q`{S7p`|I>&a|I z`dE3q!fHNVZ&ucIY(-|WHep-)7G*t_tw_ef#KSZNzws;JwP)&sL<5HR;!8Y!kjuS&wHc z(#M+2uM>l#bTcnKjn42=lJ_fXfvrd%Ycdbu^p^2ynBW7-dKz1iKGvjP>E12tX(0HZ zvMy#T(#M*N*JkV&+^Vd{u@#xcTCdn2Bf3plAH!B;Hmm)<;fIv<2(}`9tbBfJq`Z1t zxo*7q@?mA&z*eM>m5*tbn{iC@Bg&d%E7Hfxa~ADv*^k)UmGvmLB7Lk2qf;B@u?c#D zW;kK{CW||i^@nUl`dE{GtrhEZg2;9|>!ZrLgsn&)E6=ZG`wUCCCYkCpce;^*iYZxw!0S)amIq>mNPEvIwG^fKxA(l^U(*iR|zQ`w62vGRDu zi?2s4ojAaBx3d11E+D}*BuF1CZ@a)cHeq~d`yOR|6FFf;`dCH3nqT(xX=Qzw`xWV9 z75zG~$GBfVqpUY_zaleRciB!`pHjC?D zWxa{}6`9RCR@rHM^7sqNx)1j&GMkmIbTVGHzNoBk<$gtGwi+*6UsBe$uodZJom#eV z1)1&E%e~6FFOLDFk2P7g==r4Pm%QAktZi&X`dE3JFn&{k=~3+<__DILvlW@aTA83% zLfDRgAoz;1E@Law$I9EU6O~=-%=`AM%G$wJq>puZy!|?{vk4dN-># z-X2L0e6k${UsKi_c+NulSb5p1mWuYrG#^mb<=n4GA1jXmvfAIc@pWZAovlb8E02NN zw(1V!J;NaQhO(Z;R-})W$3SGY9j!s|O=UfVtwdwg+Q(L;kCo@wTB$;J z?-(y%4=QU9Tai9i-X5rx$L;Sic}Q7LVk^?e%E#Vn=ABA&=(m-%o2|$!)@B?h{Eo8r zvK8rLO_r^CbTFs9UeNS2UXDc$J)p|EJ_`b3}imk|uR`cTnKTy^K z*ow?%9W~$D{-LrS$X29}HJM-Q)p7HM>qp9Z5L=O1t=0qf$I5yzTaj6<)&uq@$~uRw zNFVFe{8}qn-*);_Wu3=XWJYV<`WXDrlyxp!kv`UBJF8x;SFE?Tf3B0{+( zs~OWk@Ox!l!B(V?m5&k8`@`*527gf21#Ct7SXWf*yFz-m_23SAxow?ZX0s!#@0lpk zUTF5uAC>idJ|Bzpu^tWUFrC(*OZ4a+yrYxxt9iq63D0}Mzx$j2q^!HxiuAG0Nv!1z zsJ;9;e^%Cu*oySAE={aedK&~z8_}-JUVgOmxBsH7&togn$GRY~(!&v`@Xnt9^%wrC ztS@9M(#N_gvF@5Ewj}q-*J$&=fc<~UdKp`hKGucPthOEdH)VZ3TaiB2mBMP=t-;@w z^-{JXeXNb~N@Ku!y#7O3FJUXv$GT{$Uuz*ojMf!G?-J3{L8 z_R#;efY0*3{YzP|Vk^?eD#k#~dJOzqS+8I#(#Luz#sF5R(F-fqgcHRoJxHrGS{lp# zrjY+A>(y*U`dAN-thI1(a7VP}s*I2Bp*IN+j!q7hvfjq?UuE6HR-}(L8n5LktCbT& z`e9|=%~qt3bus!iE_}4+GF=-SN!K|({P4s0hc;P*7qAuSV~yslhShfI+DBP0XDiaj zx&-}7+b#6azrp&B^2Au#?v-)-D(h?5iuAG0XDe-PTQZ{=ct2%*HCvHB)@Te+zY>(* z#A^FA=>3)TRcu9Ow9=Ng?^EcaZk+MQqm=cPY(-|U*6Ce=yGuj1%hmzPdI4LJKGtY| z3;QmnlU3Zs2P*4@Y(@H5qkV2zYm*Zbm1>>(7VEDW_4N71LCShDTaiB2Mg4^>;g-JE zuy>#bKo)kZwZZAL7^V@TjwaWd9^s&xMtaxsk zr)h70ZLYGO$5y1Tbp-DWrFU|!+1n5G{Qf*;eFs~SK30r@v7vRL`HFykzxm2qXDiaj ziZK8yy^6JH{eGAQ$~wtbq>ptjTQLqiOTE{>woqAjvK5)d+Jr?bSfs2qwjzD3v~L(K zR+jJMO*(q9vc8?INFOW4E2aS2cQK!{mMH6uY(@H58~tkiLRRYBrOJ8}TajMY{>fss z-c>7<$4Zq++qJTaiB2xsi2Xycs=vh_b$btw%7RizEY`&0~7T7T7Fh3>!;X?^sz39thv!ru^M*e`|UcFe(6J% z_1$bm`dC*)*0$2l@?a^9-xX%&Jxp0|W-HRix=dQT@W67j;TjyStnXke(#LveY%SM{ z+vxePU35shTAiG*5g(zf?_w*`$GR%AwvRV~8XT#tx3CrIV~v-scJybCE+wKPMRr@< zk5<;Vu@&iKT^#o--n?T?4USUQ8`+BVvBt|*2Oddfy($QfR@V2j73pJ*$LrKGWjSp< zMp@s)_9vRvG(_E=`mqO zn`_4_>uqdB`dAl5%T_<#4%Jf{vtvfq$0_R_Y(@H5xbBi^sz3C`*k#=`>ss&=`2Kvfj#8q>puFGzJ=0IzC{v z)(V2v%K8zuB7Lm!vXw8@?NNy>UBTaiB2czb}XIO-N}ZksqU7}hE4$JvVX zvBvwcTX5%&`OO5^o3W&J!`kv`VNY^C!s9?5ExB7F#Fgfzy@s2DT!7tc&Bbh7H=!;RAqe|oiM^V zBczY@Ft+keH+#cv^p@VtXS|-KtZ!v2(#JZ#M$amyy~5}|BfG6SvTosZ0n*2M zbYvZyz~O<8irnPllk=_qz1^;?ozxU{X@K;xM*Z4eE!IjM^m34q>_G9WbtvmbwjzD3 ztI)4At(#Z3h#%_t8D z4dl8}9lKALvTo&mMfzA5C04WEocdkQRMs=;KVjKI`dF80tI0@>y&IMF#oVt*A8Ryc zbytc*7zcgDYO#ZMw{qAb%-+%6%G$;KiuAD_gMR&=R{xIfQPvl6zao9C$HLlA_mZtwfz2P8DRYc|1y|{_IuO^*jcUKGtY{r9+y{ zm|y#pbpuAqck~JEutrOOl=miC3?Pe>|$BONN#Ognj(hpDh3@GchJZB+& ztOtc*tu|O3-=6ZbvVLo`vJTP!z!*UKSm%fNTDhxwUVKP9t8V(=-=eHvrvD5p(#N_O zR-7VeT%I%i=Vke~t;%{YH3lov$GQa8=n%X;_H1RnkF7`_>wgd86 z#qM*CvVMz~Eu@bX%N9MObj0!*3CVB!Ol2+80KgbP`dAN)sAJ}HE4klNFOWrYg4ep%6cYSk^a^RdM$*} z!Y`T`QPvT*B7LmUx_};4EPjO9mt|!wuodZJjn@Uu!9G`62iS`Ax7I7BCk(kVJCyZY zwjzD3@v=qMCSXUE^_gr%`dAOloVLRUu`K=PT5={Qm*vK5)pYH-EC^o4Slvc8V3NFVEhZ~)KCXv)Fj-O74C{VK!^kUrM=pmtY=>BM1f z#CUsqkFp-e{fhLlE}pWs?=B5a8ZKJF`O5kjwj#4wJLz7tN_7u)@ANU3<=-w))??X< z^sz4Der?8xy--37*s~WY>oIIa`dF7FR=OHvY{+tJAP6p2 z))H?IAbqUM*qR@y>{?HEMCNg2VU|HE{_gXX^|9QqNFVFcXnyVA-8NP0@0M@4BF8%XU{i#$)IO%8ETui~*#N zb!o%eK5lraON4!)vYy9Qq>pt~!`fep??1N_U!klOwjzD3hc&DN}Q-ZPEn6RmzI*!HSQM_3*e~qd5SVYSQ)Py?LWyaJ91H>Uvm_KGs8& z)rd)&AhuHW&H4BZQS|q%KQB_&bp(YK>0_m1nme0y(bKicx{a+!AM4^> z^a{r293uLE+U^2QuKH@@_)Va=yA!P5k_4}BR+24i?93*iHccTwiiCz>b$2(YmzL5} zqwenBzIAtZcX`k6&Y78K?rf4dnX~gD9I_#2zx#jwbA9eDo?5X!)2-A2t=Wf&il%b3AEWpINb9=vM0XSP$-*18YWSmMuLwVOWc2Rje1gmAXCFgXXiIyflMaJiB7O zzgwx>W8HntOs!!LJ?G}1DL`rRoQn0mz8s)Nt=C#Fd*1Pix$%h+d;8aCCmNGO!?V-! z?Y84TcWnQi)-z0~d~rYfwToAN-+C=J`?g-sGwT79D@N_kPW1_HP&?Ep@1Vlx)-qn# z$hgvPANvK1ikTPtiRBlmTX{VnYojqaKHiuapPHOo+pztZ#0^7oYmF_8lk68(YRg&< zX&>YI0_$aSK&;JsRa&c*7rCjG1Lv@)QR@q>mu+j4`$+PTmOm@Gsdb5cmCUJ8>x-F(dOJ8c#dY$$1`MPQ$mRjVdR!;UYU#U^+%dD5r z*S0ltc*#wzC%TmywZ7bXHSeW3GP-&JCM>zB^)$Cq_po2Q_OxG%80>AlUTqVnXgw&RamPAcQ~7W;*j+L{CXZV%j`)>&(i z{JLJo73+Zp#Y&A@U#ZqwGSu3UTWf5w{>*-1rADoarxKdlze#iB-)@z?~T(OSKO(IPk zSaMVAO1Dy@*4J6DU9hg0tDT)_Y_%dcwccodz&KJ{)_&)}>#bM0E?9B)f~*V3O|9>A zD>Z7pNv#X8E+99x9%h5exKg9mH>h<1)&=CI)?fR$Qlr*4TCY8sueQXRtdCEQCVRmWGGu%pzTHk8D_A1Af!*2N-vE-)KxBDERMy+q_vF0wg z$W5(>*konCQlr+l_gHfm1mvdHU;4OGqt?tk=FBYx+hkxv7;I#<)_W)^~T0Yx+hkxv6#9$CVnj zzQ=l%`!LP)Kjs@v5ht1O?a7rCkRHrANs05xj;nDr`;XO-)%ky*}>WxmKwtq=EQ7By=9 zc*V*w$IKVGsr3nNrADovuwI>Y?8xl0ldw;ZVx0cUJG(lt6o9F9ZPO% z)%(FmtzWNNlh?82rq*>nuGFaY8&zxaI+onjs@FhAt>3I#lh?82rq;`RT&Yp(x2o3U zbu785^}%kXMy=njT9enYvt>TdQ$Q_mfX~; z&svCDzgM*;uVcwgt=IS*phm6Vw_Z92l2-)ut$BM^>?Be3t%xenCO|ACZ@>nr7YWoeU-jaq+EvCh?2m7|+AuH>fH=ev~} zwf@q2$$Yhoo^r2&B{#L|vqPiSUv-bGS!?4{D@P}?#+BUE`XnD$YSj8`>(x1LI93}z zb7XavlRo68)?2!j8nyn$dUejpkJYj-EG0L!e$4!~Xf3Ew>u-Ckx##4`O|5$Wtf=*O zJ=WZF^5mx0fB3jkqt@SBug>=C_;Bv176rMfRiDWkwf@0+b>3U!Bg4}pY3l(Sx`N!) zdWmljP@~pAc3CHD_2i)?H?^*HD>Z8UllAJ%fvJ%(1|#uBZfZT#dKCpCK@~?FXu&WYJIFPU#U^+U#wSWJF9J-&XE=cxvBLLZly-8f3;o*x33}TShF?@ z$W5(p@_lY<)cQB;bx@CWI*VG6n_6#lD>Z8UyY=c^n^TVKsfO{BaQL2`ATkTz0$4JsP&)Lt82cxHER-(n_55ObATGP{>yrGEwf5%+OQVn zrq&1hxKg9me_OAv_g2%IHLL}>srB7HuGFaYKh<%yo$k!N7;;nV4nD5bsP(_rtFw-s z9m`(FlABtuwUrF(SZdVzKkL=G=4o~;>pn!S^&YvY^+j%_MyS zt<

ky$(YTeEA&l0Vcur7el^V6~&|}Tr-y%1){@2Hq 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

f9tgy%dCZ&0tLCL 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 literal 0 HcmV?d00001 diff --git a/mbed-os.SearchResults b/mbed-os.SearchResults new file mode 100644 index 0000000000..ac057e1997 --- /dev/null +++ b/mbed-os.SearchResults @@ -0,0 +1,164 @@ +---- __CC_ARM Matches (163 in 68 files) ---- +Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Arm_math.h (cmsis\target_cortex_m):#if (__FPU_USED == 1) && defined ( __CC_ARM ) +Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if defined __CC_ARM +Arm_math.h (features\unsupported\dsp\cmsis_dsp): #if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM ) +Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if (__FPU_USED == 1) && defined ( __CC_ARM ) +Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if defined ( __CC_ARM ) +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM +Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined(__CC_ARM) +Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined ( __CC_ARM ) +Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined (__CC_ARM) +Binary.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\source\common):#if defined(__GNUC__) && !defined(__CC_ARM) // keil does not support binary format +Binary.h (features\feature_ble\targets\target_nordic\target_nrf5\source\common):#if defined(__GNUC__) && !defined(__CC_ARM) // keil does not support binary format +Ble_conn_state.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\common):#if defined(__CC_ARM) +Ble_conn_state.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\common):#if defined(__CC_ARM) +Bootloader_util.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\bootloader_dfu):#if defined ( __CC_ARM ) +Cfstore_svm.cpp (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) +Cfstore_test.c (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) +Cmsis_compiler.h (cmsis\target_cortex_a):#if defined ( __CC_ARM ) +Cmsis_compiler.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Cmsis_os.h (rtos\target_cortex\rtx4):#if defined(__CC_ARM) +Cmsis_os2.h (rtos\target_cortex\rtx5\include):#if defined(__CC_ARM) +Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM +Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM +Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM +Compiler_abstraction.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined ( __CC_ARM ) +Configuration_store.c (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) +Core_armv8mbl.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_armv8mml.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_ca.h (cmsis\target_cortex_a):#if defined ( __CC_ARM ) +Core_cm0.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm0plus.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm23.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm3.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm33.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm4.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) +Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) +Core_sc000.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Core_sc300.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) +Device_manager_peripheral.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\device_manager):#if defined ( __CC_ARM ) +Dlist.h (targets\target_realtek\target_ameba\sdk\common\api\platform):#if defined ( __CC_ARM ) +Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc):#ifdef __CC_ARM +Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc):#elif defined( __CC_ARM ) /* MDK-ARM compiler */ +Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc): #if defined(__ICCARM__) || defined (__CC_ARM) || defined (__CROSSWORKS_ARM) +Hal_soc_ps_monitor.h (targets\target_realtek\target_ameba\sdk\soc\realtek\8195a\fwlib):#if defined (__CC_ARM) +Main.cpp (tests\mbed_hal\flash\functional_tests):#ifdef __CC_ARM +Mbed_application.c (platform):#if defined (__CC_ARM) +Mbed_assert.h (platform):#elif !defined(__cplusplus) && defined(__GNUC__) && !defined(__CC_ARM) \ +Mbed_boot.c (rtos\target_cortex): #elif defined(__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +Mbed_boot.c (rtos\target_cortex):#if defined (__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +Mbed_critical.c (platform):#if defined (__CC_ARM) +Mbed_retarget.cpp (platform):#elif defined(__CC_ARM) +Mbed_rtx.h (targets\target_realtek):#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +Mbed_rtx_conf.h (rtos\target_cortex):#if defined (__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) +Mbed_sdk_boot.c (platform):#if defined (__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5010060)) +Mbed_semihost_api.h (platform):#if !defined(__CC_ARM) && !defined(__ARMCC_VERSION) +Mbed_toolchain.h (platform): && !defined(__CC_ARM) /* ARMCC */ \ +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__CC_ARM) +Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM) +Mbed_toolchain.h (platform):#elif defined(__CC_ARM) +Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) +Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) +Mbed_trace.h (features\feature_common_pal\mbed-trace\mbed-trace):#if defined(__GNUC__) || defined(__CC_ARM) +Mbed_trace.h (features\feature_common_pal\mbed-trace\mbed-trace):#if defined(__GNUC__) || defined(__CC_ARM) +Nrf51.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined(__CC_ARM) +Nrf51.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined(__CC_ARM) +Nrf_delay.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\drivers_nrf\delay):#if defined ( __CC_ARM ) +Nrf_svc.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\softdevice\s130\headers):#if defined (__CC_ARM) +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#elif defined __CC_ARM +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __CC_ARM || defined __TASKING__ +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __CC_ARM || defined __GNUC__ +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):# elif defined __GNUC__ && NS_GCC_VERSION >= 40600 && !defined __CC_ARM +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __GNUC__ && NS_GCC_VERSION >= 40600 && !defined __CC_ARM +Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM +Osdep_service.h (targets\target_realtek\target_ameba\sdk\os\os_dep\include):#elif defined ( __CC_ARM ) +Platform_stdlib.h (targets\target_realtek\target_ameba\sdk\common\api\platform):#elif defined (__CC_ARM) +Rtl8195a_compiler.h (targets\target_realtek\target_ameba\target_rtl8195a\device):#elif defined(__CC_ARM) +Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined(__CC_ARM) || \ +Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) || +Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) +Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) +Rtw_debug.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\include):#if defined (__ICCARM__) || defined (__CC_ARM) ||defined(__GNUC__)|| defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) +Rtw_debug.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\include):#endif //#ifdef __CC_ARM +Rtx2_service.c (targets\target_realtek\target_ameba\sdk\os\rtx2):#if defined(__CC_ARM) +Rtx2_service.c (targets\target_realtek\target_ameba\sdk\os\rtx2):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#else // !(defined(__CC_ARM) || defined(__ICCARM__)) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#else // !(defined(__CC_ARM) || defined(__ICCARM__)) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) +Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source): (defined(__GNUC__) && !defined(__CC_ARM)) +Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) || \ +Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source):#if (( defined(__CC_ARM) || \ +Rtx_malloc_wrapper.c (features\feature_uvisor\source\rtx):#elif defined (__CC_ARM) +Section_config.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#if defined (__CC_ARM) +Section_config.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#if defined (__CC_ARM) +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM +Storage_volume.cpp (features\storage\feature_storage\storage-volume-manager\source):#if defined ( __CC_ARM ) +Storage_volume_manager.cpp (features\storage\feature_storage\storage-volume-manager\source):#if defined ( __CC_ARM ) +Utest_shim.h (features\frameworks\utest\utest):# if defined(__CC_ARM) +Uvisor_exports.h (features\feature_uvisor\includes\uvisor\api\inc):#if defined(__CC_ARM) +Uvisor_exports.h (features\feature_uvisor\includes\uvisor\api\inc):#endif /* defined(__CC_ARM) || defined(__GNUC__) */ +Wireless.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\src\osdep):#ifdef __CC_ARM //Fix Keil compile error, must modify sizeof iw_encode_ext - Alex Fang +Wsf_types.h (features\feature_ble\targets\target_cordio\stack\cordio_stack\ws-core\sw\wsf\generic): defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) +Wsf_types.h (features\feature_ble\targets\target_maxim\exactle\wsf\generic): (__ICC8051__ == 0)) || defined(__CC_ARM) || \ diff --git a/mbed-os.WK3 b/mbed-os.WK3 new file mode 100644 index 0000000000000000000000000000000000000000..911a21d7ebad1242bd7cf97dab7afd98ea5a91c6 GIT binary patch literal 25994 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 Date: Fri, 26 Jan 2018 11:07:35 +0800 Subject: [PATCH 124/133] rtl8195am - remove irrelevant files --- mbed-os.IAB | Bin 10256384 -> 0 bytes mbed-os.IAD | Bin 100488 -> 0 bytes mbed-os.IMB | Bin 2641920 -> 0 bytes mbed-os.IMD | Bin 26128 -> 0 bytes mbed-os.PFI | Bin 336 -> 0 bytes mbed-os.PO | Bin 776 -> 0 bytes mbed-os.PR | Bin 39512 -> 0 bytes mbed-os.PRI | Bin 253512 -> 0 bytes mbed-os.PS | Bin 2159800 -> 0 bytes mbed-os.SearchResults | 164 ------------------------------------------ mbed-os.WK3 | Bin 25994 -> 0 bytes 11 files changed, 164 deletions(-) delete mode 100644 mbed-os.IAB delete mode 100644 mbed-os.IAD delete mode 100644 mbed-os.IMB delete mode 100644 mbed-os.IMD delete mode 100644 mbed-os.PFI delete mode 100644 mbed-os.PO delete mode 100644 mbed-os.PR delete mode 100644 mbed-os.PRI delete mode 100644 mbed-os.PS delete mode 100644 mbed-os.SearchResults delete mode 100644 mbed-os.WK3 diff --git a/mbed-os.IAB b/mbed-os.IAB deleted file mode 100644 index 2738a4d20ca052a492ebaf6bf6ab03986c81722f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10256384 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 z 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Ï-$XJ($>|BwKHc^u4{71eZ)_-@ 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�-HBA7O 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℘O%AG!|cDdJ#2fp*B@zov;D#L2iqU? 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 z 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

-|(>>J}0>U|Iv<_W3RXA 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

Yejzc2%x{Of%^emO;r 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 diff --git a/mbed-os.IAD b/mbed-os.IAD deleted file mode 100644 index bc82f58884817f2cb9ad26d2db23ee2bc98dda54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100488 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

c16w9eM}Pgs?X>d+)ij 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 diff --git a/mbed-os.IMB b/mbed-os.IMB deleted file mode 100644 index 1322631e1b533f62d25148b496be93b8454985ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2641920 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 diff --git a/mbed-os.IMD b/mbed-os.IMD deleted file mode 100644 index 81266deb27f0bf726f989b665d1f8710e2ce8e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26128 zcmc)Sd6*n!od@u0l8|s0hb%WGBq9h}fPl9>nIjp;oYAc9H*ih@TrlW_}D(`FSgT{){qheR$K9vvzEp zB0JABjXmWzHm}7_AADSY9l1;TEKR?Ds4*>j-aAn1lgH0WV#1m7Al>$yX6%|hZtWc! zl*iwf#I|-ZY#xv$M$Ro<&>`d&NgOzb?wn~8fflaUPsU_iTyv?O)mF3fV4+59iaJpQ}el%NgxLz9UHh7tnpyG^WbS zvdwWi7s~IyND{$Cbo=gV>?JSDHn(@ETYmph664J{9y}!5cIA`G+?IJFzAcFbhmhG; zn$GrH**m25{fX?f;cU9YrWq4GHH-I>xH4RsZg6j7UwK)!!INql?<#pxg{#u7n!@AJ z>2zzmydutpbLpOZdoJGEinens&V%#lzOTJCZNf?=?N<+o^Wl8Dx9x6BH0J!yPA%UL z#MR;IbZw=H@_7q8wEG$3;zGEPZobXqFJmZ-Z(oCD|3UB3_8 zFN?QBTotZLSIaWRt}Na^#JO-T-G}#Lf2njWY7z3PBtD!^_rQ#t>rThVu(�oo+*k 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 E1&wMdula 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 diff --git a/mbed-os.PS b/mbed-os.PS deleted file mode 100644 index 5abf7487c7e229d6a2c4d5149a1d8f8a102a8dc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2159800 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

Z%vr12)nlH_N&} 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%0A3< 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

ky$(YTeEA&l0Vcur7el^V6~&|}Tr-y%1){@2Hq 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

f9tgy%dCZ&0tLCL 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 diff --git a/mbed-os.SearchResults b/mbed-os.SearchResults deleted file mode 100644 index ac057e1997..0000000000 --- a/mbed-os.SearchResults +++ /dev/null @@ -1,164 +0,0 @@ ----- __CC_ARM Matches (163 in 68 files) ---- -Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Arm_math.h (cmsis\target_cortex_m):#if (__FPU_USED == 1) && defined ( __CC_ARM ) -Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Arm_math.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if defined __CC_ARM -Arm_math.h (features\unsupported\dsp\cmsis_dsp): #if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM ) -Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if (__FPU_USED == 1) && defined ( __CC_ARM ) -Arm_math.h (features\unsupported\dsp\cmsis_dsp):#if defined ( __CC_ARM ) -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -basicAPI.cpp (tests\storage_abstraction\basicapi):#ifndef __CC_ARM -Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined(__CC_ARM) -Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined ( __CC_ARM ) -Basic_types.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#elif defined (__CC_ARM) -Binary.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\source\common):#if defined(__GNUC__) && !defined(__CC_ARM) // keil does not support binary format -Binary.h (features\feature_ble\targets\target_nordic\target_nrf5\source\common):#if defined(__GNUC__) && !defined(__CC_ARM) // keil does not support binary format -Ble_conn_state.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\common):#if defined(__CC_ARM) -Ble_conn_state.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\common):#if defined(__CC_ARM) -Bootloader_util.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\bootloader_dfu):#if defined ( __CC_ARM ) -Cfstore_svm.cpp (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) -Cfstore_test.c (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) -Cmsis_compiler.h (cmsis\target_cortex_a):#if defined ( __CC_ARM ) -Cmsis_compiler.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Cmsis_os.h (rtos\target_cortex\rtx4):#if defined(__CC_ARM) -Cmsis_os2.h (rtos\target_cortex\rtx5\include):#if defined(__CC_ARM) -Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM -Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM -Common_functions.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM -Compiler_abstraction.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined ( __CC_ARM ) -Configuration_store.c (features\storage\feature_storage\cfstore\source):#if defined ( __CC_ARM ) -Core_armv8mbl.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_armv8mml.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_ca.h (cmsis\target_cortex_a):#if defined ( __CC_ARM ) -Core_cm0.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm0plus.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm23.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm3.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm33.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm4.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) -Core_cm7.h (cmsis\target_cortex_m): #if defined ( __CC_ARM ) -Core_sc000.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Core_sc300.h (cmsis\target_cortex_m):#if defined ( __CC_ARM ) -Device_manager_peripheral.c (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\ble\device_manager):#if defined ( __CC_ARM ) -Dlist.h (targets\target_realtek\target_ameba\sdk\common\api\platform):#if defined ( __CC_ARM ) -Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc):#ifdef __CC_ARM -Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc):#elif defined( __CC_ARM ) /* MDK-ARM compiler */ -Em_usb.h (features\unsupported\usbdevice\targets\target_silicon_labs\inc): #if defined(__ICCARM__) || defined (__CC_ARM) || defined (__CROSSWORKS_ARM) -Hal_soc_ps_monitor.h (targets\target_realtek\target_ameba\sdk\soc\realtek\8195a\fwlib):#if defined (__CC_ARM) -Main.cpp (tests\mbed_hal\flash\functional_tests):#ifdef __CC_ARM -Mbed_application.c (platform):#if defined (__CC_ARM) -Mbed_assert.h (platform):#elif !defined(__cplusplus) && defined(__GNUC__) && !defined(__CC_ARM) \ -Mbed_boot.c (rtos\target_cortex): #elif defined(__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) -Mbed_boot.c (rtos\target_cortex):#if defined (__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) -Mbed_critical.c (platform):#if defined (__CC_ARM) -Mbed_retarget.cpp (platform):#elif defined(__CC_ARM) -Mbed_rtx.h (targets\target_realtek):#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) -Mbed_rtx_conf.h (rtos\target_cortex):#if defined (__CC_ARM) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) -Mbed_sdk_boot.c (platform):#if defined (__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5010060)) -Mbed_semihost_api.h (platform):#if !defined(__CC_ARM) && !defined(__ARMCC_VERSION) -Mbed_toolchain.h (platform): && !defined(__CC_ARM) /* ARMCC */ \ -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__CC_ARM) -Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM) -Mbed_toolchain.h (platform):#elif defined(__CC_ARM) -Mbed_toolchain.h (platform):#if (defined(__GNUC__) || defined(__clang__)) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) -Mbed_toolchain.h (platform):#if defined(__GNUC__) || defined(__CC_ARM) -Mbed_trace.h (features\feature_common_pal\mbed-trace\mbed-trace):#if defined(__GNUC__) || defined(__CC_ARM) -Mbed_trace.h (features\feature_common_pal\mbed-trace\mbed-trace):#if defined(__GNUC__) || defined(__CC_ARM) -Nrf51.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined(__CC_ARM) -Nrf51.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\device):#if defined(__CC_ARM) -Nrf_delay.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\drivers_nrf\delay):#if defined ( __CC_ARM ) -Nrf_svc.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\softdevice\s130\headers):#if defined (__CC_ARM) -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#elif defined __CC_ARM -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __CC_ARM || defined __TASKING__ -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __CC_ARM || defined __GNUC__ -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):# elif defined __GNUC__ && NS_GCC_VERSION >= 40600 && !defined __CC_ARM -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#if defined __GNUC__ && NS_GCC_VERSION >= 40600 && !defined __CC_ARM -Ns_types.h (features\feature_common_pal\nanostack-libservice\mbed-client-libservice):#ifdef __CC_ARM -Osdep_service.h (targets\target_realtek\target_ameba\sdk\os\os_dep\include):#elif defined ( __CC_ARM ) -Platform_stdlib.h (targets\target_realtek\target_ameba\sdk\common\api\platform):#elif defined (__CC_ARM) -Rtl8195a_compiler.h (targets\target_realtek\target_ameba\target_rtl8195a\device):#elif defined(__CC_ARM) -Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined(__CC_ARM) || \ -Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) || -Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) -Rtl8195a_init.c (targets\target_realtek\target_ameba\target_rtl8195a\device):#if defined (__CC_ARM) -Rtw_debug.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\include):#if defined (__ICCARM__) || defined (__CC_ARM) ||defined(__GNUC__)|| defined(CONFIG_PLATFORM_8195A) || defined(CONFIG_PLATFORM_8711B) -Rtw_debug.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\include):#endif //#ifdef __CC_ARM -Rtx2_service.c (targets\target_realtek\target_ameba\sdk\os\rtx2):#if defined(__CC_ARM) -Rtx2_service.c (targets\target_realtek\target_ameba\sdk\os\rtx2):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#else // !(defined(__CC_ARM) || defined(__ICCARM__)) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_ca.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#else // !(defined(__CC_ARM) || defined(__ICCARM__)) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_core_cm.h (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) -Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source): (defined(__GNUC__) && !defined(__CC_ARM)) -Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source):#if defined(__CC_ARM) || \ -Rtx_lib.c (rtos\target_cortex\rtx5\rtx\source):#if (( defined(__CC_ARM) || \ -Rtx_malloc_wrapper.c (features\feature_uvisor\source\rtx):#elif defined (__CC_ARM) -Section_config.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#if defined (__CC_ARM) -Section_config.h (targets\target_realtek\target_ameba\sdk\soc\realtek\common\bsp):#if defined (__CC_ARM) -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Section_vars.h (features\feature_ble\targets\target_nordic\target_mcu_nrf51822\sdk\source\libraries\experimental_section_vars):#if defined __CC_ARM -Storage_volume.cpp (features\storage\feature_storage\storage-volume-manager\source):#if defined ( __CC_ARM ) -Storage_volume_manager.cpp (features\storage\feature_storage\storage-volume-manager\source):#if defined ( __CC_ARM ) -Utest_shim.h (features\frameworks\utest\utest):# if defined(__CC_ARM) -Uvisor_exports.h (features\feature_uvisor\includes\uvisor\api\inc):#if defined(__CC_ARM) -Uvisor_exports.h (features\feature_uvisor\includes\uvisor\api\inc):#endif /* defined(__CC_ARM) || defined(__GNUC__) */ -Wireless.h (targets\target_realtek\target_ameba\sdk\common\drivers\wlan\realtek\src\osdep):#ifdef __CC_ARM //Fix Keil compile error, must modify sizeof iw_encode_ext - Alex Fang -Wsf_types.h (features\feature_ble\targets\target_cordio\stack\cordio_stack\ws-core\sw\wsf\generic): defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) -Wsf_types.h (features\feature_ble\targets\target_maxim\exactle\wsf\generic): (__ICC8051__ == 0)) || defined(__CC_ARM) || \ diff --git a/mbed-os.WK3 b/mbed-os.WK3 deleted file mode 100644 index 911a21d7ebad1242bd7cf97dab7afd98ea5a91c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25994 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 Date: Tue, 9 Jan 2018 16:48:39 +0900 Subject: [PATCH 125/133] Commonize RZ_A1 related folders placed in "FEATURE_LWIP" directory In the below "features/FEATURE_LWIP" folders, same as Cortex-M targets, I changed the folder structure to combine files that can be shared as RZ/A1 related. And I renamed the folder name to "TARGET_RZ_A1XX" in order to make commonality explicit. - "features/FEATURE_LWIP" folder \features\FEATURE_LWIP\lwip-interface\lwip-eth\arch\TARGET_RZ_A1H \features\FEATURE_LWIP\lwip-interface\lwip-eth\arch\TARGET_VK_RZ_A1H \features\FEATURE_LWIP\lwip-interface\lwip-eth\arch\TARGET_RZ_A1XX --- .../lwipopts_conf.h | 0 .../rza1_emac.c | 0 .../arch/TARGET_VK_RZ_A1H/lwipopts_conf.h | 26 --- .../arch/TARGET_VK_RZ_A1H/rza1_emac.c | 210 ------------------ 4 files changed, 236 deletions(-) rename features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/{TARGET_RZ_A1H => TARGET_RZ_A1XX}/lwipopts_conf.h (100%) rename features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/{TARGET_RZ_A1H => TARGET_RZ_A1XX}/rza1_emac.c (100%) delete mode 100644 features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/lwipopts_conf.h delete mode 100644 features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/rza1_emac.c diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1H/lwipopts_conf.h b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h similarity index 100% rename from features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1H/lwipopts_conf.h rename to features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1H/rza1_emac.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c similarity index 100% rename from features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1H/rza1_emac.c rename to features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/lwipopts_conf.h b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/lwipopts_conf.h deleted file mode 100644 index 1ad186c7a1..0000000000 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/lwipopts_conf.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef LWIPOPTS_CONF_H -#define LWIPOPTS_CONF_H - -#define LWIP_TRANSPORT_ETHERNET 1 - -#define MEM_SIZE (1600 * 16) - -#endif diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/rza1_emac.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/rza1_emac.c deleted file mode 100644 index 65515507a0..0000000000 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_VK_RZ_A1H/rza1_emac.c +++ /dev/null @@ -1,210 +0,0 @@ -#include "lwip/opt.h" -#include "lwip/tcpip.h" -#include "netif/etharp.h" -#include "lwip/ethip6.h" -#include "mbed_interface.h" -#include "ethernet_api.h" -#include "ethernetext_api.h" - -#define RECV_TASK_PRI (osPriorityNormal) -#define PHY_TASK_PRI (osPriorityNormal) -#define PHY_TASK_WAIT (200) - -/* memory */ -static sys_sem_t recv_ready_sem; /* receive ready semaphore */ - -/* function */ -static void rza1_recv_task(void *arg); -static void rza1_phy_task(void *arg); -#if LWIP_IPV4 -static err_t rza1_etharp_output_ipv4(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr); -#endif -#if LWIP_IPV6 -static err_t rza1_etharp_output_ipv6(struct netif *netif, struct pbuf *q, const ip6_addr_t *ipaddr); -#endif -static err_t rza1_low_level_output(struct netif *netif, struct pbuf *p); -static void rza1_recv_callback(void); - -static void rza1_recv_task(void *arg) { - struct netif *netif = (struct netif*)arg; - u16_t recv_size; - struct pbuf *p; - int cnt; - - while (1) { - sys_arch_sem_wait(&recv_ready_sem, 0); - for (cnt = 0; cnt < 16; cnt++) { - recv_size = ethernet_receive(); - if (recv_size != 0) { - p = pbuf_alloc(PBUF_RAW, recv_size, PBUF_RAM); - if (p != NULL) { - (void)ethernet_read((char *)p->payload, p->len); - /* full packet send to tcpip_thread to process */ - if (netif->input(p, netif) != ERR_OK) { - /* Free buffer */ - pbuf_free(p); - } - } - } else { - break; - } - } - } -} - -static void rza1_phy_task(void *arg) { - struct netif *netif = (struct netif*)arg; - s32_t connect_sts = 0; /* 0: disconnect, 1:connect */ - s32_t link_sts; - s32_t link_mode_new = NEGO_FAIL; - s32_t link_mode_old = NEGO_FAIL; - - while (1) { - link_sts = ethernet_link(); - if (link_sts == 1) { - link_mode_new = ethernetext_chk_link_mode(); - if (link_mode_new != link_mode_old) { - if (connect_sts == 1) { - tcpip_callback_with_block((tcpip_callback_fn)netif_set_link_down, (void*) netif, 1); - } - if (link_mode_new != NEGO_FAIL) { - ethernetext_set_link_mode(link_mode_new); - tcpip_callback_with_block((tcpip_callback_fn)netif_set_link_up, (void*) netif, 1); - connect_sts = 1; - } - } - } else { - if (connect_sts != 0) { - tcpip_callback_with_block((tcpip_callback_fn)netif_set_link_down, (void*) netif, 1); - link_mode_new = NEGO_FAIL; - connect_sts = 0; - } - } - link_mode_old = link_mode_new; - osDelay(PHY_TASK_WAIT); - } -} - -#if LWIP_IPV4 -static err_t rza1_etharp_output_ipv4(struct netif *netif, struct pbuf *q, const ip4_addr_t *ipaddr) { - /* Only send packet is link is up */ - if (netif->flags & NETIF_FLAG_LINK_UP) { - return etharp_output(netif, q, ipaddr); - } - - return ERR_CONN; -} -#endif - -#if LWIP_IPV6 -static err_t rza1_etharp_output_ipv6(struct netif *netif, struct pbuf *q, const ip6_addr_t *ipaddr) { - /* Only send packet is link is up */ - if (netif->flags & NETIF_FLAG_LINK_UP) { - return ethip6_output(netif, q, ipaddr); - } - - return ERR_CONN; -} -#endif - -static err_t rza1_low_level_output(struct netif *netif, struct pbuf *p) { - struct pbuf *q; - s32_t cnt; - err_t err = ERR_MEM; - s32_t write_size = 0; - - if ((p->payload != NULL) && (p->len != 0)) { - /* If the first data can't be written, transmit descriptor is full. */ - for (cnt = 0; cnt < 100; cnt++) { - write_size = ethernet_write((char *)p->payload, p->len); - if (write_size != 0) { - break; - } - osDelay(1); - } - if (write_size != 0) { - for (q = p->next; q != NULL; q = q->next) { - (void)ethernet_write((char *)q->payload, q->len); - } - if (ethernet_send() == 1) { - err = ERR_OK; - } - } - } - - return err; -} - -static void rza1_recv_callback(void) { - sys_sem_signal(&recv_ready_sem); -} - -err_t eth_arch_enetif_init(struct netif *netif) -{ - ethernet_cfg_t ethcfg; - - /* set MAC hardware address */ -#if (MBED_MAC_ADDRESS_SUM != MBED_MAC_ADDR_INTERFACE) - netif->hwaddr[0] = MBED_MAC_ADDR_0; - netif->hwaddr[1] = MBED_MAC_ADDR_1; - netif->hwaddr[2] = MBED_MAC_ADDR_2; - netif->hwaddr[3] = MBED_MAC_ADDR_3; - netif->hwaddr[4] = MBED_MAC_ADDR_4; - netif->hwaddr[5] = MBED_MAC_ADDR_5; -#else - mbed_mac_address((char *)netif->hwaddr); -#endif - netif->hwaddr_len = ETH_HWADDR_LEN; - - /* maximum transfer unit */ - netif->mtu = 1500; - - /* device capabilities */ - netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET; -#ifdef LWIP_IGMP - netif->flags |= NETIF_FLAG_IGMP; -#endif -#if LWIP_IPV6_MLD - netif->flags |= NETIF_FLAG_MLD6; -#endif - -#if LWIP_NETIF_HOSTNAME - /* Initialize interface hostname */ - netif->hostname = "lwiprza1"; -#endif /* LWIP_NETIF_HOSTNAME */ - - netif->name[0] = 'e'; - netif->name[1] = 'n'; - -#if LWIP_IPV4 - netif->output = rza1_etharp_output_ipv4; -#endif -#if LWIP_IPV6 - netif->output_ip6 = rza1_etharp_output_ipv6; -#endif - - netif->linkoutput = rza1_low_level_output; - - /* Initialize the hardware */ - ethcfg.int_priority = 6; - ethcfg.recv_cb = &rza1_recv_callback; - ethcfg.ether_mac = (char *)netif->hwaddr; - ethernetext_init(ðcfg); - - /* semaphore */ - sys_sem_new(&recv_ready_sem, 0); - - /* task */ - sys_thread_new("rza1_emac_rx_thread", rza1_recv_task, netif, DEFAULT_THREAD_STACKSIZE, RECV_TASK_PRI); - sys_thread_new("rza1_emac_phy_thread", rza1_phy_task, netif, DEFAULT_THREAD_STACKSIZE, PHY_TASK_PRI); - - return ERR_OK; -} - -void eth_arch_enable_interrupts(void) { - ethernetext_start_stop(1); -} - -void eth_arch_disable_interrupts(void) { - ethernetext_start_stop(0); -} From 7d270160d0adab0459e6099407c374d58673fffa Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 9 Jan 2018 17:39:22 +0900 Subject: [PATCH 126/133] Revise the folder structure in "targets/TARGET_RENESAS" directory In "targets/TARGET_RENESAS" folders, same as Cortex-M targets, I changed the folder structure to combine files that can be shared as RZ/A1 related. And I renamed the folder name to "TARGET_RZ_A1XX" in order to make commonality explicit. - "targets/TARGET_RENESAS" folder \targets\TARGET_RENESAS\TARGET_RZ_A1H \targets\TARGET_RENESAS\TARGET_VK_RZ_A1H \targets\TARGET_RENESAS\TARGET_RZ_A1XX --- .../TARGET_RZ_A1H/PeripheralNames.h | 0 .../TARGET_RZ_A1H/PinNames.h | 0 .../TARGET_RZ_A1H/PortNames.h | 0 .../TARGET_MBED_MBRZA1H/reserved_pins.h | 0 .../TARGET_RZ_A1H/analogin_api.c | 0 .../TARGET_RZ_A1H/can_api.c | 0 .../TARGET_RZ_A1H/device.h | 0 .../TARGET_RZ_A1H/device/MBRZA1H.h | 0 .../TARGET_RZ_A1H/device/RZ_A1_Init.c | 0 .../device/TOOLCHAIN_ARM_STD/MBRZA1H.sct | 0 .../device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h | 0 .../device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c | 0 .../device/TOOLCHAIN_ARM_STD/sys.cpp | 0 .../device/TOOLCHAIN_GCC_ARM/RZA1H.ld | 0 .../device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S | 0 .../device/TOOLCHAIN_IAR/MBRZA1H.icf | 0 .../device/TOOLCHAIN_IAR/startup_RZA1H.S | 0 .../TARGET_RZ_A1H/device/cmsis.h | 0 .../TARGET_RZ_A1H/device/cmsis_nvic.c | 0 .../TARGET_RZ_A1H/device/inc/RZ_A1H.h | 0 .../device/inc/iobitmasks/bsc_iobitmask.h | 0 .../device/inc/iobitmasks/cpg_iobitmask.h | 0 .../device/inc/iobitmasks/dmac_iobitmask.h | 0 .../device/inc/iobitmasks/gpio_iobitmask.h | 0 .../device/inc/iobitmasks/intc_iobitmask.h | 0 .../device/inc/iobitmasks/mtu2_iobitmask.h | 0 .../device/inc/iobitmasks/ostm_iobitmask.h | 0 .../device/inc/iobitmasks/riic_iobitmask.h | 0 .../device/inc/iobitmasks/rspi_iobitmask.h | 0 .../device/inc/iobitmasks/scif_iobitmask.h | 0 .../device/inc/iobitmasks/usb_iobitmask.h | 0 .../TARGET_RZ_A1H/device/inc/iodefine.h | 0 .../device/inc/iodefines/adc_iodefine.h | 0 .../device/inc/iodefines/bsc_iodefine.h | 0 .../device/inc/iodefines/ceu_iodefine.h | 0 .../device/inc/iodefines/cpg_iodefine.h | 0 .../device/inc/iodefines/disc_iodefine.h | 0 .../device/inc/iodefines/dmac_iodefine.h | 0 .../device/inc/iodefines/dvdec_iodefine.h | 0 .../device/inc/iodefines/ether_iodefine.h | 0 .../device/inc/iodefines/flctl_iodefine.h | 0 .../device/inc/iodefines/gpio_iodefine.h | 0 .../device/inc/iodefines/ieb_iodefine.h | 0 .../device/inc/iodefines/inb_iodefine.h | 0 .../device/inc/iodefines/intc_iodefine.h | 0 .../device/inc/iodefines/iodefine_typedef.h | 0 .../device/inc/iodefines/irda_iodefine.h | 0 .../device/inc/iodefines/jcu_iodefine.h | 0 .../device/inc/iodefines/l2c_iodefine.h | 0 .../device/inc/iodefines/lin_iodefine.h | 0 .../device/inc/iodefines/lvds_iodefine.h | 0 .../device/inc/iodefines/mlb_iodefine.h | 0 .../device/inc/iodefines/mmc_iodefine.h | 0 .../device/inc/iodefines/mtu2_iodefine.h | 0 .../device/inc/iodefines/ostm_iodefine.h | 0 .../device/inc/iodefines/pfv_iodefine.h | 0 .../device/inc/iodefines/pwm_iodefine.h | 0 .../device/inc/iodefines/riic_iodefine.h | 0 .../device/inc/iodefines/romdec_iodefine.h | 0 .../device/inc/iodefines/rscan0_iodefine.h | 0 .../device/inc/iodefines/rspi_iodefine.h | 0 .../device/inc/iodefines/rtc_iodefine.h | 0 .../device/inc/iodefines/scif_iodefine.h | 0 .../device/inc/iodefines/scim_iodefine.h | 0 .../device/inc/iodefines/scux_iodefine.h | 0 .../device/inc/iodefines/sdg_iodefine.h | 0 .../device/inc/iodefines/spdif_iodefine.h | 0 .../device/inc/iodefines/spibsc_iodefine.h | 0 .../device/inc/iodefines/ssif_iodefine.h | 0 .../device/inc/iodefines/usb20_iodefine.h | 0 .../device/inc/iodefines/vdc5_iodefine.h | 0 .../device/inc/iodefines/wdt_iodefine.h | 0 .../TARGET_RZ_A1H/device/inc/reg32_t.h | 0 .../TARGET_RZ_A1H/device/mbed_sf_boot.c | 0 .../TARGET_RZ_A1H/device/mmu_RZ_A1H.c | 0 .../TARGET_RZ_A1H/device/nvic_wrapper.c | 0 .../TARGET_RZ_A1H/device/os_tick_ostm.c | 0 .../TARGET_RZ_A1H/device/system_RZ_A1H.c | 0 .../TARGET_RZ_A1H/device/system_RZ_A1H.h | 0 .../TARGET_RZ_A1H/ethernet_api.c | 0 .../TARGET_RZ_A1H/gpio_api.c | 0 .../TARGET_RZ_A1H/gpio_irq_api.c | 0 .../TARGET_RZ_A1H/i2c_api.c | 0 .../TARGET_RZ_A1H/objects.h | 0 .../TARGET_RZ_A1H/pinmap.c | 0 .../TARGET_RZ_A1H/port_api.c | 0 .../TARGET_RZ_A1H/pwmout_api.c | 0 .../TARGET_RZ_A1H/rtc_api.c | 0 .../TARGET_RZ_A1H/serial_api.c | 0 .../TARGET_RZ_A1H/spi_api.c | 0 .../TARGET_RZ_A1H/us_ticker.c | 0 .../TARGET_VK_RZ_A1H/PeripheralNames.h | 0 .../TARGET_VK_RZ_A1H/PinNames.h | 0 .../TARGET_VK_RZ_A1H/PortNames.h | 0 .../TARGET_MBED_VKRZA1H/reserved_pins.h | 0 .../TARGET_VK_RZ_A1H/analogin_api.c | 0 .../TARGET_VK_RZ_A1H/can_api.c | 0 .../TARGET_VK_RZ_A1H/device.h | 0 .../TARGET_VK_RZ_A1H/device/RZ_A1_Init.c | 0 .../device/TOOLCHAIN_ARM_STD/VKRZA1H.sct | 0 .../TOOLCHAIN_ARM_STD/startup_VKRZA1H.S | 0 .../device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld | 0 .../TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S | 0 .../device/TOOLCHAIN_IAR/VKRZA1H.icf | 0 .../device/TOOLCHAIN_IAR/startup_VKRZA1H.S | 0 .../TARGET_VK_RZ_A1H/device/VKRZA1H.h | 0 .../TARGET_VK_RZ_A1H/device/cmsis.h | 0 .../TARGET_VK_RZ_A1H/device/cmsis_nvic.c | 0 .../TARGET_VK_RZ_A1H/device/gic.c | 0 .../TARGET_VK_RZ_A1H/device/gic.h | 0 .../device/inc/iobitmasks/bsc_iobitmask.h | 0 .../device/inc/iobitmasks/cpg_iobitmask.h | 0 .../device/inc/iobitmasks/dmac_iobitmask.h | 0 .../device/inc/iobitmasks/gpio_iobitmask.h | 0 .../device/inc/iobitmasks/intc_iobitmask.h | 0 .../device/inc/iobitmasks/mtu2_iobitmask.h | 0 .../device/inc/iobitmasks/ostm_iobitmask.h | 0 .../device/inc/iobitmasks/riic_iobitmask.h | 0 .../device/inc/iobitmasks/rspi_iobitmask.h | 0 .../device/inc/iobitmasks/scif_iobitmask.h | 0 .../device/inc/iobitmasks/usb_iobitmask.h | 0 .../TARGET_VK_RZ_A1H/device/inc/iodefine.h | 0 .../device/inc/iodefines/adc_iodefine.h | 0 .../device/inc/iodefines/bsc_iodefine.h | 0 .../device/inc/iodefines/ceu_iodefine.h | 0 .../device/inc/iodefines/cpg_iodefine.h | 0 .../device/inc/iodefines/disc_iodefine.h | 0 .../device/inc/iodefines/dmac_iodefine.h | 0 .../device/inc/iodefines/dvdec_iodefine.h | 0 .../device/inc/iodefines/ether_iodefine.h | 0 .../device/inc/iodefines/flctl_iodefine.h | 0 .../device/inc/iodefines/gpio_iodefine.h | 0 .../device/inc/iodefines/ieb_iodefine.h | 0 .../device/inc/iodefines/inb_iodefine.h | 0 .../device/inc/iodefines/intc_iodefine.h | 0 .../device/inc/iodefines/irda_iodefine.h | 0 .../device/inc/iodefines/jcu_iodefine.h | 0 .../device/inc/iodefines/l2c_iodefine.h | 0 .../device/inc/iodefines/lin_iodefine.h | 0 .../device/inc/iodefines/lvds_iodefine.h | 0 .../device/inc/iodefines/mlb_iodefine.h | 0 .../device/inc/iodefines/mmc_iodefine.h | 0 .../device/inc/iodefines/mtu2_iodefine.h | 0 .../device/inc/iodefines/ostm_iodefine.h | 0 .../device/inc/iodefines/pfv_iodefine.h | 0 .../device/inc/iodefines/pwm_iodefine.h | 0 .../device/inc/iodefines/riic_iodefine.h | 0 .../device/inc/iodefines/romdec_iodefine.h | 0 .../device/inc/iodefines/rscan0_iodefine.h | 0 .../device/inc/iodefines/rspi_iodefine.h | 0 .../device/inc/iodefines/rtc_iodefine.h | 0 .../device/inc/iodefines/scif_iodefine.h | 0 .../device/inc/iodefines/scim_iodefine.h | 0 .../device/inc/iodefines/scux_iodefine.h | 0 .../device/inc/iodefines/sdg_iodefine.h | 0 .../device/inc/iodefines/spdif_iodefine.h | 0 .../device/inc/iodefines/spibsc_iodefine.h | 0 .../device/inc/iodefines/ssif_iodefine.h | 0 .../device/inc/iodefines/usb20_iodefine.h | 0 .../device/inc/iodefines/vdc5_iodefine.h | 0 .../device/inc/iodefines/wdt_iodefine.h | 0 .../TARGET_VK_RZ_A1H/device/inc/reg32_t.h | 0 .../device/mmu_Renesas_RZ_A1.c | 0 .../TARGET_VK_RZ_A1H/device/nvic_wrapper.c | 0 .../TARGET_VK_RZ_A1H/device/pl310.c | 0 .../TARGET_VK_RZ_A1H/device/pl310.h | 0 .../TARGET_VK_RZ_A1H/device/system_VKRZA1H.c | 0 .../TARGET_VK_RZ_A1H/device/system_VKRZA1H.h | 0 .../TARGET_VK_RZ_A1H/ethernet_api.c | 0 .../TARGET_VK_RZ_A1H/gpio_api.c | 0 .../TARGET_VK_RZ_A1H/gpio_irq_api.c | 0 .../TARGET_VK_RZ_A1H/i2c_api.c | 0 .../TARGET_VK_RZ_A1H/objects.h | 0 .../TARGET_VK_RZ_A1H/pinmap.c | 0 .../TARGET_VK_RZ_A1H/port_api.c | 0 .../TARGET_VK_RZ_A1H/pwmout_api.c | 0 .../TARGET_VK_RZ_A1H/rtc_api.c | 0 .../TARGET_VK_RZ_A1H/serial_api.c | 0 .../TARGET_VK_RZ_A1H/spi_api.c | 0 .../TARGET_VK_RZ_A1H/us_ticker.c | 0 .../common}/RZ_A1_Init.h | 0 .../common}/cmsis_nvic.h | 0 .../common}/dev_drv.h | 0 .../common}/nvic_wrapper.h | 0 .../common}/r_typedefs.h | 16 +- .../common}/rza_io_regrw.c | 0 .../common}/rza_io_regrw.h | 0 .../common}/vfp_neon_push_pop.h | 0 .../ethernetext_api.h | 0 .../gpio_addrdefine.h | 0 .../gpio_object.h | 0 .../TARGET_VK_RZ_A1H/device/RZ_A1_Init.h | 71 ------- .../TARGET_VK_RZ_A1H/device/cmsis_nvic.h | 48 ----- .../TARGET_VK_RZ_A1H/device/dev_drv.h | 85 -------- .../device/inc/rza_io_regrw.h | 83 -------- .../TARGET_VK_RZ_A1H/device/nvic_wrapper.h | 84 -------- .../TARGET_VK_RZ_A1H/device/r_typedefs.h | 61 ------ .../TARGET_VK_RZ_A1H/device/rza_io_regrw.c | 200 ------------------ .../TARGET_VK_RZ_A1H/ethernetext_api.h | 20 -- .../TARGET_VK_RZ_A1H/gpio_addrdefine.h | 22 -- .../TARGET_VK_RZ_A1H/gpio_object.h | 51 ----- 201 files changed, 8 insertions(+), 733 deletions(-) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/PeripheralNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/PinNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/PortNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H/reserved_pins.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/analogin_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/can_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/MBRZA1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/RZ_A1_Init.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/MBRZA1H.sct (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/MBRZA1H.icf (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/startup_RZA1H.S (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/cmsis.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/cmsis_nvic.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/RZ_A1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/adc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/bsc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/ceu_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/cpg_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/disc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/dmac_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/ether_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/flctl_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/gpio_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/ieb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/inb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/intc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/iodefine_typedef.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/irda_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/jcu_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/l2c_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/lin_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/lvds_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/mlb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/mmc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/ostm_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/pfv_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/pwm_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/riic_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/romdec_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/rspi_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/rtc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/scif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/scim_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/scux_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/sdg_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/spdif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/ssif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/usb20_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/iodefines/wdt_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/inc/reg32_t.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/mbed_sf_boot.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/mmu_RZ_A1H.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/nvic_wrapper.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/os_tick_ostm.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/system_RZ_A1H.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/device/system_RZ_A1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/ethernet_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/gpio_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/gpio_irq_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/i2c_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/objects.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/pinmap.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/port_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/pwmout_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/rtc_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/serial_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/spi_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_RZ_A1H/us_ticker.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/PeripheralNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/PinNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/PortNames.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/TARGET_MBED_VKRZA1H/reserved_pins.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/analogin_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/can_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/RZ_A1_Init.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/VKRZA1H.sct (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_VKRZA1H.S (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/VKRZA1H.icf (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/startup_VKRZA1H.S (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/VKRZA1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/cmsis.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/cmsis_nvic.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/gic.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/gic.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/adc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/bsc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/ceu_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/cpg_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/disc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/dmac_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/ether_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/flctl_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/gpio_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/ieb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/inb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/intc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/irda_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/jcu_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/l2c_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/lin_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/lvds_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/mlb_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/mmc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/ostm_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/pfv_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/pwm_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/riic_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/romdec_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/rspi_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/rtc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/scif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/scim_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/scux_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/sdg_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/spdif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/ssif_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/usb20_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/iodefines/wdt_iodefine.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/inc/reg32_t.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/mmu_Renesas_RZ_A1.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/nvic_wrapper.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/pl310.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/pl310.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/system_VKRZA1H.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/device/system_VKRZA1H.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/ethernet_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/gpio_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/gpio_irq_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/i2c_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/objects.h (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/pinmap.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/port_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/pwmout_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/rtc_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/serial_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/spi_api.c (100%) rename targets/TARGET_RENESAS/{ => TARGET_RZ_A1XX}/TARGET_VK_RZ_A1H/us_ticker.c (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/RZ_A1_Init.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/cmsis_nvic.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/dev_drv.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/nvic_wrapper.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/r_typedefs.h (98%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/rza_io_regrw.c (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device/inc => TARGET_RZ_A1XX/common}/rza_io_regrw.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H/device => TARGET_RZ_A1XX/common}/vfp_neon_push_pop.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H => TARGET_RZ_A1XX}/ethernetext_api.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H => TARGET_RZ_A1XX}/gpio_addrdefine.h (100%) rename targets/TARGET_RENESAS/{TARGET_RZ_A1H => TARGET_RZ_A1XX}/gpio_object.h (100%) delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/dev_drv.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/rza_io_regrw.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/r_typedefs.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/rza_io_regrw.c delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernetext_api.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_addrdefine.h delete mode 100644 targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_object.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/PeripheralNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/PeripheralNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/PinNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PinNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/PinNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PinNames.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/PortNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/PortNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H/reserved_pins.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H/reserved_pins.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H/reserved_pins.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/TARGET_MBED_MBRZA1H/reserved_pins.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/analogin_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/analogin_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/analogin_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/analogin_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/can_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/can_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/can_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/can_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/MBRZA1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/MBRZA1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/MBRZA1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/MBRZA1H.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/RZ_A1_Init.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/RZ_A1_Init.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/RZ_A1_Init.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/RZ_A1_Init.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/MBRZA1H.sct b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/MBRZA1H.sct similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/MBRZA1H.sct rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/MBRZA1H.sct diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/mem_RZ_A1H.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_RZ_A1H.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/sys.cpp rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_RZ1AH.S diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/MBRZA1H.icf b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/MBRZA1H.icf similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/MBRZA1H.icf rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/MBRZA1H.icf diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/startup_RZA1H.S b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/startup_RZA1H.S similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/startup_RZA1H.S rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/TOOLCHAIN_IAR/startup_RZA1H.S diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/cmsis.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/cmsis.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis_nvic.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/cmsis_nvic.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis_nvic.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/cmsis_nvic.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/RZ_A1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/RZ_A1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/RZ_A1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/RZ_A1H.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/adc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/adc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/adc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/adc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/bsc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/bsc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/bsc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/bsc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ceu_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ceu_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ceu_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ceu_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/cpg_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/cpg_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/cpg_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/cpg_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/disc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/disc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/disc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/disc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/dmac_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/dmac_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/dmac_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/dmac_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ether_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ether_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ether_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ether_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/flctl_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/flctl_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/flctl_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/flctl_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/gpio_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/gpio_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/gpio_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/gpio_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ieb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ieb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ieb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ieb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/inb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/inb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/inb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/inb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/intc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/intc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/intc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/intc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/iodefine_typedef.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/iodefine_typedef.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/iodefine_typedef.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/iodefine_typedef.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/irda_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/irda_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/irda_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/irda_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/jcu_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/jcu_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/jcu_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/jcu_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/l2c_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/l2c_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/l2c_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/l2c_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/lin_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/lin_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/lin_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/lin_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/lvds_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/lvds_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/lvds_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/lvds_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mlb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mlb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mlb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mlb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mmc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mmc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mmc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mmc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ostm_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ostm_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ostm_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ostm_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/pfv_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/pfv_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/pfv_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/pfv_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/pwm_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/pwm_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/pwm_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/pwm_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/riic_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/riic_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/riic_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/riic_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/romdec_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/romdec_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/romdec_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/romdec_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rspi_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rspi_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rspi_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rspi_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rtc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rtc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/rtc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/rtc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scim_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scim_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scim_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scim_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scux_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scux_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/scux_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/scux_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/sdg_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/sdg_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/sdg_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/sdg_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/spdif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/spdif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/spdif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/spdif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ssif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ssif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/ssif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/ssif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/usb20_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/usb20_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/usb20_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/usb20_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/wdt_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/wdt_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/iodefines/wdt_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/iodefines/wdt_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/reg32_t.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/reg32_t.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/reg32_t.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/inc/reg32_t.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/mbed_sf_boot.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/mbed_sf_boot.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/mbed_sf_boot.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/mbed_sf_boot.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/mmu_RZ_A1H.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/mmu_RZ_A1H.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/mmu_RZ_A1H.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/mmu_RZ_A1H.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/nvic_wrapper.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/nvic_wrapper.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/nvic_wrapper.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/nvic_wrapper.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/os_tick_ostm.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/os_tick_ostm.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/os_tick_ostm.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/os_tick_ostm.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/system_RZ_A1H.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/system_RZ_A1H.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/system_RZ_A1H.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/system_RZ_A1H.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/system_RZ_A1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/system_RZ_A1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/system_RZ_A1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/device/system_RZ_A1H.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/ethernet_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/ethernet_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/ethernet_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/ethernet_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_irq_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_irq_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_irq_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_irq_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/i2c_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/i2c_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/i2c_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/i2c_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/objects.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/objects.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/pinmap.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/pinmap.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/port_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/port_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/pwmout_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pwmout_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/pwmout_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pwmout_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/rtc_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/rtc_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/serial_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/serial_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/serial_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/serial_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/spi_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/spi_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/spi_api.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/us_ticker.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/us_ticker.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/us_ticker.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/us_ticker.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PeripheralNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PeripheralNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PinNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PinNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PinNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PinNames.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PortNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PortNames.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/PortNames.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PortNames.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/TARGET_MBED_VKRZA1H/reserved_pins.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/TARGET_MBED_VKRZA1H/reserved_pins.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/TARGET_MBED_VKRZA1H/reserved_pins.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/TARGET_MBED_VKRZA1H/reserved_pins.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/analogin_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/analogin_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/can_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/can_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/RZ_A1_Init.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/RZ_A1_Init.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/VKRZA1H.sct b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/VKRZA1H.sct similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/VKRZA1H.sct rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/VKRZA1H.sct diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_VKRZA1H.S b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_VKRZA1H.S similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_VKRZA1H.S rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_ARM_STD/startup_VKRZA1H.S diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/VKRZA1H.ld diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_GCC_ARM/startup_VKRZ1AH.S diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/VKRZA1H.icf b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/VKRZA1H.icf similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/VKRZA1H.icf rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/VKRZA1H.icf diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/startup_VKRZA1H.S b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/startup_VKRZA1H.S similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/startup_VKRZA1H.S rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/TOOLCHAIN_IAR/startup_VKRZA1H.S diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/VKRZA1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/VKRZA1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/VKRZA1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/VKRZA1H.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/cmsis.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/cmsis.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/cmsis_nvic.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/cmsis_nvic.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/gic.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/gic.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/gic.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/gic.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/gic.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/gic.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/gic.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/gic.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/bsc_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/cpg_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/dmac_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/gpio_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/intc_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/mtu2_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/ostm_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/riic_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/rspi_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/scif_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iobitmasks/usb_iobitmask.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/adc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/adc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/adc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/adc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/bsc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/bsc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/bsc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/bsc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ceu_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ceu_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ceu_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ceu_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/cpg_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/cpg_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/cpg_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/cpg_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/disc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/disc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/disc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/disc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/dmac_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/dmac_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/dmac_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/dmac_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/dvdec_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ether_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ether_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ether_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ether_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/flctl_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/flctl_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/flctl_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/flctl_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/gpio_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/gpio_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/gpio_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/gpio_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ieb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ieb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ieb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ieb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/inb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/inb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/inb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/inb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/intc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/intc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/intc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/intc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/irda_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/irda_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/irda_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/irda_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/jcu_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/jcu_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/jcu_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/jcu_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/l2c_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/l2c_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/l2c_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/l2c_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/lin_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/lin_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/lin_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/lin_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/lvds_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/lvds_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/lvds_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/lvds_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mlb_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mlb_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mlb_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mlb_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mmc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mmc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mmc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mmc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/mtu2_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ostm_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ostm_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ostm_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ostm_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/pfv_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/pfv_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/pfv_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/pfv_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/pwm_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/pwm_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/pwm_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/pwm_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/riic_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/riic_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/riic_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/riic_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/romdec_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/romdec_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/romdec_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/romdec_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rscan0_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rspi_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rspi_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rspi_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rspi_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rtc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rtc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/rtc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/rtc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scim_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scim_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scim_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scim_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scux_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scux_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/scux_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/scux_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/sdg_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/sdg_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/sdg_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/sdg_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/spdif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/spdif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/spdif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/spdif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/spibsc_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ssif_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ssif_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/ssif_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/ssif_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/usb20_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/usb20_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/usb20_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/usb20_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/vdc5_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/wdt_iodefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/wdt_iodefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/iodefines/wdt_iodefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/iodefines/wdt_iodefine.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/reg32_t.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/reg32_t.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/reg32_t.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/inc/reg32_t.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/mmu_Renesas_RZ_A1.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/mmu_Renesas_RZ_A1.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/mmu_Renesas_RZ_A1.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/mmu_Renesas_RZ_A1.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/nvic_wrapper.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/nvic_wrapper.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/pl310.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/pl310.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/pl310.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/pl310.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/pl310.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/pl310.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/pl310.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/pl310.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/system_VKRZA1H.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/system_VKRZA1H.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/system_VKRZA1H.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/system_VKRZA1H.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/system_VKRZA1H.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/system_VKRZA1H.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/system_VKRZA1H.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/device/system_VKRZA1H.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernet_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernet_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_irq_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_irq_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/i2c_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/i2c_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/objects.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/objects.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/objects.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/objects.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/pinmap.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/pinmap.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/port_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/port_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/port_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/port_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/pwmout_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/pwmout_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/rtc_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/rtc_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/rtc_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/rtc_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/serial_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/serial_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/spi_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/us_ticker.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/us_ticker.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/RZ_A1_Init.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/RZ_A1_Init.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/RZ_A1_Init.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/RZ_A1_Init.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis_nvic.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/cmsis_nvic.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/cmsis_nvic.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/cmsis_nvic.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/dev_drv.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/dev_drv.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/dev_drv.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/dev_drv.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/nvic_wrapper.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/nvic_wrapper.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/nvic_wrapper.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/nvic_wrapper.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/r_typedefs.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/r_typedefs.h similarity index 98% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/r_typedefs.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/r_typedefs.h index 188c22218d..158c75cf54 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/r_typedefs.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/r_typedefs.h @@ -35,18 +35,18 @@ Includes , "Project Includes" #include #include #include - #if defined(__ARM_NEON__) - #include - -#else /* __ARM_NEON__ */ - -typedef float float32_t; -typedef double float64_t; - #endif /* __ARM_NEON__ */ +#ifndef float32_t +typedef float float32_t; +#endif +#ifndef float64_t +typedef double float64_t; +#endif + + /****************************************************************************** Typedef definitions ******************************************************************************/ diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/rza_io_regrw.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/rza_io_regrw.c similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/rza_io_regrw.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/rza_io_regrw.c diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/rza_io_regrw.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/rza_io_regrw.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/inc/rza_io_regrw.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/rza_io_regrw.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/vfp_neon_push_pop.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/vfp_neon_push_pop.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/device/vfp_neon_push_pop.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/common/vfp_neon_push_pop.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/ethernetext_api.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/ethernetext_api.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/ethernetext_api.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/ethernetext_api.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_addrdefine.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_addrdefine.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_addrdefine.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_addrdefine.h diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_object.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_object.h similarity index 100% rename from targets/TARGET_RENESAS/TARGET_RZ_A1H/gpio_object.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_object.h diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.h deleted file mode 100644 index 323884e05e..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/RZ_A1_Init.h +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/**************************************************************************//** -* @file RZ_A1_Init.h -* $Rev: 531 $ -* $Date:: 2013-04-16 13:07:35 +0900#$ -* @brief RZ_A1 Initialize -******************************************************************************/ - -#ifndef RZ_A1_INIT_H -#define RZ_A1_INIT_H - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ -#include -#include -#include "iodefine.h" - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/****************************************************************************** -Typedef definitions -******************************************************************************/ - -/****************************************************************************** -Macro definitions -******************************************************************************/ - -/****************************************************************************** -Variable Externs -******************************************************************************/ - -/****************************************************************************** -Functions Prototypes -******************************************************************************/ - -void RZ_A1_SetSramWriteEnable(void); -void RZ_A1_InitClock(void); -int RZ_A1_IsClockMode0(void); -void RZ_A1_InitBus(void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* RZ_A1_INIT_H */ diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.h deleted file mode 100644 index aa87423909..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/cmsis_nvic.h +++ /dev/null @@ -1,48 +0,0 @@ -/* mbed Microcontroller Library - * CMSIS-style functionality to support dynamic vectors - ******************************************************************************* - * Copyright (c) 2015 ARM Limited. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of ARM Limited nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ - -#ifndef MBED_CMSIS_NVIC_H -#define MBED_CMSIS_NVIC_H - -#include "cmsis.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); -uint32_t NVIC_GetVector(IRQn_Type IRQn); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/dev_drv.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/dev_drv.h deleted file mode 100644 index deb2ebbc13..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/dev_drv.h +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/****************************************************************************** -* File Name : dev_drv.h -* $Rev: 809 $ -* $Date:: 2014-04-09 15:06:36 +0900#$ -* Description : Device driver header -******************************************************************************/ -#ifndef DEV_DRV_H -#define DEV_DRV_H - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ - - -/****************************************************************************** -Typedef definitions -******************************************************************************/ - - -/****************************************************************************** -Macro definitions -******************************************************************************/ -/* ==== Arguments, Return values ==== */ -#define DEVDRV_SUCCESS (0) /* Success */ -#define DEVDRV_ERROR (-1) /* Failure */ - -/* ==== Flags ==== */ -#define DEVDRV_FLAG_OFF (0) /* Flag OFF */ -#define DEVDRV_FLAG_ON (1) /* Flag ON */ - -/* ==== Channels ==== */ -typedef enum devdrv_ch -{ - DEVDRV_CH_0, /* Channel 0 */ - DEVDRV_CH_1, /* Channel 1 */ - DEVDRV_CH_2, /* Channel 2 */ - DEVDRV_CH_3, /* Channel 3 */ - DEVDRV_CH_4, /* Channel 4 */ - DEVDRV_CH_5, /* Channel 5 */ - DEVDRV_CH_6, /* Channel 6 */ - DEVDRV_CH_7, /* Channel 7 */ - DEVDRV_CH_8, /* Channel 8 */ - DEVDRV_CH_9, /* Channel 9 */ - DEVDRV_CH_10, /* Channel 10 */ - DEVDRV_CH_11, /* Channel 11 */ - DEVDRV_CH_12, /* Channel 12 */ - DEVDRV_CH_13, /* Channel 13 */ - DEVDRV_CH_14, /* Channel 14 */ - DEVDRV_CH_15 /* Channel 15 */ -} devdrv_ch_t; - -/****************************************************************************** -Variable Externs -******************************************************************************/ - - -/****************************************************************************** -Functions Prototypes -******************************************************************************/ - -#endif /* DEV_DRV_H */ - -/* End of File */ diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/rza_io_regrw.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/rza_io_regrw.h deleted file mode 100644 index 5f0fec64dd..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/inc/rza_io_regrw.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/******************************************************************************* -* File Name : rza_io_regrw.h -* $Rev: 1135 $ -* $Date:: 2014-08-08 10:11:30 +0900#$ -* Description : Low level register read/write header -*******************************************************************************/ -#ifndef RZA_IO_REGRW_H -#define RZA_IO_REGRW_H - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ -/* ==== includes each bit mask header ==== */ -#include "cpg_iobitmask.h" -#include "intc_iobitmask.h" -#include "bsc_iobitmask.h" -#include "dmac_iobitmask.h" -#include "mtu2_iobitmask.h" -#include "ostm_iobitmask.h" -#include "scif_iobitmask.h" -#include "rspi_iobitmask.h" -#include "riic_iobitmask.h" -#include "usb_iobitmask.h" -#include "gpio_iobitmask.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** -Typedef definitions -******************************************************************************/ - - -/****************************************************************************** -Macro definitions -******************************************************************************/ - - -/****************************************************************************** -Variable Externs -******************************************************************************/ - - -/****************************************************************************** -Functions Prototypes -******************************************************************************/ -void RZA_IO_RegWrite_8 (volatile uint8_t * ioreg, uint8_t write_value, uint8_t shift, uint8_t mask); -void RZA_IO_RegWrite_16(volatile uint16_t * ioreg, uint16_t write_value, uint16_t shift, uint16_t mask); -void RZA_IO_RegWrite_32(volatile uint32_t * ioreg, uint32_t write_value, uint32_t shift, uint32_t mask); -uint8_t RZA_IO_RegRead_8 (volatile uint8_t * ioreg, uint8_t shift, uint8_t mask); -uint16_t RZA_IO_RegRead_16 (volatile uint16_t * ioreg, uint16_t shift, uint16_t mask); -uint32_t RZA_IO_RegRead_32 (volatile uint32_t * ioreg, uint32_t shift, uint32_t mask); - -#ifdef __cplusplus -} -#endif - -#endif /* RZA_IO_REGRW_H */ - -/* End of File */ diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.h deleted file mode 100644 index fcdf554bb8..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/nvic_wrapper.h +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2015 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/**************************************************************************//** -* @file nvic_wrapper.h -* $Rev: $ -* $Date:: $ -* @brief Wrapper between NVIC(for Cortex-M) and GIC(for Cortex-A9) -******************************************************************************/ - -#ifndef NVIC_WRAPPER_H -#define NVIC_WRAPPER_H - - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - - -/****************************************************************************** -Typedef definitions -******************************************************************************/ - -/****************************************************************************** -Macro definitions -******************************************************************************/ - -/****************************************************************************** -Variable Externs -******************************************************************************/ - -/****************************************************************************** -Functions Prototypes -******************************************************************************/ - -/* NVIC functions */ -void NVIC_SetPriorityGrouping(uint32_t PriorityGroup); -uint32_t NVIC_GetPriorityGrouping(void); -void NVIC_EnableIRQ(IRQn_Type IRQn); -void NVIC_DisableIRQ(IRQn_Type IRQn); -uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn); -void NVIC_SetPendingIRQ(IRQn_Type IRQn); -void NVIC_ClearPendingIRQ(IRQn_Type IRQn); -uint32_t NVIC_GetActive(IRQn_Type IRQn); -void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority); -uint32_t NVIC_GetPriority(IRQn_Type IRQn); -uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority); -void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority); -void NVIC_SystemReset(void); -/* SysTick function */ -uint32_t SysTick_Config(uint32_t ticks); -/* Debug In/Output function */ -uint32_t ITM_SendChar (uint32_t ch); -int32_t ITM_ReceiveChar (void); -int32_t ITM_CheckChar (void); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* NVIC_WRAPPER_H */ diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/r_typedefs.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/r_typedefs.h deleted file mode 100644 index 188c22218d..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/r_typedefs.h +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2013 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/******************************************************************************* -* File Name : r_typedefs.h -* $Rev: 788 $ -* $Date:: 2014-04-07 18:57:13 +0900#$ -* Description : basic type definition -******************************************************************************/ -#ifndef R_TYPEDEFS_H -#define R_TYPEDEFS_H - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ -#include -#include -#include - -#if defined(__ARM_NEON__) - -#include - -#else /* __ARM_NEON__ */ - -typedef float float32_t; -typedef double float64_t; - -#endif /* __ARM_NEON__ */ - -/****************************************************************************** -Typedef definitions -******************************************************************************/ -typedef char char_t; -typedef int bool_t; -typedef int int_t; -typedef long double float128_t; -typedef signed long long_t; -typedef unsigned long ulong_t; - -#endif /* R_TYPEDEFS_H */ - diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/rza_io_regrw.c b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/rza_io_regrw.c deleted file mode 100644 index f919fa8c8b..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/device/rza_io_regrw.c +++ /dev/null @@ -1,200 +0,0 @@ -/******************************************************************************* -* DISCLAIMER -* This software is supplied by Renesas Electronics Corporation and is only -* intended for use with Renesas products. No other uses are authorized. This -* software is owned by Renesas Electronics Corporation and is protected under -* all applicable laws, including copyright laws. -* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING -* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT -* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. -* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS -* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE -* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR -* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE -* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* Renesas reserves the right, without notice, to make changes to this software -* and to discontinue the availability of this software. By using this software, -* you agree to the additional terms and conditions found by accessing the -* following link: -* http://www.renesas.com/disclaimer -* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved. -*******************************************************************************/ -/******************************************************************************* -* File Name : rza_io_regrw.c -* $Rev: 1121 $ -* $Date:: 2014-08-06 17:09:53 +0900#$ -* Description : Low level register read/write -*******************************************************************************/ - -/****************************************************************************** -Includes , "Project Includes" -******************************************************************************/ -#include "r_typedefs.h" - -#ifdef __CC_ARM -#pragma arm section code = "CODE_IO_REGRW" -#pragma arm section rodata = "CONST_IO_REGRW" -#pragma arm section rwdata = "DATA_IO_REGRW" -#pragma arm section zidata = "BSS_IO_REGRW" -#endif - -/****************************************************************************** -Typedef definitions -******************************************************************************/ - - -/****************************************************************************** -Macro definitions -******************************************************************************/ - - -/****************************************************************************** -Imported global variables and functions (from other files) -******************************************************************************/ - - -/****************************************************************************** -Exported global variables and functions (to be accessed by other files) -******************************************************************************/ - - -/****************************************************************************** -Private global variables and functions -******************************************************************************/ - - -/****************************************************************************** -* Function Name: RZA_IO_RegWrite_8 -* Description : IO register 8-bit write -* Arguments : volatile uint8_t * ioreg : IO register for writing -* : : Use register definition name of the -* : : iodefine.h -* : uint8_t write_value : Write value for the IO register -* : uint8_t shift : The number of left shifts to the -* : : target bit -* : uint8_t mask : Mask value for the IO register -* : : (Target bit : "1") -* Return Value : None -******************************************************************************/ -void RZA_IO_RegWrite_8(volatile uint8_t * ioreg, uint8_t write_value, uint8_t shift, uint8_t mask) -{ - uint8_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & (~mask)) | (write_value << shift); /* Modify value */ - *ioreg = reg_value; /* Write to register */ -} - -/****************************************************************************** -* Function Name: RZA_IO_RegWrite_16 -* Description : IO register 16-bit write -* Arguments : volatile uint16_t * ioreg : IO register for writing -* : : Use register definition name of the -* : : iodefine.h -* : uint16_t write_value : Write value for the IO register -* : uint16_t shift : The number of left shifts to the -* : : target bit -* : uint16_t mask : Mask value for the IO register -* : : (Target bit : "1") -* Return Value : None -******************************************************************************/ -void RZA_IO_RegWrite_16(volatile uint16_t * ioreg, uint16_t write_value, uint16_t shift, uint16_t mask) -{ - uint16_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & (~mask)) | (write_value << shift); /* Modify value */ - *ioreg = reg_value; /* Write to register */ -} - -/****************************************************************************** -* Function Name: RZA_IO_RegWrite_32 -* Description : IO register 32-bit write -* Arguments : volatile uint32_t * ioreg : IO register for writing -* : : Use register definition name of the -* : : iodefine.h -* : uint32_t write_value : Write value for the IO register -* : uint32_t shift : The number of left shifts to the -* : : target bit -* : uint32_t mask : Mask value for the IO register -* : : (Target bit : "1") -* Return Value : None -******************************************************************************/ -void RZA_IO_RegWrite_32(volatile uint32_t * ioreg, uint32_t write_value, uint32_t shift, uint32_t mask) -{ - uint32_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & (~mask)) | (write_value << shift); /* Modify value */ - *ioreg = reg_value; /* Write to register */ -} - -/****************************************************************************** -* Function Name: RZA_IO_RegRead_8 -* Description : IO register 8-bit read -* Arguments : volatile uint8_t * ioreg : IO register for reading -* : : Use register definition name of the -* : : iodefine.h -* : uint8_t shift : The number of right shifts to the -* : : target bit -* : uint8_t mask : Mask bit for the IO register -* : : (Target bit: "1") -* Return Value : uint8_t : Value of the obtained target bit -******************************************************************************/ -uint8_t RZA_IO_RegRead_8(volatile uint8_t * ioreg, uint8_t shift, uint8_t mask) -{ - uint8_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & mask) >> shift; /* Clear other bit and Bit shift */ - - return reg_value; -} - -/****************************************************************************** -* Function Name: RZA_IO_RegRead_16 -* Description : IO register 16-bit read -* Arguments : volatile uint16_t * ioreg : IO register for reading -* : : Use register definition name of the -* : : iodefine.h -* : uint16_t shift : The number of right shifts to the -* : : target bit -* : uint16_t mask : Mask bit for the IO register -* : : (Target bit: "1") -* Return Value : uint16_t : Value of the obtained target bit -******************************************************************************/ -uint16_t RZA_IO_RegRead_16(volatile uint16_t * ioreg, uint16_t shift, uint16_t mask) -{ - uint16_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & mask) >> shift; /* Clear other bit and Bit shift */ - - return reg_value; -} - -/****************************************************************************** -* Function Name: RZA_IO_RegRead_32 -* Description : IO register 32-bit read -* Arguments : volatile uint32_t * ioreg : IO register for reading -* : : Use register definition name of the -* : : iodefine.h -* : uint32_t shift : The number of right shifts to the -* : : target bit -* : uint32_t mask : Mask bit for the IO register -* : : (Target bit: "1") -* Return Value : uint32_t : Value of the obtained target bit -******************************************************************************/ -uint32_t RZA_IO_RegRead_32(volatile uint32_t * ioreg, uint32_t shift, uint32_t mask) -{ - uint32_t reg_value; - - reg_value = *ioreg; /* Read from register */ - reg_value = (reg_value & mask) >> shift; /* Clear other bit and Bit shift */ - - return reg_value; -} - - -/* End of File */ diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernetext_api.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernetext_api.h deleted file mode 100644 index 18dfa2109e..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/ethernetext_api.h +++ /dev/null @@ -1,20 +0,0 @@ - -/* PHY link mode */ -#define NEGO_FAIL (0) -#define HALF_10M (1) -#define FULL_10M (2) -#define HALF_TX (3) -#define FULL_TX (4) - -typedef void (ethernetext_cb_fnc)(void); - -typedef struct tag_ethernet_cfg { - int int_priority; - ethernetext_cb_fnc *recv_cb; - char *ether_mac; -} ethernet_cfg_t; - -extern int ethernetext_init(ethernet_cfg_t *p_ethcfg); -extern void ethernetext_start_stop(int32_t mode); -extern int ethernetext_chk_link_mode(void); -extern void ethernetext_set_link_mode(int32_t link); diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_addrdefine.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_addrdefine.h deleted file mode 100644 index 3865c03ec2..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_addrdefine.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __GPIO_ADDRDEFINE__ -#define __GPIO_ADDRDEFINE__ - -#define GPIO_BASE ((long)0xFCFE3000uL) /* GPIO */ - -#define PORT(n) (volatile unsigned short *)(GPIO_BASE + 0x000 + ((n)*4)) -#define PSR(n) (volatile unsigned long *)(GPIO_BASE + 0x100 + ((n)*4)) -#define PPR(n) (volatile unsigned short *)(GPIO_BASE + 0x200 + ((n)*4)) -#define PM(n) (volatile unsigned short *)(GPIO_BASE + 0x300 + ((n)*4)) -#define PMC(n) (volatile unsigned short *)(GPIO_BASE + 0x400 + ((n)*4)) -#define PFC(n) (volatile unsigned short *)(GPIO_BASE + 0x500 + ((n)*4)) -#define PFCE(n) (volatile unsigned short *)(GPIO_BASE + 0x600 + ((n)*4)) -#define PNOT(n) (volatile unsigned short *)(GPIO_BASE + 0x700 + ((n)*4)) -#define PMSR(n) (volatile unsigned long *)(GPIO_BASE + 0x800 + ((n)*4)) -#define PMCSR(n) (volatile unsigned long *)(GPIO_BASE + 0x900 + ((n)*4)) -#define PFCAE(n) (volatile unsigned short *)(GPIO_BASE + 0xa00 + ((n)*4)) -#define PIBC(n) (volatile unsigned short *)(GPIO_BASE + 0x4000 +((n)*4)) -#define PBDC(n) (volatile unsigned short *)(GPIO_BASE + 0x4100 +((n)*4)) -#define PIPC(n) (volatile unsigned short *)(GPIO_BASE + 0x4200 +((n)*4)) - -#endif/*__GPIO_ADDRDEFINE__*/ - diff --git a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_object.h b/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_object.h deleted file mode 100644 index 211a4c870d..0000000000 --- a/targets/TARGET_RENESAS/TARGET_VK_RZ_A1H/gpio_object.h +++ /dev/null @@ -1,51 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#ifndef MBED_GPIO_OBJECT_H -#define MBED_GPIO_OBJECT_H - -#include "mbed_assert.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - PinName pin; - uint32_t mask; - - __IO uint32_t *reg_dir; - __IO uint32_t *reg_set; - __I uint32_t *reg_in; - __IO uint32_t *reg_buf; -} gpio_t; - -static inline void gpio_write(gpio_t *obj, int value) { - *obj->reg_set = (obj->mask << 16) | ((value != 0) ? obj->mask : 0); -} - -static inline int gpio_read(gpio_t *obj) { - return ((*obj->reg_in & obj->mask) ? 1 : 0); -} - -static inline int gpio_is_connected(const gpio_t *obj) { - return obj->pin != (PinName)NC; -} - -#ifdef __cplusplus -} -#endif - -#endif From 73a5c55010985d1636e9945d957172c076022d34 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 9 Jan 2018 18:20:50 +0900 Subject: [PATCH 127/133] Commonalize the files in "targets/TARGET_RENESAS/TARGET_RZ_A1XX" directory I made be available in common whatever the board related to RZ_A1 in the below files. - Since there are the table code of Pinmap differs for each board, I moved the code to "PeripheralPins" file for each board, and changed to include PeripheralPins.h. analogin_api.c, can_api.c, gpio_irq_api.c, i2c_api.c, pinmap.c, port_api.c, pwmout_api.c, serial_api.c, spi_api.c and us_ticker.c - Since there are some board-specific processes, I enclosed the processes with "#ifdef" and rearranged the functions to make be easier to enclose. can_api.c, ethernet_api.c and serial_api.c - Since there are the driver configuration values differs for each board, I added "mbed_drv_cfg.h" file for each board and defined macros for the values, and changed to refer to the macros. can_api.c, gpio_api.c, pwmout_api.c and rtc_api.c --- .../TARGET_RZ_A1XX/PeripheralPins.h | 64 + .../TARGET_RZ_A1H/PeripheralNames.h | 106 +- .../TARGET_RZ_A1H/PeripheralPins.c | 343 ++++++ .../TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h | 9 +- .../TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c | 57 - .../TARGET_RZ_A1H/mbed_drv_cfg.h | 19 + .../TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h | 84 -- .../TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c | 172 --- .../TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c | 65 - .../TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c | 378 ------ .../TARGET_VK_RZ_A1H/PeripheralNames.h | 129 +- .../TARGET_VK_RZ_A1H/PeripheralPins.c | 540 +++++++++ .../TARGET_VK_RZ_A1H/analogin_api.c | 133 --- .../TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c | 1042 ----------------- .../TARGET_VK_RZ_A1H/ethernet_api.c | 695 ----------- .../TARGET_VK_RZ_A1H/gpio_irq_api.c | 223 ---- .../TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c | 760 ------------ .../TARGET_VK_RZ_A1H/mbed_drv_cfg.h | 19 + .../TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c | 192 --- .../TARGET_VK_RZ_A1H/pwmout_api.c | 700 ----------- .../TARGET_VK_RZ_A1H/serial_api.c | 672 ----------- .../TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c | 343 ------ .../TARGET_VK_RZ_A1H/us_ticker.c | 136 --- .../{TARGET_RZ_A1H => }/analogin_api.c | 17 +- .../{TARGET_RZ_A1H => }/can_api.c | 349 +++--- .../{TARGET_RZ_A1H => }/ethernet_api.c | 41 +- .../{TARGET_VK_RZ_A1H => }/gpio_api.c | 3 +- .../{TARGET_RZ_A1H => }/gpio_irq_api.c | 40 +- .../{TARGET_RZ_A1H => }/i2c_api.c | 21 +- .../{TARGET_VK_RZ_A1H => }/objects.h | 2 +- .../TARGET_RENESAS/TARGET_RZ_A1XX/pinmap.c | 74 ++ .../{TARGET_VK_RZ_A1H => }/port_api.c | 25 +- .../{TARGET_RZ_A1H => }/pwmout_api.c | 270 ++--- .../{TARGET_VK_RZ_A1H => }/rtc_api.c | 11 +- .../{TARGET_RZ_A1H => }/serial_api.c | 417 +++---- .../{TARGET_RZ_A1H => }/spi_api.c | 131 +-- .../{TARGET_RZ_A1H => }/us_ticker.c | 4 +- 37 files changed, 1699 insertions(+), 6587 deletions(-) create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/PeripheralPins.h create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralPins.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralPins.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c delete mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/analogin_api.c (89%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/can_api.c (95%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/ethernet_api.c (95%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_VK_RZ_A1H => }/gpio_api.c (96%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/gpio_irq_api.c (77%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/i2c_api.c (98%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_VK_RZ_A1H => }/objects.h (98%) create mode 100644 targets/TARGET_RENESAS/TARGET_RZ_A1XX/pinmap.c rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_VK_RZ_A1H => }/port_api.c (86%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/pwmout_api.c (71%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_VK_RZ_A1H => }/rtc_api.c (98%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/serial_api.c (77%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/spi_api.c (89%) rename targets/TARGET_RENESAS/TARGET_RZ_A1XX/{TARGET_RZ_A1H => }/us_ticker.c (98%) diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/PeripheralPins.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/PeripheralPins.h new file mode 100644 index 0000000000..e25ceb20e1 --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/PeripheralPins.h @@ -0,0 +1,64 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2015 ARM Limited + * + * 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. + */ + +#ifndef MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +typedef struct { + PinName pin; + int function; + int pm; +} PinFunc; + +/************IRQ***************/ +extern const PinMap PinMap_IRQ[]; + +/************PINMAP***************/ +extern const PinFunc PIPC_0_tbl[]; + +/************ADC***************/ +extern const PinMap PinMap_ADC[]; + +/************DAC***************/ +extern const PinMap PinMap_DAC[]; + +/************I2C***************/ +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +/************UART***************/ +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; +extern const PinMap PinMap_UART_CTS[]; +extern const PinMap PinMap_UART_RTS[]; + +/************SPI***************/ +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SSEL[]; + +/************PWM***************/ +extern const PinMap PinMap_PWM[]; + +/************CAN***************/ +extern const PinMap PinMap_CAN_RD[]; +extern const PinMap PinMap_CAN_TD[]; + +#endif diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h index a1a385b36d..58806d5257 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralNames.h @@ -34,82 +34,31 @@ typedef enum { UART7, } UARTName; -// PWMType & 1 == 1 then have to use PWDTR[12] == 1 typedef enum { - PWM1A = 0, - PWM1B, - PWM1C, - PWM1D, - PWM1E, - PWM1F, - PWM1G, - PWM1H, - PWM2A = 0x10, - PWM2B, - PWM2C, - PWM2D, - PWM2E, - PWM2F, - PWM2G, - PWM2H, -} PWMType; - -typedef enum { - TIOC0A = 0, - TIOC0B, - TIOC0C, - TIOC0D, - TIOC1A = 0x10, - TIOC1B, - TIOC2A = 0x20, - TIOC2B, - TIOC3A = 0x30, - TIOC3B, - TIOC3C, - TIOC3D, - TIOC4A = 0x40, - TIOC4B, - TIOC4C, - TIOC4D, -} MTU2_PWMType; - -typedef enum { - PWM0_PIN = 0, - PWM1_PIN, - PWM2_PIN, - PWM3_PIN, - PWM4_PIN, - PWM5_PIN, - PWM6_PIN, - PWM7_PIN, - PWM8_PIN, - PWM9_PIN, - PWM10_PIN, - PWM11_PIN, - PWM12_PIN, - PWM13_PIN, - MTU2_PWM0_PIN = 0x20, - MTU2_PWM1_PIN, - MTU2_PWM2_PIN, - MTU2_PWM3_PIN, - MTU2_PWM4_PIN, - MTU2_PWM5_PIN, - MTU2_PWM6_PIN, - MTU2_PWM7_PIN, - MTU2_PWM8_PIN, - MTU2_PWM9_PIN, - MTU2_PWM10_PIN, - MTU2_PWM11_PIN, - MTU2_PWM12_PIN, - MTU2_PWM13_PIN, - MTU2_PWM14_PIN, - MTU2_PWM15_PIN, - MTU2_PWM16_PIN, - MTU2_PWM17_PIN, - MTU2_PWM18_PIN, - MTU2_PWM19_PIN, - MTU2_PWM20_PIN, - MTU2_PWM21_PIN, + PWM_PWM1A = 0, + PWM_PWM1B, + PWM_PWM1C, + PWM_PWM1D, + PWM_PWM1E, + PWM_PWM1F, + PWM_PWM1G, + PWM_PWM1H, + PWM_PWM2A, + PWM_PWM2B, + PWM_PWM2C, + PWM_PWM2D, + PWM_PWM2E, + PWM_PWM2F, + PWM_PWM2G, + PWM_PWM2H, + PWM_TIOC0A = 0x20, + PWM_TIOC0C, + PWM_TIOC1A, + PWM_TIOC2A, + PWM_TIOC3A, + PWM_TIOC3C, + PWM_TIOC4A, + PWM_TIOC4C, } PWMName; typedef enum { @@ -128,21 +77,22 @@ typedef enum { SPI_1, SPI_2, SPI_3, + SPI_4, } SPIName; typedef enum { I2C_0 = 0, I2C_1, I2C_2, - I2C_3 + I2C_3, } I2CName; typedef enum { CAN_0 = 0, CAN_1, CAN_2, - CAN_3, - CAN_4 + CAN_3, + CAN_4, } CANName; diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralPins.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralPins.c new file mode 100644 index 0000000000..bfc94f513a --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PeripheralPins.c @@ -0,0 +1,343 @@ + +/* mbed Microcontroller Library + * Copyright (c) 2006-2015 ARM Limited + * + * 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. + */ + +#include "PeripheralPins.h" + +/************IRQ***************/ +enum { + IRQ0,IRQ1, + IRQ2,IRQ3, + IRQ4,IRQ5, + IRQ6,IRQ7, +} IRQNo; +const PinMap PinMap_IRQ[] = { + {P1_0, IRQ0, 4}, {P1_1, IRQ1, 4}, {P1_2, IRQ2, 4}, + {P1_3, IRQ3, 4}, {P1_4, IRQ4, 4}, {P1_5, IRQ5, 4}, + {P1_6, IRQ6, 4}, {P1_7, IRQ7, 4}, {P1_8, IRQ2, 3}, + {P1_9, IRQ3, 3}, {P1_10, IRQ4, 3}, {P1_11, IRQ5, 3}, // 11 + {P2_0, IRQ5, 6}, {P2_12, IRQ6, 6}, {P2_13, IRQ7, 8}, + {P2_14, IRQ0, 8}, {P2_15, IRQ1, 8}, // 16 + {P3_0, IRQ2, 3}, {P3_1, IRQ6, 3}, {P3_3, IRQ4, 3}, + {P3_9, IRQ6, 8}, // 20 + {P4_8, IRQ0, 8}, {P4_9, IRQ1, 8}, {P4_10, IRQ2, 8}, + {P4_11, IRQ3, 8}, {P4_12, IRQ4, 8}, {P4_13, IRQ5, 8}, + {P4_14, IRQ6, 8}, {P4_15, IRQ7, 8}, // 28 + {P5_6, IRQ6, 6}, {P5_8, IRQ0, 2}, {P5_9, IRQ2, 4}, // 31 + {P6_0, IRQ5, 6}, {P6_1, IRQ4, 4}, {P6_2, IRQ7, 4}, + {P6_3, IRQ2, 4}, {P6_4, IRQ3, 4}, {P6_8, IRQ0, 8}, + {P6_9, IRQ1, 8}, {P6_10, IRQ2, 8}, {P6_11, IRQ3, 8}, + {P6_12, IRQ4, 8}, {P6_13, IRQ5, 8}, {P6_14, IRQ6, 8}, + {P6_15, IRQ7, 8}, // 44 + {P7_8, IRQ1, 8}, {P7_9, IRQ0, 8}, {P7_10, IRQ2, 8}, + {P7_11, IRQ3, 8}, {P7_12, IRQ4, 8}, {P7_13, IRQ5, 8}, + {P7_14, IRQ6, 8}, // 51 + {P8_2, IRQ0, 5}, {P8_3, IRQ1, 6}, {P8_7, IRQ5, 4}, + {P9_1, IRQ0, 4}, // 55 + {P11_12,IRQ3, 3}, {P11_15,IRQ1, 3}, // 57 + {NC, NC, 0} +}; + +/************PINMAP***************/ +const PinFunc PIPC_0_tbl[] = { +// pin func pm + {P4_0 , 2 , -1}, /* TIOC0A */ + {P5_0 , 6 , -1}, /* TIOC0A */ + {P7_0 , 7 , -1}, /* TIOC0A */ + {P10_4 , 2 , -1}, /* TIOC0A */ + {P4_1 , 2 , -1}, /* TIOC0B */ + {P5_1 , 6 , -1}, /* TIOC0B */ + {P7_1 , 7 , -1}, /* TIOC0B */ + {P10_5 , 2 , -1}, /* TIOC0B */ + {P4_2 , 2 , -1}, /* TIOC0C */ + {P5_5 , 6 , -1}, /* TIOC0C */ + {P7_2 , 7 , -1}, /* TIOC0C */ + {P10_6 , 2 , -1}, /* TIOC0C */ + {P4_3 , 2 , -1}, /* TIOC0D */ + {P5_7 , 6 , -1}, /* TIOC0D */ + {P7_3 , 7 , -1}, /* TIOC0D */ + {P10_7 , 2 , -1}, /* TIOC0D */ + {P2_11 , 5 , -1}, /* TIOC1A */ + {P6_0 , 5 , -1}, /* TIOC1A */ + {P7_4 , 7 , -1}, /* TIOC1A */ + {P8_8 , 5 , -1}, /* TIOC1A */ + {P9_7 , 4 , -1}, /* TIOC1A */ + {P10_8 , 2 , -1}, /* TIOC1A */ + {P2_12 , 8 , -1}, /* TIOC1B */ + {P5_2 , 6 , -1}, /* TIOC1B */ + {P6_1 , 5 , -1}, /* TIOC1B */ + {P7_5 , 7 , -1}, /* TIOC1B */ + {P8_9 , 5 , -1}, /* TIOC1B */ + {P10_9 , 2 , -1}, /* TIOC1B */ + {P2_1 , 6 , -1}, /* TIOC2A */ + {P6_2 , 6 , -1}, /* TIOC2A */ + {P7_6 , 7 , -1}, /* TIOC2A */ + {P8_14 , 4 , -1}, /* TIOC2A */ + {P10_10 , 2 , -1}, /* TIOC2A */ + {P2_2 , 6 , -1}, /* TIOC2B */ + {P6_3 , 6 , -1}, /* TIOC2B */ + {P7_7 , 7 , -1}, /* TIOC2B */ + {P8_15 , 4 , -1}, /* TIOC2B */ + {P10_11 , 2 , -1}, /* TIOC2B */ + {P10_11 , 2 , -1}, /* TIOC2B */ + {P3_4 , 6 , -1}, /* TIOC3A */ + {P7_8 , 7 , -1}, /* TIOC3A */ + {P8_10 , 4 , -1}, /* TIOC3A */ + {P3_5 , 6 , -1}, /* TIOC3B */ + {P7_9 , 7 , -1}, /* TIOC3B */ + {P8_11 , 4 , -1}, /* TIOC3B */ + {P3_6 , 6 , -1}, /* TIOC3C */ + {P5_3 , 6 , -1}, /* TIOC3C */ + {P7_10 , 7 , -1}, /* TIOC3C */ + {P8_12 , 4 , -1}, /* TIOC3C */ + {P3_7 , 6 , -1}, /* TIOC3D */ + {P5_4 , 6 , -1}, /* TIOC3D */ + {P7_11 , 7 , -1}, /* TIOC3D */ + {P8_13 , 4 , -1}, /* TIOC3D */ + {P3_8 , 6 , -1}, /* TIOC4A */ + {P4_4 , 3 , -1}, /* TIOC4A */ + {P7_12 , 7 , -1}, /* TIOC4A */ + {P11_0 , 2 , -1}, /* TIOC4A */ + {P3_9 , 6 , -1}, /* TIOC4B */ + {P4_5 , 3 , -1}, /* TIOC4B */ + {P7_13 , 7 , -1}, /* TIOC4B */ + {P11_1 , 2 , -1}, /* TIOC4B */ + {P3_10 , 6 , -1}, /* TIOC4C */ + {P4_6 , 3 , -1}, /* TIOC4C */ + {P7_14 , 7 , -1}, /* TIOC4C */ + {P11_2 , 2 , -1}, /* TIOC4C */ + {P3_11 , 6 , -1}, /* TIOC4D */ + {P4_7 , 3 , -1}, /* TIOC4D */ + {P7_15 , 7 , -1}, /* TIOC4D */ + {P11_3 , 2 , -1}, /* TIOC4D */ + {P5_7 , 1 , 1 }, /* TXOUT0M */ + {P5_6 , 1 , 1 }, /* TXOUT0P */ + {P5_5 , 1 , 1 }, /* TXOUT1M */ + {P5_4 , 1 , 1 }, /* TXOUT1P */ + {P5_3 , 1 , 1 }, /* TXOUT2M */ + {P5_2 , 1 , 1 }, /* TXOUT2P */ + {P5_1 , 1 , 1 }, /* TXCLKOUTM */ + {P5_0 , 1 , 1 }, /* TXCLKOUTP */ + {P2_11 , 4 , 0 }, /* SSITxD0 */ + {P4_7 , 5 , 0 }, /* SSITxD0 */ + {P7_4 , 6 , 0 }, /* SSITxD1 */ + {P10_15 , 2 , 0 }, /* SSITxD1 */ + {P4_15 , 6 , 0 }, /* SSITxD3 */ + {P7_11 , 2 , 0 }, /* SSITxD3 */ + {P2_7 , 4 , 0 }, /* SSITxD5 */ + {P4_11 , 5 , 0 }, /* SSITxD5 */ + {P8_10 , 8 , 0 }, /* SSITxD5 */ + {P3_7 , 8 , 0 }, /* WDTOVF */ + {NC , 0 , -1} +}; + +/************ADC***************/ +const PinMap PinMap_ADC[] = { + {P1_8, AN0, 1}, + {P1_9, AN1, 1}, + {P1_10, AN2, 1}, + {P1_11, AN3, 1}, + {P1_12, AN4, 1}, + {P1_13, AN5, 1}, + {P1_14, AN6, 1}, + {P1_15, AN7, 1}, + {NC , NC , 0} +}; + +/************I2C***************/ +const PinMap PinMap_I2C_SDA[] = { + {P1_1 , I2C_0, 1}, + {P1_3 , I2C_1, 1}, + {P1_7 , I2C_3, 1}, + {NC , NC , 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {P1_0 , I2C_0, 1}, + {P1_2 , I2C_1, 1}, + {P1_6 , I2C_3, 1}, + {NC , NC , 0} +}; + +/************UART***************/ +const PinMap PinMap_UART_TX[] = { + {P2_14 , UART0, 6}, + {P2_5 , UART1, 6}, + {P4_12 , UART1, 7}, + {P6_3 , UART2, 7}, + {P4_14 , UART2, 7}, + {P5_3 , UART3, 5}, + {P8_8 , UART3, 7}, + {P5_0 , UART4, 5}, + {P8_14 , UART4, 7}, + {P8_13 , UART5, 5}, + {P11_10, UART5, 3}, + {P6_6 , UART5, 5}, + {P5_6 , UART6, 5}, + {P11_1 , UART6, 4}, + {P7_4 , UART7, 4}, + {NC , NC , 0} +}; + +const PinMap PinMap_UART_RX[] = { + {P2_15 , UART0, 6}, + {P2_6 , UART1, 6}, + {P4_13 , UART1, 7}, + {P6_2 , UART2, 7}, + {P4_15 , UART2, 7}, + {P5_4 , UART3, 5}, + {P8_9 , UART3, 7}, + {P5_1 , UART4, 5}, + {P8_15 , UART4, 7}, + {P8_11 , UART5, 5}, + {P11_11, UART5, 3}, + {P6_7 , UART5, 5}, + {P5_7 , UART6, 5}, + {P11_2 , UART6, 4}, + {P7_5 , UART7, 4}, + {NC , NC , 0} +}; + +const PinMap PinMap_UART_CTS[] = { + {P2_3 , UART1, 6}, + {P11_7 , UART5, 3}, + {P7_6 , UART7, 4}, + {NC , NC , 0} +}; + +const PinMap PinMap_UART_RTS[] = { + {P2_7 , UART1, 6}, + {P11_8 , UART5, 3}, + {P7_7 , UART7, 4}, + {NC , NC , 0} +}; + +/************SPI***************/ +const PinMap PinMap_SPI_SCLK[] = { + {P10_12, SPI_0, 4}, + {P4_4 , SPI_1, 2}, + {P6_4 , SPI_1, 7}, + {P11_12, SPI_1, 2}, + {P8_3 , SPI_2, 3}, + {P5_0 , SPI_3, 8}, + {NC , NC , 0} +}; + +const PinMap PinMap_SPI_MOSI[] = { + {P10_14, SPI_0, 4}, + {P4_6 , SPI_1, 2}, + {P6_6 , SPI_1, 7}, + {P11_14, SPI_1, 2}, + {P8_5 , SPI_2, 3}, + {P5_2 , SPI_3, 8}, + {NC , NC , 0} +}; + +const PinMap PinMap_SPI_MISO[] = { + {P10_15, SPI_0, 4}, + {P4_7 , SPI_1, 2}, + {P6_7 , SPI_1, 7}, + {P11_15, SPI_1, 2}, + {P8_6 , SPI_2, 3}, + {P5_3 , SPI_3, 8}, + {NC , NC , 0} +}; + +const PinMap PinMap_SPI_SSEL[] = { + {P10_13, SPI_0, 4}, + {P4_5 , SPI_1, 2}, + {P6_5 , SPI_1, 7}, + {P11_13, SPI_1, 2}, + {P8_4 , SPI_2, 3}, + {P5_1 , SPI_3, 8}, + {NC , NC , 0} +}; + +/************PWM***************/ +const PinMap PinMap_PWM[] = { + {P2_1 , PWM_TIOC2A, 6}, + {P2_11 , PWM_TIOC1A, 5}, + {P3_8 , PWM_TIOC4A, 6}, + {P3_10 , PWM_TIOC4C, 6}, + {P4_0 , PWM_TIOC0A, 2}, + {P4_4 , PWM_TIOC4A, 3}, + {P4_6 , PWM_TIOC4C, 3}, + {P5_0 , PWM_TIOC0A, 6}, + {P5_3 , PWM_TIOC3C, 6}, + {P5_5 , PWM_TIOC0C, 6}, + {P7_2 , PWM_TIOC0C, 7}, + {P7_4 , PWM_TIOC1A, 7}, + {P7_6 , PWM_TIOC2A, 7}, + {P7_10 , PWM_TIOC3C, 7}, + {P7_12 , PWM_TIOC4A, 7}, + {P7_14 , PWM_TIOC4C, 7}, + {P8_8 , PWM_TIOC1A, 5}, + {P8_10 , PWM_TIOC3A, 4}, + {P8_12 , PWM_TIOC3C, 4}, + {P8_14 , PWM_TIOC2A, 4}, + {P11_0 , PWM_TIOC4A, 2}, + {P11_2 , PWM_TIOC4C, 2}, + {P4_4 , PWM_PWM2E , 4}, + {P3_2 , PWM_PWM2C , 7}, + {P4_6 , PWM_PWM2G , 4}, + {P4_7 , PWM_PWM2H , 4}, + {P8_14 , PWM_PWM1G , 6}, + {P8_15 , PWM_PWM1H , 6}, + {P8_13 , PWM_PWM1F , 6}, + {P8_11 , PWM_PWM1D , 6}, + {P8_8 , PWM_PWM1A , 6}, + {P10_0 , PWM_PWM2A , 3}, + {P8_12 , PWM_PWM1E , 6}, + {P8_9 , PWM_PWM1B , 6}, + {P8_10 , PWM_PWM1C , 6}, + {P4_5 , PWM_PWM2F , 4}, + {NC , NC , 0} +}; + +/************CAN***************/ +const PinMap PinMap_CAN_RD[] = { + {P7_8 , CAN_0, 4}, + {P9_1 , CAN_0, 3}, + {P1_4 , CAN_1, 3}, + {P5_9 , CAN_1, 5}, + {P7_11 , CAN_1, 4}, + {P11_12, CAN_1, 1}, + {P4_9 , CAN_2, 6}, + {P6_4 , CAN_2, 3}, + {P7_2 , CAN_2, 5}, + {P2_12 , CAN_3, 5}, + {P4_2 , CAN_3, 4}, + {P1_5 , CAN_4, 3}, + {P2_14 , CAN_4, 5}, + {NC , NC , 0} +}; + +const PinMap PinMap_CAN_TD[] = { + {P7_9 , CAN_0, 4}, + {P9_0 , CAN_0, 3}, + {P5_10 , CAN_1, 5}, + {P7_10 , CAN_1, 4}, + {P11_13, CAN_1, 1}, + {P4_8 , CAN_2, 6}, + {P6_5 , CAN_2, 3}, + {P7_3 , CAN_2, 5}, + {P2_13 , CAN_3, 5}, + {P4_3 , CAN_3, 4}, + {P4_11 , CAN_4, 6}, + {P8_10 , CAN_4, 5}, + {NC , NC , 0} +}; + diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h index 270cdeecb0..b5c3632705 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/PortNames.h @@ -25,7 +25,14 @@ typedef enum { Port1 = 1, Port2 = 2, Port3 = 3, - Port4 = 4 + Port4 = 4, + Port5 = 5, + Port6 = 6, + Port7 = 7, + Port8 = 8, + Port9 = 9, + Port10 = 10, + Port11 = 11 } PortName; #ifdef __cplusplus diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c deleted file mode 100644 index 19f7876829..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_api.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "gpio_api.h" -#include "pinmap.h" -#include "gpio_addrdefine.h" - - -uint32_t gpio_set(PinName pin) { - pin_function(pin, 0); - return (1 << PINNO(pin)); -} - -void gpio_init(gpio_t *obj, PinName pin) { - int group ; - obj->pin = pin; - if(pin == NC) return; - - obj->mask = gpio_set(pin); - - group = PINGROUP(pin); - if (group > 11) return; - - obj->reg_set = (volatile uint32_t *) PSR(group); - obj->reg_in = (volatile uint32_t *) PPR(group); - obj->reg_dir = (volatile uint32_t *)PMSR(group); - obj->reg_buf = (volatile uint32_t *)PIBC(group); -} - -void gpio_mode(gpio_t *obj, PinMode mode) { -/* Pull up and Pull down settings aren't supported because RZ/A1H doesn't have pull up/down for pins(signals). */ -} - -void gpio_dir(gpio_t *obj, PinDirection direction) { - switch (direction) { - case PIN_INPUT : - *obj->reg_dir = (obj->mask << 16) | obj->mask; - *obj->reg_buf |= obj->mask; - break; - case PIN_OUTPUT: - *obj->reg_dir = (obj->mask << 16) | 0; - *obj->reg_buf &= ~obj->mask; - break; - } -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h new file mode 100644 index 0000000000..1ee094dce6 --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h @@ -0,0 +1,19 @@ +#ifndef MBED_DRV_CFG_H +#define MBED_DRV_CFG_H + +/* can_api.c */ +#define CAN_TEST_GLOBAL_CH 1 + +/* gpio_api.c */ +#define GPIO_GROUP_MAX 11 + +/* pwmout_api.c */ +#define FUNC_MOTOR_CTL_PWM +#define FUMC_MTU2_PWM + +/* rtc_api.c */ +//#define USE_RTCX1_CLK +#define USE_EXTAL_CLK +//#define USE_RTCX3_CLK + +#endif diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h deleted file mode 100644 index 3ce9e0d3c7..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/objects.h +++ /dev/null @@ -1,84 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#ifndef MBED_OBJECTS_H -#define MBED_OBJECTS_H - -#include -#include "cmsis.h" -#include "PortNames.h" -#include "PeripheralNames.h" -#include "PinNames.h" -#include "gpio_object.h" -#include "rspi_iodefine.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct i2c_s { - uint32_t i2c; - uint32_t dummy; - uint8_t pclk_bit; - uint8_t width_low; - uint8_t width_hi; - int bbsy_wait_cnt; - int last_stop_flag; -}; - -struct spi_s { - struct st_rspi *spi; - uint32_t bits; - int index; -}; - -struct gpio_irq_s { - uint32_t port; - uint32_t pin; - uint32_t ch; - uint8_t int_enable; -}; - -struct port_s { - __IO uint32_t *reg_dir; - __IO uint32_t *reg_out; - __I uint32_t *reg_in; - PortName port; - uint32_t mask; -}; - -struct serial_s { - struct st_scif *uart; - int index; -}; - -struct pwmout_s { - uint32_t ch; - PWMName pwm; -}; - -struct analogin_s { - ADCName adc; -}; - -struct can_s { - uint32_t ch; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c deleted file mode 100644 index a96727e9b2..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pinmap.c +++ /dev/null @@ -1,172 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "pinmap.h" -#include "mbed_error.h" -#include "gpio_addrdefine.h" - -PinName gpio_multi_guard = (PinName)NC; /* If set pin name here, setting of the "pin" is just one time */ - -typedef struct { - PinName pin; - int function; - int pm; -} PinFunc; - -static const PinFunc PIPC_0_tbl[] = { -// pin func pm - {P4_0 , 2 , -1}, /* TIOC0A */ - {P5_0 , 6 , -1}, /* TIOC0A */ - {P7_0 , 7 , -1}, /* TIOC0A */ - {P10_4 , 2 , -1}, /* TIOC0A */ - {P4_1 , 2 , -1}, /* TIOC0B */ - {P5_1 , 6 , -1}, /* TIOC0B */ - {P7_1 , 7 , -1}, /* TIOC0B */ - {P10_5 , 2 , -1}, /* TIOC0B */ - {P4_2 , 2 , -1}, /* TIOC0C */ - {P5_5 , 6 , -1}, /* TIOC0C */ - {P7_2 , 7 , -1}, /* TIOC0C */ - {P10_6 , 2 , -1}, /* TIOC0C */ - {P4_3 , 2 , -1}, /* TIOC0D */ - {P5_7 , 6 , -1}, /* TIOC0D */ - {P7_3 , 7 , -1}, /* TIOC0D */ - {P10_7 , 2 , -1}, /* TIOC0D */ - {P2_11 , 5 , -1}, /* TIOC1A */ - {P6_0 , 5 , -1}, /* TIOC1A */ - {P7_4 , 7 , -1}, /* TIOC1A */ - {P8_8 , 5 , -1}, /* TIOC1A */ - {P9_7 , 4 , -1}, /* TIOC1A */ - {P10_8 , 2 , -1}, /* TIOC1A */ - {P2_12 , 8 , -1}, /* TIOC1B */ - {P5_2 , 6 , -1}, /* TIOC1B */ - {P6_1 , 5 , -1}, /* TIOC1B */ - {P7_5 , 7 , -1}, /* TIOC1B */ - {P8_9 , 5 , -1}, /* TIOC1B */ - {P10_9 , 2 , -1}, /* TIOC1B */ - {P2_1 , 6 , -1}, /* TIOC2A */ - {P6_2 , 6 , -1}, /* TIOC2A */ - {P7_6 , 7 , -1}, /* TIOC2A */ - {P8_14 , 4 , -1}, /* TIOC2A */ - {P10_10 , 2 , -1}, /* TIOC2A */ - {P2_2 , 6 , -1}, /* TIOC2B */ - {P6_3 , 6 , -1}, /* TIOC2B */ - {P7_7 , 7 , -1}, /* TIOC2B */ - {P8_15 , 4 , -1}, /* TIOC2B */ - {P10_11 , 2 , -1}, /* TIOC2B */ - {P10_11 , 2 , -1}, /* TIOC2B */ - {P3_4 , 6 , -1}, /* TIOC3A */ - {P7_8 , 7 , -1}, /* TIOC3A */ - {P8_10 , 4 , -1}, /* TIOC3A */ - {P3_5 , 6 , -1}, /* TIOC3B */ - {P7_9 , 7 , -1}, /* TIOC3B */ - {P8_11 , 4 , -1}, /* TIOC3B */ - {P3_6 , 6 , -1}, /* TIOC3C */ - {P5_3 , 6 , -1}, /* TIOC3C */ - {P7_10 , 7 , -1}, /* TIOC3C */ - {P8_12 , 4 , -1}, /* TIOC3C */ - {P3_7 , 6 , -1}, /* TIOC3D */ - {P5_4 , 6 , -1}, /* TIOC3D */ - {P7_11 , 7 , -1}, /* TIOC3D */ - {P8_13 , 4 , -1}, /* TIOC3D */ - {P3_8 , 6 , -1}, /* TIOC4A */ - {P4_4 , 3 , -1}, /* TIOC4A */ - {P7_12 , 7 , -1}, /* TIOC4A */ - {P11_0 , 2 , -1}, /* TIOC4A */ - {P3_9 , 6 , -1}, /* TIOC4B */ - {P4_5 , 3 , -1}, /* TIOC4B */ - {P7_13 , 7 , -1}, /* TIOC4B */ - {P11_1 , 2 , -1}, /* TIOC4B */ - {P3_10 , 6 , -1}, /* TIOC4C */ - {P4_6 , 3 , -1}, /* TIOC4C */ - {P7_14 , 7 , -1}, /* TIOC4C */ - {P11_2 , 2 , -1}, /* TIOC4C */ - {P3_11 , 6 , -1}, /* TIOC4D */ - {P4_7 , 3 , -1}, /* TIOC4D */ - {P7_15 , 7 , -1}, /* TIOC4D */ - {P11_3 , 2 , -1}, /* TIOC4D */ - {P5_7 , 1 , 1 }, /* TXOUT0M */ - {P5_6 , 1 , 1 }, /* TXOUT0P */ - {P5_5 , 1 , 1 }, /* TXOUT1M */ - {P5_4 , 1 , 1 }, /* TXOUT1P */ - {P5_3 , 1 , 1 }, /* TXOUT2M */ - {P5_2 , 1 , 1 }, /* TXOUT2P */ - {P5_1 , 1 , 1 }, /* TXCLKOUTM */ - {P5_0 , 1 , 1 }, /* TXCLKOUTP */ - {P2_11 , 4 , 0 }, /* SSITxD0 */ - {P4_7 , 5 , 0 }, /* SSITxD0 */ - {P7_4 , 6 , 0 }, /* SSITxD1 */ - {P10_15 , 2 , 0 }, /* SSITxD1 */ - {P4_15 , 6 , 0 }, /* SSITxD3 */ - {P7_11 , 2 , 0 }, /* SSITxD3 */ - {P2_7 , 4 , 0 }, /* SSITxD5 */ - {P4_11 , 5 , 0 }, /* SSITxD5 */ - {P8_10 , 8 , 0 }, /* SSITxD5 */ - {P3_7 , 8 , 0 }, /* WDTOVF */ - {NC , 0 , -1} -}; - -void pin_function(PinName pin, int function) { - if (pin == (PinName)NC) return; - - int n = pin >> 4; - int bitmask = 1<<(pin & 0xf); - const PinFunc * Pipc_0_func = PIPC_0_tbl; - int pipc_data = 1; - - if (gpio_multi_guard != pin) { - if (function == 0) { - // means GPIO mode - *PMC(n) &= ~bitmask; - } else { - // alt-function mode - --function; - - if (function & (1 << 2)) { *PFCAE(n) |= bitmask;}else { *PFCAE(n) &= ~bitmask;} - if (function & (1 << 1)) { *PFCE(n) |= bitmask;}else { *PFCE(n) &= ~bitmask;} - if (function & (1 << 0)) { *PFC(n) |= bitmask;}else { *PFC(n) &= ~bitmask;} - - while (Pipc_0_func->pin != NC) { - if ((Pipc_0_func->pin == pin) && ((Pipc_0_func->function - 1) == function)) { - pipc_data = 0; - if (Pipc_0_func->pm == 0) { - *PMSR(n) = (bitmask << 16) | 0; - } else if (Pipc_0_func->pm == 1) { - *PMSR(n) = (bitmask << 16) | bitmask; - } else { - // Do Nothing - } - break; - } - Pipc_0_func++; - } - if (pipc_data == 1) { - *PIPC(n) |= bitmask; - } else { - *PIPC(n) &= ~bitmask; - } - - if (P1_0 <= pin && pin <= P1_7 && function == 0) { - *PBDC(n) |= bitmask; - } - *PMC(n) |= bitmask; - } - } else { - gpio_multi_guard = (PinName)NC; - } -} - -void pin_mode(PinName pin, PinMode mode) { -// if (pin == (PinName)NC) { return; } -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c deleted file mode 100644 index 5f9f16e4d5..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/port_api.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "port_api.h" -#include "pinmap.h" -#include "gpio_api.h" - -PinName port_pin(PortName port, int pin_n) { - return (PinName)(0); -} - -void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { - obj->port = port; - obj->mask = mask; - - // Do not use masking, because it prevents the use of the unmasked pins - // port_reg->FIOMASK = ~mask; - - uint32_t i; - // The function is set per pin: reuse gpio logic - for (i=0; i<32; i++) { - if (obj->mask & (1<port, i)); - } - } - - port_dir(obj, dir); -} - -void port_mode(port_t *obj, PinMode mode) { - uint32_t i; - // The mode is set per pin: reuse pinmap logic - for (i=0; i<32; i++) { - if (obj->mask & (1<port, i), mode); - } - } -} - -void port_dir(port_t *obj, PinDirection dir) { - switch (dir) { - case PIN_INPUT : *obj->reg_dir &= ~obj->mask; break; - case PIN_OUTPUT: *obj->reg_dir |= obj->mask; break; - } -} - -void port_write(port_t *obj, int value) { - *obj->reg_out = (*obj->reg_in & ~obj->mask) | (value & obj->mask); -} - -int port_read(port_t *obj) { - return (*obj->reg_in & obj->mask); -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c deleted file mode 100644 index f526a221c3..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/rtc_api.c +++ /dev/null @@ -1,378 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2015 ARM Limited - * - * 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. - */ - -#include "mbed_assert.h" -#include "device.h" - -#if DEVICE_RTC - -#include "rtc_api.h" -#include "rtc_iodefine.h" -#include "mbed_mktime.h" - - -#define RCR1_VAL_ON (0x08u) // AIE = 1 -#define RCR1_VAL_OFF (0x00u) -#define RCR2_VAL_ALLSTOP (0x00u) -#define RCR2_VAL_START (0x01u) // START = 1 -#define RCR2_VAL_RESET (0x02u) // RESET = 1 -#define RCR3_VAL (0x00u) -#define RCR5_VAL_EXTAL (0x01u) // RCKSEL = connect EXTAL -#define RCR5_VAL_RTCX1 (0x00u) // RCKSEL = disconnect EXTAL -#define RFRH_VAL_13333 (0x8003u) // 13.3333MHz (= 64Hz * 0x32DCD) -#define RFRL_VAL_13333 (0x2DCDu) // -#define RFRH_VAL_MAX (0x0007u) // MAX value (= 128Hz * 0x7FFFF) -#define RFRL_VAL_MAX (0xFFFFu) // - -#define MASK_00_03_POS (0x000Fu) -#define MASK_04_07_POS (0x00F0u) -#define MASK_08_11_POS (0x0F00u) -#define MASK_12_15_POS (0xF000u) -#define MASK_16_20_POS (0x000F0000u) -#define SHIFT_1_HBYTE (4u) -#define SHIFT_2_HBYTE (8u) -#define SHIFT_3_HBYTE (12u) -#define SHIFT_1BYTE (8u) -#define SHIFT_2BYTE (16u) - -#define TIME_ERROR_VAL (0xFFFFFFFFu) - -static int rtc_dec8_to_hex(uint8_t dec_val, uint8_t offset, int *hex_val); -static int rtc_dec16_to_hex(uint16_t dec_val, uint16_t offset, int *hex_val); -static uint8_t rtc_hex8_to_dec(uint8_t hex_val); -static uint16_t rtc_hex16_to_dec(uint16_t hex_val); - - -/* - * Setup the RTC based on a time structure. - * The rtc_init function should be executed first. - * [in] - * None. - * [out] - * None. - */ -void rtc_init(void) { - volatile uint8_t dummy_read; - - // Set control register - RTC.RCR2 = RCR2_VAL_ALLSTOP; - RTC.RCR1 = RCR1_VAL_ON; - RTC.RCR3 = RCR3_VAL; - RTC.RCR5 = RCR5_VAL_EXTAL; - RTC.RFRH = RFRH_VAL_13333; - RTC.RFRL = RFRL_VAL_13333; - - // Dummy read - dummy_read = RTC.RCR2; - dummy_read = RTC.RCR2; - - RTC.RCR2 = RCR2_VAL_RESET; // RESET = 1 - - // Dummy read - dummy_read = RTC.RCR2; - dummy_read = RTC.RCR2; - - // Set timer and alarm. Default value :01-01-1970 00:00:00 - RTC.RSECCNT = 0; - RTC.RMINCNT = 0; - RTC.RHRCNT = 0; - RTC.RWKCNT = 0; - RTC.RDAYCNT = 1; - RTC.RMONCNT = 1; - RTC.RYRCNT = 0x1970; - RTC.RSECAR = 0; - RTC.RMINAR = 0; - RTC.RHRAR = 0; - RTC.RWKAR = 0; - RTC.RDAYAR = 1; - RTC.RMONAR = 1; - RTC.RYRAR = 0x1970; - - // Dummy read - dummy_read = RTC.RYRCNT; - dummy_read = RTC.RYRCNT; - -} - - -/* - * Release the RTC based on a time structure. - * [in] - * None. - * [out] - * None. - */ -void rtc_free(void) { - volatile uint8_t dummy_read; - - // Set control register - RTC.RCR2 = RCR2_VAL_ALLSTOP; - RTC.RCR1 = RCR1_VAL_OFF; - RTC.RCR3 = RCR3_VAL; - RTC.RCR5 = RCR5_VAL_RTCX1; - RTC.RFRH = RFRH_VAL_MAX; - RTC.RFRL = RFRL_VAL_MAX; - - // Dummy read - dummy_read = RTC.RCR2; - dummy_read = RTC.RCR2; - RTC.RCR2 = RCR2_VAL_RESET; // RESET = 1 - - // Dummy read - dummy_read = RTC.RCR2; - dummy_read = RTC.RCR2; - - // Set timer and alarm. Default value :01-01-1970 00:00:00 - RTC.RSECCNT = 0; - RTC.RMINCNT = 0; - RTC.RHRCNT = 0; - RTC.RWKCNT = 0; - RTC.RDAYCNT = 1; - RTC.RMONCNT = 1; - RTC.RYRCNT = 0x1970; - RTC.RSECAR = 0; - RTC.RMINAR = 0; - RTC.RHRAR = 0; - RTC.RWKAR = 0; - RTC.RDAYAR = 1; - RTC.RMONAR = 1; - RTC.RYRAR = 0x1970; - - // Dummy read - dummy_read = RTC.RYRCNT; - dummy_read = RTC.RYRCNT; - -} - - -/* - * Check the RTC has been enabled. - * Clock Control Register RTC.RCR1(bit3): 0 = Disabled, 1 = Enabled. - * [in] - * None. - * [out] - * 0:Disabled, 1:Enabled. - */ -int rtc_isenabled(void) { - int ret_val = 0; - - if ((RTC.RCR1 & RCR1_VAL_ON) != 0) { // RTC ON ? - ret_val = 1; - } - - return ret_val; -} - - -/* - * RTC read function. - * [in] - * None. - * [out] - * UNIX timestamp value. - */ -time_t rtc_read(void) { - - struct tm timeinfo; - int err = 0; - uint8_t tmp_regdata; - time_t t; - - if (rtc_isenabled() != 0) { - RTC.RCR1 &= ~0x10u; // CIE = 0 - do { - // before reading process - tmp_regdata = RTC.RCR1; - tmp_regdata &= ~0x80u; // CF = 0 - tmp_regdata |= 0x01u; // AF = 1 - RTC.RCR1 = tmp_regdata; - - // Read RTC register - err = rtc_dec8_to_hex(RTC.RSECCNT , 0 , &timeinfo.tm_sec); - err += rtc_dec8_to_hex(RTC.RMINCNT , 0 , &timeinfo.tm_min); - err += rtc_dec8_to_hex(RTC.RHRCNT , 0 , &timeinfo.tm_hour); - err += rtc_dec8_to_hex(RTC.RDAYCNT , 0 , &timeinfo.tm_mday); - err += rtc_dec8_to_hex(RTC.RMONCNT , 1 , &timeinfo.tm_mon); - err += rtc_dec16_to_hex(RTC.RYRCNT , 1900 , &timeinfo.tm_year); - } while ((RTC.RCR1 & 0x80u) != 0); - } else { - err = 1; - } - - if (err == 0) { - // Convert to timestamp - t = _rtc_mktime(&timeinfo); - } else { - // Error - t = TIME_ERROR_VAL; - } - - return t; -} - -/* - * Dec(8bit) to Hex function for RTC. - * [in] - * dec_val:Decimal value (from 0x00 to 0x99). - * offset:Subtract offset from dec_val. - * hex_val:Pointer of output hexadecimal value. - * [out] - * 0:Success - * 1:Error - */ -static int rtc_dec8_to_hex(uint8_t dec_val, uint8_t offset, int *hex_val) { - int err = 0; - uint8_t ret_val; - - if (hex_val != NULL) { - if (((dec_val & MASK_04_07_POS) >= (0x0A << SHIFT_1_HBYTE)) || - ((dec_val & MASK_00_03_POS) >= 0x0A)) { - err = 1; - } else { - ret_val = ((dec_val & MASK_04_07_POS) >> SHIFT_1_HBYTE) * 10 + - (dec_val & MASK_00_03_POS); - if (ret_val < offset) { - err = 1; - } else { - *hex_val = ret_val - offset; - } - } - } else { - err = 1; - } - - return err; -} - -/* - * Dec(16bit) to Hex function for RTC - * [in] - * dec_val:Decimal value (from 0x0000 to 0x9999). - * offset:Subtract offset from dec_val. - * hex_val:Pointer of output hexadecimal value. - * [out] - * 0:Success - * 1:Error - */ -static int rtc_dec16_to_hex(uint16_t dec_val, uint16_t offset, int *hex_val) { - int err = 0; - uint16_t ret_val; - - if (hex_val != NULL) { - if (((dec_val & MASK_12_15_POS) >= (0x0A << SHIFT_3_HBYTE)) || - ((dec_val & MASK_08_11_POS) >= (0x0A << SHIFT_2_HBYTE)) || - ((dec_val & MASK_04_07_POS) >= (0x0A << SHIFT_1_HBYTE)) || - ((dec_val & MASK_00_03_POS) >= 0x0A)) { - err = 1; - *hex_val = 0; - } else { - ret_val = (((dec_val & MASK_12_15_POS)) >> SHIFT_3_HBYTE) * 1000 + - (((dec_val & MASK_08_11_POS)) >> SHIFT_2_HBYTE) * 100 + - (((dec_val & MASK_04_07_POS)) >> SHIFT_1_HBYTE) * 10 + - (dec_val & MASK_00_03_POS); - if (ret_val < offset) { - err = 1; - } else { - *hex_val = ret_val - offset; - } - } - } else { - err = 1; - } - return err; -} - -/* - * RTC write function - * [in] - * t:UNIX timestamp value - * [out] - * None. - */ -void rtc_write(time_t t) { - - struct tm timeinfo; - if (_rtc_localtime(t, &timeinfo) == false) { - return; - } - volatile uint16_t dummy_read; - - if (rtc_isenabled() != 0) { - RTC.RCR2 = RCR2_VAL_ALLSTOP; - dummy_read = (uint16_t)RTC.RCR2; - dummy_read = (uint16_t)RTC.RCR2; - RTC.RCR2 = RCR2_VAL_RESET; // RESET = 1 - dummy_read = (uint16_t)RTC.RCR2; - dummy_read = (uint16_t)RTC.RCR2; - - RTC.RSECCNT = rtc_hex8_to_dec(timeinfo.tm_sec); - RTC.RMINCNT = rtc_hex8_to_dec(timeinfo.tm_min); - RTC.RHRCNT = rtc_hex8_to_dec(timeinfo.tm_hour); - RTC.RDAYCNT = rtc_hex8_to_dec(timeinfo.tm_mday); - RTC.RMONCNT = rtc_hex8_to_dec(timeinfo.tm_mon + 1); - RTC.RYRCNT = rtc_hex16_to_dec(timeinfo.tm_year + 1900); - dummy_read = (uint16_t)RTC.RYRCNT; - dummy_read = (uint16_t)RTC.RYRCNT; - - RTC.RCR2 = RCR2_VAL_START; // START = 1 - - dummy_read = (uint16_t)RTC.RCR2; - dummy_read = (uint16_t)RTC.RCR2; - } -} - -/* - * HEX to Dec(8bit) function for RTC. - * [in] - * hex_val:Hexadecimal value. - * [out] - * decimal value:From 0x00 to 0x99. - */ -static uint8_t rtc_hex8_to_dec(uint8_t hex_val) { - uint32_t calc_data; - - calc_data = hex_val / 10 * 0x10; - calc_data += hex_val % 10; - - if (calc_data > 0x99) { - calc_data = 0; - } - - return (uint8_t)calc_data; -} - -/* - * HEX to Dec(16bit) function for RTC. - * [in] - * hex_val:Hexadecimal value. - * [out] - * decimal value:From 0x0000 to 0x9999. - */ -static uint16_t rtc_hex16_to_dec(uint16_t hex_val) { - uint32_t calc_data; - calc_data = hex_val / 1000 * 0x1000; - calc_data += ((hex_val / 100) % 10) * 0x100; - calc_data += ((hex_val / 10) % 10) * 0x10; - calc_data += hex_val % 10; - - if (calc_data > 0x9999) { - calc_data = 0; - } - return (uint16_t)calc_data; - -} - -#endif /* DEVICE_RTC */ diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h index e7db580626..a8c7fb6df0 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralNames.h @@ -34,105 +34,31 @@ typedef enum { UART7, } UARTName; -// PWMType & 1 == 1 then have to use PWDTR[12] == 1 typedef enum { - PWM1A = 0, - PWM1B, - PWM1C, - PWM1D, - PWM1E, - PWM1F, - PWM1G, - PWM1H, - PWM2A = 0x10, - PWM2B, - PWM2C, - PWM2D, - PWM2E, - PWM2F, - PWM2G, - PWM2H, -} PWMType; - -typedef enum { - TIOC0A = 0, - TIOC0B, - TIOC0C, - TIOC0D, - TIOC1A = 0x10, - TIOC1B, - TIOC2A = 0x20, - TIOC2B, - TIOC3A = 0x30, - TIOC3B, - TIOC3C, - TIOC3D, - TIOC4A = 0x40, - TIOC4B, - TIOC4C, - TIOC4D, -} MTU2_PWMType; - -typedef enum { - PWM0_PIN = 0, - PWM1_PIN, - PWM2_PIN, - PWM3_PIN, - PWM4_PIN, - PWM5_PIN, - PWM6_PIN, - PWM7_PIN, - PWM8_PIN, - PWM9_PIN, - PWM10_PIN, - PWM11_PIN, - PWM12_PIN, -#ifdef MAX_PERI - PWM13_PIN, - PWM14_PIN, - PWM15_PIN, - MTU2_PWM0_PIN = 0x20, - MTU2_PWM1_PIN, - MTU2_PWM2_PIN, - MTU2_PWM3_PIN, - MTU2_PWM4_PIN, - MTU2_PWM5_PIN, - MTU2_PWM6_PIN, - MTU2_PWM7_PIN, - MTU2_PWM8_PIN, - MTU2_PWM9_PIN, - MTU2_PWM10_PIN, - MTU2_PWM11_PIN, - MTU2_PWM12_PIN, - MTU2_PWM13_PIN, - MTU2_PWM14_PIN, - MTU2_PWM15_PIN, - MTU2_PWM16_PIN, - MTU2_PWM17_PIN, - MTU2_PWM18_PIN, - MTU2_PWM19_PIN, - MTU2_PWM20_PIN, - MTU2_PWM21_PIN, - MTU2_PWM22_PIN, - MTU2_PWM23_PIN, - MTU2_PWM23_PIN, - MTU2_PWM24_PIN, - MTU2_PWM25_PIN, - MTU2_PWM26_PIN, -#else - MTU2_PWM0_PIN = 0x20, - MTU2_PWM1_PIN, - MTU2_PWM2_PIN, - MTU2_PWM3_PIN, - MTU2_PWM4_PIN, - MTU2_PWM5_PIN, - MTU2_PWM6_PIN, - MTU2_PWM7_PIN, - MTU2_PWM8_PIN, - MTU2_PWM9_PIN, - MTU2_PWM10_PIN, - MTU2_PWM11_PIN, -#endif + PWM_PWM1A = 0, + PWM_PWM1B, + PWM_PWM1C, + PWM_PWM1D, + PWM_PWM1E, + PWM_PWM1F, + PWM_PWM1G, + PWM_PWM1H, + PWM_PWM2A, + PWM_PWM2B, + PWM_PWM2C, + PWM_PWM2D, + PWM_PWM2E, + PWM_PWM2F, + PWM_PWM2G, + PWM_PWM2H, + PWM_TIOC0A = 0x20, + PWM_TIOC0C, + PWM_TIOC1A, + PWM_TIOC2A, + PWM_TIOC3A, + PWM_TIOC3C, + PWM_TIOC4A, + PWM_TIOC4C, } PWMName; typedef enum { @@ -147,7 +73,8 @@ typedef enum { } ADCName; typedef enum { - SPI_1 = 1, + SPI_0 = 0, + SPI_1, SPI_2, SPI_3, SPI_4, @@ -157,7 +84,7 @@ typedef enum { I2C_0 = 0, I2C_1, I2C_2, - I2C_3 + I2C_3, } I2CName; typedef enum { @@ -165,7 +92,7 @@ typedef enum { CAN_1, CAN_2, CAN_3, - CAN_4 + CAN_4, } CANName; diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralPins.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralPins.c new file mode 100644 index 0000000000..d5fd4b1d92 --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/PeripheralPins.c @@ -0,0 +1,540 @@ + +/* mbed Microcontroller Library + * Copyright (c) 2006-2015 ARM Limited + * + * 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. + */ + +#include "PeripheralPins.h" + +/************IRQ***************/ +enum { + IRQ0,IRQ1, + IRQ2,IRQ3, + IRQ4,IRQ5, + IRQ6,IRQ7, +} IRQNo; +const PinMap PinMap_IRQ[] = { +#ifdef MAX_PERI + {P1_0, IRQ0, 4}, {P4_8, IRQ0, 8}, {P6_8, IRQ0, 8}, {P7_9, IRQ0, 8}, {P8_2, IRQ0, 5}, {P2_14, IRQ0, 8}, {P5_8, IRQ0, 2}, {P9_1, IRQ0, 4}, + {P1_1, IRQ1, 4}, {P4_9, IRQ1, 8}, {P6_9, IRQ1, 8}, {P7_8, IRQ1, 8}, {P8_3, IRQ1, 6}, {P2_15, IRQ1, 8}, + {P1_2, IRQ2, 4}, {P4_10, IRQ2, 8}, {P6_10, IRQ2, 8}, {P7_10, IRQ2, 8}, {P1_8, IRQ2, 3}, {P3_0, IRQ2, 3}, {P5_9, IRQ2, 4}, {P6_3, IRQ2, 4}, + {P1_3, IRQ3, 4}, {P4_11, IRQ3, 8}, {P6_11, IRQ3, 8}, {P7_11, IRQ3, 8}, {P1_9, IRQ3, 3}, {P6_4, IRQ3, 4}, + {P1_4, IRQ4, 4}, {P4_12, IRQ4, 8}, {P6_12, IRQ4, 8}, {P7_12, IRQ4, 8}, {P1_10, IRQ4, 3}, {P3_3, IRQ4, 3}, {P6_1, IRQ4, 4}, + {P1_5, IRQ5, 4}, {P4_13, IRQ5, 8}, {P6_13, IRQ5, 8}, {P7_13, IRQ5, 8}, {P1_11, IRQ5, 3}, {P2_0, IRQ5, 6}, {P6_0, IRQ5, 6}, {P8_7, IRQ5, 4}, + {P1_6, IRQ6, 4}, {P4_14, IRQ6, 8}, {P6_14, IRQ6, 8}, {P7_14, IRQ6, 8}, {P2_12, IRQ6, 6}, {P3_1, IRQ6, 3}, {P3_9, IRQ6, 8}, {P5_6, IRQ6, 6}, + {P1_7, IRQ7, 4}, {P4_15, IRQ7, 8}, {P6_15, IRQ7, 8}, {P6_2, IRQ7, 4}, {P2_13, IRQ7, 8}, + {NC, NC, 0} +#else + {P9_1, IRQ0, 4}, + {P7_8, IRQ1, 8}, + {P1_2, IRQ2, 4}, {P1_8, IRQ2, 3}, {P3_0, IRQ2, 3}, {P5_9, IRQ2, 4}, + {P1_3, IRQ3, 4}, {P1_9, IRQ3, 3}, + {P1_4, IRQ4, 4}, {P1_10, IRQ4, 3}, + {P1_5, IRQ5, 4}, {P1_11, IRQ5, 3}, + {P3_1, IRQ6, 3}, {P3_9, IRQ6, 8}, {P5_6, IRQ6, 6}, + {NC, NC, 0} +#endif +}; + +/************PINMAP***************/ +const PinFunc PIPC_0_tbl[] = { +#ifdef MAX_PERI +// pin func pm + {P4_0 , 2 , -1}, /* TIOC0A */ + {P5_0 , 6 , -1}, /* TIOC0A */ + {P7_0 , 7 , -1}, /* TIOC0A */ + {P4_1 , 2 , -1}, /* TIOC0B */ + {P5_1 , 6 , -1}, /* TIOC0B */ + {P7_1 , 7 , -1}, /* TIOC0B */ + {P4_2 , 2 , -1}, /* TIOC0C */ + {P5_5 , 6 , -1}, /* TIOC0C */ + {P7_2 , 7 , -1}, /* TIOC0C */ + {P4_3 , 2 , -1}, /* TIOC0D */ + {P5_7 , 6 , -1}, /* TIOC0D */ + {P7_3 , 7 , -1}, /* TIOC0D */ + {P2_11 , 5 , -1}, /* TIOC1A */ + {P6_0 , 5 , -1}, /* TIOC1A */ + {P7_4 , 7 , -1}, /* TIOC1A */ + {P8_8 , 5 , -1}, /* TIOC1A */ + {P9_7 , 4 , -1}, /* TIOC1A */ + {P2_12 , 8 , -1}, /* TIOC1B */ + {P5_2 , 6 , -1}, /* TIOC1B */ + {P6_1 , 5 , -1}, /* TIOC1B */ + {P7_5 , 7 , -1}, /* TIOC1B */ + {P8_9 , 5 , -1}, /* TIOC1B */ + {P2_1 , 6 , -1}, /* TIOC2A */ + {P6_2 , 6 , -1}, /* TIOC2A */ + {P7_6 , 7 , -1}, /* TIOC2A */ + {P8_14 , 4 , -1}, /* TIOC2A */ + {P2_2 , 6 , -1}, /* TIOC2B */ + {P6_3 , 6 , -1}, /* TIOC2B */ + {P7_7 , 7 , -1}, /* TIOC2B */ + {P8_15 , 4 , -1}, /* TIOC2B */ + {P3_4 , 6 , -1}, /* TIOC3A */ + {P7_8 , 7 , -1}, /* TIOC3A */ + {P8_10 , 4 , -1}, /* TIOC3A */ + {P3_5 , 6 , -1}, /* TIOC3B */ + {P7_9 , 7 , -1}, /* TIOC3B */ + {P8_11 , 4 , -1}, /* TIOC3B */ + {P3_6 , 6 , -1}, /* TIOC3C */ + {P5_3 , 6 , -1}, /* TIOC3C */ + {P7_10 , 7 , -1}, /* TIOC3C */ + {P8_12 , 4 , -1}, /* TIOC3C */ + {P3_7 , 6 , -1}, /* TIOC3D */ + {P5_4 , 6 , -1}, /* TIOC3D */ + {P7_11 , 7 , -1}, /* TIOC3D */ + {P8_13 , 4 , -1}, /* TIOC3D */ + {P3_8 , 6 , -1}, /* TIOC4A */ + {P4_4 , 3 , -1}, /* TIOC4A */ + {P7_12 , 7 , -1}, /* TIOC4A */ + {P3_9 , 6 , -1}, /* TIOC4B */ + {P4_5 , 3 , -1}, /* TIOC4B */ + {P7_13 , 7 , -1}, /* TIOC4B */ + {P3_10 , 6 , -1}, /* TIOC4C */ + {P4_6 , 3 , -1}, /* TIOC4C */ + {P7_14 , 7 , -1}, /* TIOC4C */ + {P3_11 , 6 , -1}, /* TIOC4D */ + {P4_7 , 3 , -1}, /* TIOC4D */ + {P7_15 , 7 , -1}, /* TIOC4D */ + {P5_7 , 1 , 1 }, /* TXOUT0M */ + {P5_6 , 1 , 1 }, /* TXOUT0P */ + {P5_5 , 1 , 1 }, /* TXOUT1M */ + {P5_4 , 1 , 1 }, /* TXOUT1P */ + {P5_3 , 1 , 1 }, /* TXOUT2M */ + {P5_2 , 1 , 1 }, /* TXOUT2P */ + {P5_1 , 1 , 1 }, /* TXCLKOUTM */ + {P5_0 , 1 , 1 }, /* TXCLKOUTP */ + {P2_11 , 4 , 0 }, /* SSITxD0 */ + {P4_7 , 5 , 0 }, /* SSITxD0 */ + {P7_4 , 6 , 0 }, /* SSITxD1 */ + {P4_15 , 6 , 0 }, /* SSITxD3 */ + {P7_11 , 2 , 0 }, /* SSITxD3 */ + {P2_7 , 4 , 0 }, /* SSITxD5 */ + {P4_11 , 5 , 0 }, /* SSITxD5 */ + {P8_10 , 8 , 0 }, /* SSITxD5 */ + {P3_7 , 8 , 0 }, /* WDTOVF */ + {NC , 0 , -1} +#else + // pin func pm + {P4_0 , 2 , -1}, // TIOC0A + {P5_0 , 6 , -1}, // TIOC0A + {P4_2 , 2 , -1}, // TIOC0C + {P5_5 , 6 , -1}, // TIOC0C + // + {P8_14 , 4 , -1}, // TIOC2A + // + {P8_10 , 4 , -1}, // TIOC3A + {P5_3 , 6 , -1}, // TIOC3C + {P8_12 , 4 , -1}, // TIOC3C + // + {P3_8 , 6 , -1}, // TIOC4A + {P4_4 , 3 , -1}, // TIOC4A + {P3_10 , 6 , -1}, // TIOC4C + {P4_6 , 3 , -1}, // TIOC4C + // + {P5_7 , 1 , 1 }, // TXOUT0M + {P5_6 , 1 , 1 }, // TXOUT0P + {P5_5 , 1 , 1 }, // TXOUT1M + {P5_4 , 1 , 1 }, // TXOUT1P + {P5_3 , 1 , 1 }, // TXOUT2M + {P5_2 , 1 , 1 }, // TXOUT2P + {P5_1 , 1 , 1 }, // TXCLKOUTM + {P5_0 , 1 , 1 }, // TXCLKOUTP + {P4_7 , 5 , 0 }, // SSITxD0 + {P8_10 , 8 , 0 }, // SSITxD5 + {P3_7 , 8 , 0 }, // WDTOVF + {NC , 0 , -1} +#endif +}; + +/************ADC***************/ +const PinMap PinMap_ADC[] = { +#ifdef MAX_PERI + {P1_8, AN0, 1}, + {P1_9, AN1, 1}, + {P1_10, AN2, 1}, + {P1_11, AN3, 1}, + {P1_12, AN4, 1}, + {P1_13, AN5, 1}, + {P1_14, AN6, 1}, + {P1_15, AN7, 1}, + {NC, NC, 0} +#else + {P1_8, AN0, 1}, + {P1_9, AN1, 1}, + {P1_10, AN2, 1}, + {P1_11, AN3, 1}, + {P1_12, AN4, 1}, + {P1_13, AN5, 1}, + {P1_15, AN7, 1}, + {NC, NC, 0} +#endif +}; + +/************I2C***************/ +const PinMap PinMap_I2C_SDA[] = { + {P1_1 , I2C_0, 1}, + {P1_3 , I2C_1, 1}, + {P1_5 , I2C_2, 1}, + {P1_7 , I2C_3, 1}, + {NC , NC , 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {P1_0 , I2C_0, 1}, + {P1_2 , I2C_1, 1}, + {P1_4 , I2C_2, 1}, + {P1_6 , I2C_3, 1}, + {NC , NC, 0} +}; + +/************UART***************/ +const PinMap PinMap_UART_TX[] = { +#ifdef MAX_PERI + {P2_14 , UART0, 6}, + {P4_9 , UART0, 7}, + {P6_9 , UART0, 5}, + {P2_5 , UART1, 6}, + {P4_12 , UART1, 7}, + {P6_12 , UART1, 5}, + {P9_3 , UART1, 4}, + {P3_0 , UART2, 6}, + {P3_1 , UART2, 4}, + {P4_2 , UART2, 5}, + {P4_14 , UART2, 7}, + {P6_3 , UART2, 7}, + {P8_6 , UART2, 7}, + {P3_5 , UART3, 7}, + {P5_3 , UART3, 5}, + {P6_1 , UART3, 7}, + {P8_8 , UART3, 7}, + {P5_0 , UART4, 5}, + {P7_1 , UART4, 4}, + {P8_14 , UART4, 7}, + {P6_6 , UART5, 5}, + {P8_1 , UART5, 4}, + {P8_13 , UART5, 5}, + {P5_6 , UART6, 5}, + {P6_14 , UART6, 4}, + {P7_4 , UART7, 4}, + {NC , NC , 0} +#else + {P3_0 , UART2, 6}, + {P3_1 , UART2, 4}, + {P4_2 , UART2, 5}, + {P5_3 , UART3, 5}, + {P8_8 , UART3, 7}, + {P5_0 , UART4, 5}, + {P8_14 , UART4, 7}, + {P8_13 , UART5, 5}, + {P5_6 , UART6, 5}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_UART_RX[] = { +#ifdef MAX_PERI + {P2_15 , UART0, 6}, + {P4_10 , UART0, 7}, + {P6_10 , UART0, 5}, + {P2_6 , UART1, 6}, + {P4_13 , UART1, 7}, + {P6_13 , UART1, 5}, + {P9_4 , UART1, 4}, + {P3_2 , UART2, 4}, + {P4_3 , UART2, 5}, + {P4_15 , UART2, 7}, + {P6_2 , UART2, 7}, + {P8_4 , UART2, 7}, + {P3_6 , UART3, 7}, + {P5_4 , UART3, 5}, + {P6_0 , UART3, 7}, + {P8_9 , UART3, 7}, + {P5_1 , UART4, 5}, + {P7_2 , UART4, 4}, + {P8_15 , UART4, 7}, + {P6_7 , UART5, 5}, + {P8_2 , UART5, 4}, + {P8_11 , UART5, 5}, + {P5_7 , UART6, 5}, + {P6_15 , UART6, 4}, + {P7_5 , UART7, 4}, + {NC , NC , 0} +#else + {P3_2 , UART2, 4}, + {P4_3 , UART2, 5}, + {P5_4 , UART3, 5}, + {P8_9 , UART3, 7}, + {P5_1 , UART4, 5}, + {P8_15 , UART4, 7}, + {P8_11 , UART5, 5}, + {P5_7 , UART6, 5}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_UART_CTS[] = { +#ifdef MAX_PERI + {P2_3 , UART1, 6}, + {P9_5 , UART1, 4}, + {P6_3 , UART5, 5}, + {P7_15 , UART5, 4}, + {P7_6 , UART7, 4}, + {NC , NC , 0} +#else + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_UART_RTS[] = { +#ifdef MAX_PERI + {P2_7 , UART1, 6}, + {P9_6 , UART1, 4}, + {P6_4 , UART5, 5}, + {P8_3 , UART5, 4}, + {P7_7 , UART7, 4}, + {NC , NC , 0} +#else + {NC , NC , 0} +#endif +}; + +/************SPI***************/ +const PinMap PinMap_SPI_SCLK[] = { +#ifdef MAX_PERI + {P2_12 , SPI_0, 2}, + {P7_15 , SPI_0, 2}, + {P4_4 , SPI_1, 2}, + {P6_4 , SPI_1, 7}, + {P8_3 , SPI_2, 3}, + {P8_14 , SPI_2, 5}, + {P3_0 , SPI_3, 8}, + {P5_0 , SPI_3, 8}, + {P2_8 , SPI_4, 8}, + {P4_0 , SPI_4, 7}, + {NC , NC , 0} +#else + {P4_4 , SPI_1, 2}, + {P8_14 , SPI_2, 5}, + {P5_0 , SPI_3, 8}, + {P4_0 , SPI_4, 7}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_SPI_MOSI[] = { +#ifdef MAX_PERI + {P2_14 , SPI_0, 2}, + {P8_1 , SPI_0, 2}, + {P4_6 , SPI_1, 2}, + {P6_6 , SPI_1, 7}, + {P8_5 , SPI_2, 3}, + {P9_0 , SPI_2, 5}, + {P3_2 , SPI_3, 8}, + {P5_2 , SPI_3, 8}, + {P2_10 , SPI_4, 8}, + {P4_2 , SPI_4, 7}, + {NC , NC , 0} +#else + {P4_6 , SPI_1, 2}, + {P9_0 , SPI_2, 5}, + {P5_2 , SPI_3, 8}, + {P4_2 , SPI_4, 7}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_SPI_MISO[] = { +#ifdef MAX_PERI + {P2_15 , SPI_0, 2}, + {P8_2 , SPI_0, 2}, + {P4_7 , SPI_1, 2}, + {P6_7 , SPI_1, 7}, + {P8_6 , SPI_2, 3}, + {P9_1 , SPI_2, 5}, + {P3_3 , SPI_3, 8}, + {P5_3 , SPI_3, 8}, + {P2_11 , SPI_4, 8}, + {P4_3 , SPI_4, 7}, + {NC , NC , 0} +#else + {P4_7 , SPI_1, 2}, + {P9_1 , SPI_2, 5}, + {P5_3 , SPI_3, 8}, + {P4_3 , SPI_4, 7}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_SPI_SSEL[] = { +#ifdef MAX_PERI + {P2_13 , SPI_0, 2}, + {P8_0 , SPI_0, 2}, + {P4_5 , SPI_1, 2}, + {P6_5 , SPI_1, 7}, + {P8_4 , SPI_2, 3}, + {P8_15 , SPI_2, 5}, + {P3_1 , SPI_3, 8}, + {P5_1 , SPI_3, 8}, + {P2_9 , SPI_4, 8}, + {P4_1 , SPI_4, 7}, + {NC , NC , 0} +#else + {P4_5 , SPI_1, 2}, + {P8_15 , SPI_2, 5}, + {P5_1 , SPI_3, 8}, + {P4_1 , SPI_4, 7}, + {NC , NC , 0} +#endif +}; + +/************PWM***************/ +const PinMap PinMap_PWM[] = { +#ifdef MAX_PERI + // TIOC0 A,C + {P4_0 , PWM_TIOC0A, 2}, //TIOC0A + {P5_0 , PWM_TIOC0A, 6}, //TIOC0A + {P7_0 , PWM_TIOC0A, 7}, //TIOC0A + {P4_2 , PWM_TIOC0C, 2}, //TIOC0C + {P5_5 , PWM_TIOC0C, 6}, //TIOC0C + {P7_2 , PWM_TIOC0C, 7}, //TIOC0C + //TIOC1 A + {P2_11 , PWM_TIOC1A, 5}, //TIOC1A + {P6_0 , PWM_TIOC1A, 5}, //TIOC1A + {P7_4 , PWM_TIOC1A, 7}, //TIOC1A + {P8_8 , PWM_TIOC1A, 5}, //TIOC1A + {P9_7 , PWM_TIOC1A, 4}, //TIOC1A + //TIOC2 A + {P2_1 , PWM_TIOC2A, 6}, //TIOC2A + {P6_2 , PWM_TIOC2A, 6}, //TIOC2A + {P7_6 , PWM_TIOC2A, 7}, //TIOC2A + {P8_14 , PWM_TIOC2A, 4}, //TIOC2A + //TIOC3 A,C + {P3_4 , PWM_TIOC3A, 6}, //TIOC3A + {P7_8 , PWM_TIOC3A, 7}, //TIOC3A + {P8_10 , PWM_TIOC3A, 4}, //TIOC3A + {P3_6 , PWM_TIOC3C, 6}, //TIOC3C + {P7_10 , PWM_TIOC3C, 7}, //TIOC3C + {P8_12 , PWM_TIOC3C, 4}, //TIOC3C + //TIOC4 A,C + {P3_8 , PWM_TIOC4A, 6}, //TIOC4A + {P4_4 , PWM_TIOC4A, 3}, //TIOC4A + {P7_12 , PWM_TIOC4A, 7}, //TIOC4A + {P3_10 , PWM_TIOC4C, 6}, //TIOC4C + {P4_6 , PWM_TIOC4C, 3}, //TIOC4C + {P7_14 , PWM_TIOC4C, 7}, //TIOC4C + //PWM1 + {P8_8 , PWM_PWM1A , 6}, //PWM1A + {P8_9 , PWM_PWM1B , 6}, //PWM1B + {P8_10 , PWM_PWM1C , 6}, //PWM1C + {P8_11 , PWM_PWM1D , 6}, //PWM1D + {P8_12 , PWM_PWM1E , 6}, //PWM1E + {P8_13 , PWM_PWM1F , 6}, //PWM1F + {P8_14 , PWM_PWM1G , 6}, //PWM1G + {P8_15 , PWM_PWM1H , 6}, //PWM1H + //PWM2 + {P3_0 , PWM_PWM2A , 7}, //PWM2A + {P3_1 , PWM_PWM2B , 7}, //PWM2B + {P3_2 , PWM_PWM2C , 7}, //PWM2C + {P3_3 , PWM_PWM2D , 7}, //PWM2D + {P4_4 , PWM_PWM2E , 4}, //PWM2E + {P4_5 , PWM_PWM2F , 4}, //PWM2F + {P4_6 , PWM_PWM2G , 4}, //PWM2G + {P4_7 , PWM_PWM2H , 4}, //PWM2H + {NC , NC , 0} +#else + //TIOC0 A,C + {P4_0 , PWM_TIOC0A, 2}, //TIOC0A + {P5_0 , PWM_TIOC0A, 6}, //TIOC0A + {P4_2 , PWM_TIOC0C, 2}, //TIOC0C + {P5_5 , PWM_TIOC0C, 6}, //TIOC0C + //TIOC2 A + {P8_14 , PWM_TIOC2A, 4}, //TIOC2A + //TIOC3 A,C + {P8_10 , PWM_TIOC3A, 4}, //TIOC3A + {P5_3 , PWM_TIOC3C, 6}, //TIOC3C + {P8_12 , PWM_TIOC3C, 4}, //TIOC3C + //TIOC4 A,C + {P3_8 , PWM_TIOC4A, 6}, //TIOC4A + {P4_4 , PWM_TIOC4A, 3}, //TIOC4A + {P3_10 , PWM_TIOC4C, 6}, //TIOC4C + {P4_6 , PWM_TIOC4C, 3}, //TIOC4C + //PWM1 + {P8_10 , PWM_PWM1C , 6}, //PWM1C + {P8_11 , PWM_PWM1D , 6}, //PWM1D + {P8_12 , PWM_PWM1E , 6}, //PWM1E + {P8_13 , PWM_PWM1F , 6}, //PWM1F + {P8_14 , PWM_PWM1G , 6}, //PWM1G + {P8_15 , PWM_PWM1H , 6}, //PWM1H + //PWM2 + {P3_0 , PWM_PWM2A , 7}, //PWM2A + {P3_1 , PWM_PWM2B , 7}, //PWM2B + {P3_2 , PWM_PWM2C , 7}, //PWM2C + {P4_4 , PWM_PWM2E , 4}, //PWM2E + {P4_5 , PWM_PWM2F , 4}, //PWM2F + {P4_6 , PWM_PWM2G , 4}, //PWM2G + {P4_7 , PWM_PWM2H , 4}, //PWM2H + {NC , NC , 0} +#endif +}; + +/************CAN***************/ +const PinMap PinMap_CAN_RD[] = { +#ifdef MAX_PERI + {P7_8 , CAN_0, 4}, + {P9_1 , CAN_0, 3}, + {P1_4 , CAN_1, 3}, + {P5_9 , CAN_1, 5}, + {P7_11 , CAN_1, 4}, + {P4_9 , CAN_2, 6}, + {P6_4 , CAN_2, 3}, + {P7_2 , CAN_2, 5}, + {P2_12 , CAN_3, 5}, + {P4_2 , CAN_3, 4}, + {P1_5 , CAN_4, 3}, + {P2_14 , CAN_4, 5}, + {NC , NC , 0} +#else + {P9_1 , CAN_0, 3}, + {P1_4 , CAN_1, 3}, + {P5_9 , CAN_1, 5}, + {P4_2 , CAN_3, 4}, + {P1_5 , CAN_4, 3}, + {NC , NC , 0} +#endif +}; + +const PinMap PinMap_CAN_TD[] = { +#ifdef MAX_PERI + {P7_9 , CAN_0, 4}, + {P9_0 , CAN_0, 3}, + {P5_10 , CAN_1, 5}, + {P7_10 , CAN_1, 4}, + {P4_8 , CAN_2, 6}, + {P6_5 , CAN_2, 3}, + {P7_3 , CAN_2, 5}, + {P2_13 , CAN_3, 5}, + {P4_3 , CAN_3, 4}, + {P4_11 , CAN_4, 6}, + {P8_10 , CAN_4, 5}, + {NC , NC , 0} +#else + {P9_0 , CAN_0, 3}, + {P5_10 , CAN_1, 5}, + {P4_3 , CAN_3, 4}, + {P8_10 , CAN_4, 5}, + {NC , NC , 0} +#endif +}; + diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c deleted file mode 100644 index caada57bf3..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/analogin_api.c +++ /dev/null @@ -1,133 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "mbed_assert.h" -#include "analogin_api.h" - -#include "cmsis.h" -#include "pinmap.h" - -#include "adc_iodefine.h" -#include "cpg_iodefine.h" - -#define ANALOGIN_MEDIAN_FILTER 0 - -#ifdef MAX_PERI -static const PinMap PinMap_ADC[] = { - {P1_8, AN0, 1}, - {P1_9, AN1, 1}, - {P1_10, AN2, 1}, - {P1_11, AN3, 1}, - {P1_12, AN4, 1}, - {P1_13, AN5, 1}, - {P1_14, AN6, 1}, - {P1_15, AN7, 1}, - {NC, NC, 0} -}; -#else -static const PinMap PinMap_ADC[] = { - {P1_8, AN0, 1}, - {P1_9, AN1, 1}, - {P1_10, AN2, 1}, - {P1_11, AN3, 1}, - {P1_12, AN4, 1}, - {P1_13, AN5, 1}, - {P1_15, AN7, 1}, - {NC, NC, 0} -}; -#endif - -static volatile uint16_t *ADCDR[] = { - &ADCADDRA, - &ADCADDRB, - &ADCADDRC, - &ADCADDRD, - &ADCADDRE, - &ADCADDRF, - &ADCADDRG, - &ADCADDRH, -}; - -void analogin_init(analogin_t *obj, PinName pin) { - obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); - MBED_ASSERT(obj->adc != (ADCName)NC); - - CPGSTBCR3 &= ~(1 << 1); - CPGSTBCR6 &= ~(1 << 7); - - // 15: ADF 14: ADIE 13: ADST, [12:9] TRGS..0 - // [8:6] CKS 010 :: 340tclk - // [5:3] MDS 000 :: single mode - // [2:0] CH 000 :: AN0 - ADCADCSR = 0x0080; - - pinmap_pinout(pin, PinMap_ADC); -} - -static inline uint32_t adc_read(analogin_t *obj) { - volatile uint16_t data; - - // Select the appropriate channel and start conversion - ADCADCSR &= 0xfff8; - ADCADCSR |= (1 << 13 | (obj->adc & 0x7)); - - // Wait end of conversion - do { - data = ADCADCSR; - } while (((data & (1 << 15)) == 0) || ((data & (1 << 13)) != 0)); - - // clear flag - ADCADCSR &= ~(1 << 15); - - return ((*(ADCDR[obj->adc])) >> 4) & 0x0FFF; // 12 bits range -} - -#if ANALOGIN_MEDIAN_FILTER -static inline void order(uint32_t *a, uint32_t *b) { - if (*a > *b) { - uint32_t t = *a; - *a = *b; - *b = t; - } -} -#endif - -static inline uint32_t adc_read_u32(analogin_t *obj) { - uint32_t value; -#if ANALOGIN_MEDIAN_FILTER - uint32_t v1 = adc_read(obj); - uint32_t v2 = adc_read(obj); - uint32_t v3 = adc_read(obj); - order(&v1, &v2); - order(&v2, &v3); - order(&v1, &v2); - value = v2; -#else - value = adc_read(obj); -#endif - return value; -} - -uint16_t analogin_read_u16(analogin_t *obj) { - uint32_t value = adc_read_u32(obj); - - return (value << 4) | ((value >> 8) & 0x000F); // 12-bit to 16-bit conversion -} - -float analogin_read(analogin_t *obj) { - uint32_t value = adc_read_u32(obj); - - return (float)value * (1.0f / (float)0x0FFF); // 12 bits range -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c deleted file mode 100644 index ea826157ca..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/can_api.c +++ /dev/null @@ -1,1042 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include -#include "mbed_assert.h" -#include "can_api.h" -#include "RZ_A1_Init.h" -#include "cmsis.h" -#include "pinmap.h" -#include "rscan0_iodefine.h" -#include "r_typedefs.h" -#include "VKRZA1H.h" - -#define CAN_NUM 5 -#define CAN_SND_RCV 2 -#define IRQ_NUM 8 - -static void can_rec_irq(uint32_t ch); -static void can_trx_irq(uint32_t ch); -static void can_err_irq(uint32_t ch, CanIrqType type); -static void can0_rec_irq(void); -static void can1_rec_irq(void); -static void can2_rec_irq(void); -static void can3_rec_irq(void); -static void can4_rec_irq(void); -static void can0_trx_irq(void); -static void can1_trx_irq(void); -static void can2_trx_irq(void); -static void can3_trx_irq(void); -static void can4_trx_irq(void); -static void can0_err_warning_irq(void); -static void can1_err_warning_irq(void); -static void can2_err_warning_irq(void); -static void can3_err_warning_irq(void); -static void can4_err_warning_irq(void); -static void can0_overrun_irq(void); -static void can1_overrun_irq(void); -static void can2_overrun_irq(void); -static void can3_overrun_irq(void); -static void can4_overrun_irq(void); -static void can0_passive_irq(void); -static void can1_passive_irq(void); -static void can2_passive_irq(void); -static void can3_passive_irq(void); -static void can4_passive_irq(void); -static void can0_arb_lost_irq(void); -static void can1_arb_lost_irq(void); -static void can2_arb_lost_irq(void); -static void can3_arb_lost_irq(void); -static void can4_arb_lost_irq(void); -static void can0_bus_err_irq(void); -static void can1_bus_err_irq(void); -static void can2_bus_err_irq(void); -static void can3_bus_err_irq(void); -static void can4_bus_err_irq(void); -static void can_reset_reg(can_t *obj); -static void can_reset_recv_rule(can_t *obj); -static void can_reset_buffer(can_t *obj); -static void can_reconfigure_channel(void); -static void can_set_frequency(can_t *obj, int f); -static void can_set_global_mode(int mode); -static void can_set_channel_mode(uint32_t ch, int mode); - -typedef enum { - CAN_SEND = 0, - CAN_RECV -} CANfunc; - -typedef enum { - GL_OPE = 0, - GL_RESET, - GL_TEST -} Globalmode; - -typedef enum { - CH_COMM = 0, - CH_RESET, - CH_HOLD -} Channelmode; - -typedef struct { - IRQn_Type int_num; /* Interrupt number */ - IRQHandler handler; /* Interrupt handler */ -} can_info_int_t; - -static can_irq_handler irq_handler; -static uint32_t can_irq_id[CAN_NUM]; -static int can_initialized[CAN_NUM] = {0}; - -#ifdef MAX_PERI -static const PinMap PinMap_CAN_RD[] = { - {P7_8 , CAN_0, 4}, - {P9_1 , CAN_0, 3}, - {P1_4 , CAN_1, 3}, - {P5_9 , CAN_1, 5}, - {P7_11 , CAN_1, 4}, - {P4_9 , CAN_2, 6}, - {P6_4 , CAN_2, 3}, - {P7_2 , CAN_2, 5}, - {P2_12 , CAN_3, 5}, - {P4_2 , CAN_3, 4}, - {P1_5 , CAN_4, 3}, - {P2_14 , CAN_4, 5}, - {NC , NC , 0} -}; - -static const PinMap PinMap_CAN_TD[] = { - {P7_9 , CAN_0, 4}, - {P9_0 , CAN_0, 3}, - {P5_10 , CAN_1, 5}, - {P7_10 , CAN_1, 4}, - {P4_8 , CAN_2, 6}, - {P6_5 , CAN_2, 3}, - {P7_3 , CAN_2, 5}, - {P2_13 , CAN_3, 5}, - {P4_3 , CAN_3, 4}, - {P4_11 , CAN_4, 6}, - {P8_10 , CAN_4, 5}, - {NC , NC , 0} -}; -#else -static const PinMap PinMap_CAN_RD[] = { - {P9_1 , CAN_0, 3}, - {P1_4 , CAN_1, 3}, - {P5_9 , CAN_1, 5}, - {P4_2 , CAN_3, 4}, - {P1_5 , CAN_4, 3}, - {NC , NC , 0} -}; - -static const PinMap PinMap_CAN_TD[] = { - {P9_0 , CAN_0, 3}, - {P5_10 , CAN_1, 5}, - {P4_3 , CAN_3, 4}, - {P8_10 , CAN_4, 5}, - {NC , NC , 0} -}; -#endif - -static __IO uint32_t *CTR_MATCH[] = { - &RSCAN0C0CTR, - &RSCAN0C1CTR, - &RSCAN0C2CTR, - &RSCAN0C3CTR, - &RSCAN0C4CTR, -}; - -static __IO uint32_t *CFG_MATCH[] = { - &RSCAN0C0CFG, - &RSCAN0C1CFG, - &RSCAN0C2CFG, - &RSCAN0C3CFG, - &RSCAN0C4CFG, -}; - -static __IO uint32_t *RFCC_MATCH[] = { - &RSCAN0RFCC0, - &RSCAN0RFCC1, - &RSCAN0RFCC2, - &RSCAN0RFCC3, - &RSCAN0RFCC4, - &RSCAN0RFCC5, - &RSCAN0RFCC6, - &RSCAN0RFCC7 -}; - -static __IO uint32_t *TXQCC_MATCH[] = { - &RSCAN0TXQCC0, - &RSCAN0TXQCC1, - &RSCAN0TXQCC2, - &RSCAN0TXQCC3, - &RSCAN0TXQCC4, -}; - -static __IO uint32_t *THLCC_MATCH[] = { - &RSCAN0THLCC0, - &RSCAN0THLCC1, - &RSCAN0THLCC2, - &RSCAN0THLCC3, - &RSCAN0THLCC4, -}; - -static __IO uint32_t *STS_MATCH[] = { - &RSCAN0C0STS, - &RSCAN0C1STS, - &RSCAN0C2STS, - &RSCAN0C3STS, - &RSCAN0C4STS, -}; - -static __IO uint32_t *ERFL_MATCH[] = { - &RSCAN0C0ERFL, - &RSCAN0C1ERFL, - &RSCAN0C2ERFL, - &RSCAN0C3ERFL, - &RSCAN0C4ERFL, -}; - -static __IO uint32_t *CFCC_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFCC0 , &RSCAN0CFCC1 }, - { &RSCAN0CFCC3 , &RSCAN0CFCC4 }, - { &RSCAN0CFCC6 , &RSCAN0CFCC7 }, - { &RSCAN0CFCC9 , &RSCAN0CFCC10 }, - { &RSCAN0CFCC12, &RSCAN0CFCC13 } -}; - -static __IO uint32_t *CFSTS_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFSTS0 , &RSCAN0CFSTS1 }, - { &RSCAN0CFSTS3 , &RSCAN0CFSTS4 }, - { &RSCAN0CFSTS6 , &RSCAN0CFSTS7 }, - { &RSCAN0CFSTS9 , &RSCAN0CFSTS10 }, - { &RSCAN0CFSTS12, &RSCAN0CFSTS13 } -}; - -static __IO uint32_t *CFPCTR_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFPCTR0 , &RSCAN0CFPCTR1 }, - { &RSCAN0CFPCTR3 , &RSCAN0CFPCTR4 }, - { &RSCAN0CFPCTR6 , &RSCAN0CFPCTR7 }, - { &RSCAN0CFPCTR9 , &RSCAN0CFPCTR10 }, - { &RSCAN0CFPCTR12, &RSCAN0CFPCTR13 } -}; - -static __IO uint32_t *CFID_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFID0 , &RSCAN0CFID1 }, - { &RSCAN0CFID3 , &RSCAN0CFID4 }, - { &RSCAN0CFID6 , &RSCAN0CFID7 }, - { &RSCAN0CFID9 , &RSCAN0CFID10 }, - { &RSCAN0CFID12, &RSCAN0CFID13 } -}; - -static __IO uint32_t *CFPTR_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFPTR0 , &RSCAN0CFPTR1 }, - { &RSCAN0CFPTR3 , &RSCAN0CFPTR4 }, - { &RSCAN0CFPTR6 , &RSCAN0CFPTR7 }, - { &RSCAN0CFPTR9 , &RSCAN0CFPTR10 }, - { &RSCAN0CFPTR12, &RSCAN0CFPTR13 } -}; - -static __IO uint32_t *CFDF0_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFDF00 , &RSCAN0CFDF01 }, - { &RSCAN0CFDF03 , &RSCAN0CFDF04 }, - { &RSCAN0CFDF06 , &RSCAN0CFDF07 }, - { &RSCAN0CFDF09 , &RSCAN0CFDF010 }, - { &RSCAN0CFDF012, &RSCAN0CFDF013 } -}; - -static __IO uint32_t *CFDF1_TBL[CAN_NUM][CAN_SND_RCV] = { - { &RSCAN0CFDF10 , &RSCAN0CFDF11 }, - { &RSCAN0CFDF13 , &RSCAN0CFDF14 }, - { &RSCAN0CFDF16 , &RSCAN0CFDF17 }, - { &RSCAN0CFDF19 , &RSCAN0CFDF110 }, - { &RSCAN0CFDF112, &RSCAN0CFDF113 } -}; - -static const can_info_int_t can_int_info[CAN_NUM][IRQ_NUM] = -{ - { /* ch0 */ - { INTRCAN0REC_IRQn, can0_rec_irq }, /* RxIrq */ - { INTRCAN0TRX_IRQn, can0_trx_irq }, /* TxIrq */ - { INTRCAN0ERR_IRQn, can0_err_warning_irq }, /* EwIrq */ - { INTRCAN0ERR_IRQn, can0_overrun_irq }, /* DoIrq */ - { INTRCAN0ERR_IRQn, NULL }, /* WuIrq(not supported) */ - { INTRCAN0ERR_IRQn, can0_passive_irq }, /* EpIrq */ - { INTRCAN0ERR_IRQn, can0_arb_lost_irq }, /* AlIrq */ - { INTRCAN0ERR_IRQn, can0_bus_err_irq } /* BeIrq */ - }, - { /* ch1 */ - { INTRCAN1REC_IRQn, can1_rec_irq }, /* RxIrq */ - { INTRCAN1TRX_IRQn, can1_trx_irq }, /* TxIrq */ - { INTRCAN1ERR_IRQn, can1_err_warning_irq }, /* EwIrq */ - { INTRCAN1ERR_IRQn, can1_overrun_irq }, /* DoIrq */ - { INTRCAN1ERR_IRQn, NULL }, /* WuIrq(not supported) */ - { INTRCAN1ERR_IRQn, can1_passive_irq }, /* EpIrq */ - { INTRCAN1ERR_IRQn, can1_arb_lost_irq }, /* AlIrq */ - { INTRCAN1ERR_IRQn, can1_bus_err_irq } /* BeIrq */ - }, - { /* ch2 */ - { INTRCAN2REC_IRQn, can2_rec_irq }, /* RxIrq */ - { INTRCAN2TRX_IRQn, can2_trx_irq }, /* TxIrq */ - { INTRCAN2ERR_IRQn, can2_err_warning_irq }, /* EwIrq */ - { INTRCAN2ERR_IRQn, can2_overrun_irq }, /* DoIrq */ - { INTRCAN2ERR_IRQn, NULL }, /* WuIrq(not supported) */ - { INTRCAN2ERR_IRQn, can2_passive_irq }, /* EpIrq */ - { INTRCAN2ERR_IRQn, can2_arb_lost_irq }, /* AlIrq */ - { INTRCAN2ERR_IRQn, can2_bus_err_irq } /* BeIrq */ - }, - { /* ch3 */ - { INTRCAN3REC_IRQn, can3_rec_irq }, /* RxIrq */ - { INTRCAN3TRX_IRQn, can3_trx_irq }, /* TxIrq */ - { INTRCAN3ERR_IRQn, can3_err_warning_irq }, /* EwIrq */ - { INTRCAN3ERR_IRQn, can3_overrun_irq }, /* DoIrq */ - { INTRCAN3ERR_IRQn, NULL }, /* WuIrq(not supported) */ - { INTRCAN3ERR_IRQn, can3_passive_irq }, /* EpIrq */ - { INTRCAN3ERR_IRQn, can3_arb_lost_irq }, /* AlIrq */ - { INTRCAN3ERR_IRQn, can3_bus_err_irq } /* BeIrq */ - }, - { /* ch4 */ - { INTRCAN4REC_IRQn, can4_rec_irq }, /* RxIrq */ - { INTRCAN4TRX_IRQn, can4_trx_irq }, /* TxIrq */ - { INTRCAN4ERR_IRQn, can4_err_warning_irq }, /* EwIrq */ - { INTRCAN4ERR_IRQn, can4_overrun_irq }, /* DoIrq */ - { INTRCAN4ERR_IRQn, NULL }, /* WuIrq(not supported) */ - { INTRCAN4ERR_IRQn, can4_passive_irq }, /* EpIrq */ - { INTRCAN4ERR_IRQn, can4_arb_lost_irq }, /* AlIrq */ - { INTRCAN4ERR_IRQn, can4_bus_err_irq } /* BeIrq */ - } -}; - -static __IO uint32_t *dmy_gaflid = &RSCAN0GAFLID0; -static __IO uint32_t *dmy_gaflm = &RSCAN0GAFLM0; -static __IO uint32_t *dmy_gaflp0 = &RSCAN0GAFLP00; -static __IO uint32_t *dmy_gaflp1 = &RSCAN0GAFLP10; - -void can_irq_init(can_t *obj, can_irq_handler handler, uint32_t id) { - irq_handler = handler; - can_irq_id[obj->ch] = id; -} - -void can_irq_free(can_t *obj) { - can_irq_id[obj->ch] = 0; -} - -void can_irq_set(can_t *obj, CanIrqType type, uint32_t enable) { - __IO uint32_t *dmy_ctr; - - /* Wake-up Irq is not supported */ - if (type != IRQ_WAKEUP) { - if (enable) { - dmy_ctr = CTR_MATCH[obj->ch]; - if (type == IRQ_ERROR) { - /* EWIE interrupts is enable */ - *dmy_ctr |= 0x00000200; - } else if (type == IRQ_OVERRUN) { - /* OLIE interrupts is enable */ - *dmy_ctr |= 0x00002000; - } else if (type == IRQ_PASSIVE) { - /* EPIE interrupts is enable */ - *dmy_ctr |= 0x00000400; - } else if (type == IRQ_ARB) { - /* ALIE interrupts is enable */ - *dmy_ctr |= 0x00008000; - } else if (type == IRQ_BUS) { - /* BEIE interrupts is enable */ - *dmy_ctr |= 0x00000100; - } - InterruptHandlerRegister(can_int_info[obj->ch][type].int_num, can_int_info[obj->ch][type].handler); - GIC_SetPriority(can_int_info[obj->ch][type].int_num, 5); - GIC_EnableIRQ(can_int_info[obj->ch][type].int_num); - } else { - GIC_DisableIRQ(can_int_info[obj->ch][type].int_num); - } - } -} - -static void can_rec_irq(uint32_t ch) { - __IO uint32_t *dmy_cfsts; - - dmy_cfsts = CFSTS_TBL[ch][CAN_RECV]; - *dmy_cfsts &= 0xFFFFFFF7; // Clear CFRXIF - - irq_handler(can_irq_id[ch], IRQ_RX); -} - -static void can_trx_irq(uint32_t ch) { - __IO uint32_t *dmy_cfsts; - - dmy_cfsts = CFSTS_TBL[ch][CAN_SEND]; - *dmy_cfsts &= 0xFFFFFFEF; // Clear CFTXIF - - irq_handler(can_irq_id[ch], IRQ_TX); -} - -static void can_err_irq(uint32_t ch, CanIrqType type) { - __IO uint32_t *dmy_erfl; - int val = 1; - - dmy_erfl = ERFL_MATCH[ch]; - switch (type) { - case IRQ_ERROR: - *dmy_erfl &= 0xFFFFFFFD; // Clear EWF - break; - case IRQ_OVERRUN: - *dmy_erfl &= 0xFFFFFFDF; // Clear OVLF - break; - case IRQ_PASSIVE: - *dmy_erfl &= 0xFFFFFFFB; // Clear EPF - break; - case IRQ_ARB: - *dmy_erfl &= 0xFFFFFF7F; // Clear ALF - break; - case IRQ_BUS: - *dmy_erfl &= 0xFFFF00FF; // Clear ADERRAB0ERRAB1ERRACERRAAERRAFERRASERR - *dmy_erfl &= 0xFFFFFFFE; // Clear BEF - break; - case IRQ_WAKEUP: - /* not supported */ - /* fall through */ - default: - val = 0; - break; - } - if (val == 1) { - irq_handler(can_irq_id[ch], type); - } -} - -static void can0_rec_irq(void) { - can_rec_irq(CAN_0); -} - -static void can1_rec_irq(void) { - can_rec_irq(CAN_1); -} - -static void can2_rec_irq(void) { - can_rec_irq(CAN_2); -} - -static void can3_rec_irq(void) { - can_rec_irq(CAN_3); -} - -static void can4_rec_irq(void) { - can_rec_irq(CAN_4); -} - -static void can0_trx_irq(void) { - can_trx_irq(CAN_0); -} - -static void can1_trx_irq(void) { - can_trx_irq(CAN_1); -} - -static void can2_trx_irq(void) { - can_trx_irq(CAN_2); -} - -static void can3_trx_irq(void) { - can_trx_irq(CAN_3); -} - -static void can4_trx_irq(void) { - can_trx_irq(CAN_4); -} - -static void can0_err_warning_irq(void) { - can_err_irq(CAN_0, IRQ_ERROR); -} - -static void can1_err_warning_irq(void) { - can_err_irq(CAN_1, IRQ_ERROR); -} - -static void can2_err_warning_irq(void) { - can_err_irq(CAN_2, IRQ_ERROR); -} - -static void can3_err_warning_irq(void) { - can_err_irq(CAN_3, IRQ_ERROR); -} - -static void can4_err_warning_irq(void) { - can_err_irq(CAN_4, IRQ_ERROR); -} - -static void can0_overrun_irq(void) { - can_err_irq(CAN_0, IRQ_OVERRUN); -} - -static void can1_overrun_irq(void) { - can_err_irq(CAN_1, IRQ_OVERRUN); -} - -static void can2_overrun_irq(void) { - can_err_irq(CAN_2, IRQ_OVERRUN); -} - -static void can3_overrun_irq(void) { - can_err_irq(CAN_3, IRQ_OVERRUN); -} - -static void can4_overrun_irq(void) { - can_err_irq(CAN_4, IRQ_OVERRUN); -} - -static void can0_passive_irq(void) { - can_err_irq(CAN_0, IRQ_PASSIVE); -} - -static void can1_passive_irq(void) { - can_err_irq(CAN_1, IRQ_PASSIVE); -} - -static void can2_passive_irq(void) { - can_err_irq(CAN_2, IRQ_PASSIVE); -} - -static void can3_passive_irq(void) { - can_err_irq(CAN_3, IRQ_PASSIVE); -} - -static void can4_passive_irq(void) { - can_err_irq(CAN_4, IRQ_PASSIVE); -} - -static void can0_arb_lost_irq(void) { - can_err_irq(CAN_0, IRQ_ARB); -} - -static void can1_arb_lost_irq(void) { - can_err_irq(CAN_1, IRQ_ARB); -} - -static void can2_arb_lost_irq(void) { - can_err_irq(CAN_2, IRQ_ARB); -} - -static void can3_arb_lost_irq(void) { - can_err_irq(CAN_3, IRQ_ARB); -} - -static void can4_arb_lost_irq(void) { - can_err_irq(CAN_4, IRQ_ARB); -} - -static void can0_bus_err_irq(void) { - can_err_irq(CAN_0, IRQ_BUS); -} - -static void can1_bus_err_irq(void) { - can_err_irq(CAN_1, IRQ_BUS); -} - -static void can2_bus_err_irq(void) { - can_err_irq(CAN_2, IRQ_BUS); -} - -static void can3_bus_err_irq(void) { - can_err_irq(CAN_3, IRQ_BUS); -} - -static void can4_bus_err_irq(void) { - can_err_irq(CAN_4, IRQ_BUS); -} - -void can_init_freq(can_t *obj, PinName rd, PinName td, int hz) { - __IO uint32_t *dmy_ctr; - - /* determine the CAN to use */ - uint32_t can_rx = pinmap_peripheral(rd, PinMap_CAN_RD); - uint32_t can_tx = pinmap_peripheral(td, PinMap_CAN_TD); - obj->ch = pinmap_merge(can_tx, can_rx); - MBED_ASSERT((int)obj->ch != NC); - - /* enable CAN clock */ - CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP32); - /* Has CAN RAM initialisation completed ? */ - while ((RSCAN0GSTS & 0x08) == 0x08) { - __NOP(); - } - /* clear Global Stop mode bit */ - RSCAN0GCTR &= 0xFFFFFFFB; - /* clear Channel Stop mode bit */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr &= 0xFFFFFFFB; - /* Enter global reset mode */ - can_set_global_mode(GL_RESET); - /* Enter channel reset mode */ - can_set_channel_mode(obj->ch, CH_RESET); - /* reset register */ - can_reset_reg(obj); - - can_initialized[obj->ch] = 1; - /* reconfigure channel which is already initialized */ - can_reconfigure_channel(); - - /* pin out the can pins */ - pinmap_pinout(rd, PinMap_CAN_RD); - pinmap_pinout(td, PinMap_CAN_TD); - - /* set can frequency */ - can_frequency(obj, hz); -} - -void can_init(can_t *obj, PinName rd, PinName td) { - can_init_freq(obj, rd, td, 100000); -} - -void can_free(can_t *obj) { - /* disable CAN clock */ - CPGSTBCR3 |= CPG_STBCR3_BIT_MSTP32; -} - -int can_frequency(can_t *obj, int f) { - __IO uint32_t *dmy_cfcc; - int retval = 0; - - if (f <= 1000000) { - /* less than 1Mhz */ - /* set Channel Reset mode */ - can_set_channel_mode(obj->ch, CH_RESET); - can_set_frequency(obj, f); - /* set Channel Communication mode */ - can_set_channel_mode(obj->ch, CH_COMM); - /* restore CFE bit since it is cleared */ - /* Use send/receive FIFO buffer */ - dmy_cfcc = CFCC_TBL[obj->ch][CAN_SEND]; - *dmy_cfcc |= 0x01; - dmy_cfcc = CFCC_TBL[obj->ch][CAN_RECV]; - *dmy_cfcc |= 0x01; - retval = 1; - } - - return retval; -} - -void can_reset(can_t *obj) { - /* Enter global reset mode */ - can_set_global_mode(GL_RESET); - /* Enter channel reset mode */ - can_set_channel_mode(obj->ch, CH_RESET); - /* reset register */ - can_reset_reg(obj); - /* reconfigure channel which is already initialized */ - can_reconfigure_channel(); -} - -int can_write(can_t *obj, CAN_Message msg, int cc) { - __IO uint32_t *dmy_sts; - __IO uint32_t *dmy_cfsts; - __IO uint32_t *dmy_cfid; - __IO uint32_t *dmy_cfptr; - __IO uint32_t *dmy_cfdf0; - __IO uint32_t *dmy_cfdf1; - __IO uint32_t *dmy_cfpctr; - int retval = 0; - - /* Wait to become channel communication mode */ - dmy_sts = STS_MATCH[obj->ch]; - while ((*dmy_sts & 0x07) != 0) { - __NOP(); - } - - if (((msg.format == CANStandard) && (msg.id <= 0x07FF)) || ((msg.format == CANExtended) && (msg.id <= 0x1FFFFFFF))) { - /* send/receive FIFO buffer isn't full */ - dmy_cfsts = CFSTS_TBL[obj->ch][CAN_SEND]; - if ((*dmy_cfsts & 0x02) != 0x02) { - /* set format, frame type and send/receive FIFO buffer ID(b10-0 or b28-0) */ - dmy_cfid = CFID_TBL[obj->ch][CAN_SEND]; - *dmy_cfid = ((msg.format << 31) | (msg.type << 30)); - if (msg.format == CANStandard) { - *dmy_cfid |= (msg.id & 0x07FF); - } else { - *dmy_cfid |= (msg.id & 0x1FFFFFFF); - } - /* set length */ - dmy_cfptr = CFPTR_TBL[obj->ch][CAN_SEND]; - *dmy_cfptr = msg.len << 28; - /* set data */ - dmy_cfdf0 = CFDF0_TBL[obj->ch][CAN_SEND]; - memcpy((void *)dmy_cfdf0, &msg.data[0], 4); - dmy_cfdf1 = CFDF1_TBL[obj->ch][CAN_SEND]; - memcpy((void *)dmy_cfdf1, &msg.data[4], 4); - /* send request */ - dmy_cfpctr = CFPCTR_TBL[obj->ch][CAN_SEND]; - *dmy_cfpctr = 0xFF; - retval = 1; - } - } - - return retval; -} - -int can_read(can_t *obj, CAN_Message *msg, int handle) { - __IO uint32_t *dmy_sts; - __IO uint32_t *dmy_cfsts; - __IO uint32_t *dmy_cfid; - __IO uint32_t *dmy_cfptr; - __IO uint32_t *dmy_cfdf0; - __IO uint32_t *dmy_cfdf1; - __IO uint32_t *dmy_cfpctr; - int retval = 0; - - /* Wait to become channel communication mode */ - dmy_sts = STS_MATCH[obj->ch]; - while ((*dmy_sts & 0x07) != 0) { - __NOP(); - } - - /* send/receive FIFO buffer isn't empty */ - dmy_cfsts = CFSTS_TBL[obj->ch][CAN_RECV]; - while ((*dmy_cfsts & 0x01) != 0x01) { - /* get format, frame type and send/receive FIFO buffer ID(b10-0 or b28-0) */ - dmy_cfid = CFID_TBL[obj->ch][CAN_RECV]; - msg->format = (CANFormat)(*dmy_cfid >> 31); - msg->type = (CANType)((*dmy_cfid >> 30) & 0x1); - if (msg->format == CANStandard) { - msg->id = (*dmy_cfid & 0x07FF); - } else { - msg->id = (*dmy_cfid & 0x1FFFFFFF); - } - /* get length */ - dmy_cfptr = CFPTR_TBL[obj->ch][CAN_RECV]; - msg->len = (unsigned char)(*dmy_cfptr >> 28); - /* get data */ - dmy_cfdf0 = CFDF0_TBL[obj->ch][CAN_RECV]; - memcpy(&msg->data[0], (void *)dmy_cfdf0, 4); - dmy_cfdf1 = CFDF1_TBL[obj->ch][CAN_RECV]; - memcpy(&msg->data[4], (void *)dmy_cfdf1, 4); - /* receive(next data) request */ - dmy_cfpctr = CFPCTR_TBL[obj->ch][CAN_RECV]; - *dmy_cfpctr = 0xFF; - retval = 1; - } - - return retval; -} - -unsigned char can_rderror(can_t *obj) { - __IO uint32_t *dmy_sts; - - dmy_sts = STS_MATCH[obj->ch]; - return (unsigned char)((*dmy_sts >> 16) & 0xFF); -} - -unsigned char can_tderror(can_t *obj) { - __IO uint32_t *dmy_sts; - - dmy_sts = STS_MATCH[obj->ch]; - return (unsigned char)((*dmy_sts >> 24) & 0xFF); -} - -int can_mode(can_t *obj, CanMode mode) { - __IO uint32_t *dmy_ctr; - __IO uint32_t *dmy_sts; - __IO uint32_t *dmy_cfcc; - int ch_cnt; - can_t *tmp_obj; - tmp_obj = obj; - int retval = 1; - - switch (mode) { - case MODE_RESET: - can_set_global_mode(GL_RESET); - can_set_channel_mode(obj->ch, CH_RESET); - for (ch_cnt = 0; ch_cnt < CAN_NUM; ch_cnt++) { - can_initialized[ch_cnt] = 0; - } - break; - case MODE_NORMAL: - can_set_global_mode(GL_OPE); - can_set_channel_mode(obj->ch, CH_COMM); - break; - case MODE_SILENT: - can_set_channel_mode(obj->ch, CH_HOLD); - /* set listen only mode, enable communication test mode */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr = ((*dmy_ctr & 0x00FFFFFF) | 0x03000000); - can_set_channel_mode(obj->ch, CH_COMM); - break; - case MODE_TEST_LOCAL: - can_set_channel_mode(obj->ch, CH_HOLD); - /* set self test mode 0, enable communication test mode */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr = ((*dmy_ctr & 0x00FFFFFF) | 0x05000000); - can_set_channel_mode(obj->ch, CH_COMM); - break; - case MODE_TEST_GLOBAL: - /* set the channel between the communication test on channel 1 and channel 2 */ - /* set Channel Hold mode */ - for (tmp_obj->ch = CAN_1; tmp_obj->ch <= CAN_2; tmp_obj->ch++) { - dmy_sts = STS_MATCH[tmp_obj->ch]; - if ((*dmy_sts & 0x04) == 0x04) { - /* Channel Stop mode */ - /* clear Channel Stop mode bit */ - dmy_ctr = CTR_MATCH[tmp_obj->ch]; - *dmy_ctr &= 0xFFFFFFFB; - can_set_channel_mode(tmp_obj->ch, CH_RESET); - } - can_set_channel_mode(tmp_obj->ch, CH_HOLD); - } - can_set_global_mode(GL_TEST); - /* enable communication test between channel1 and channel2 */ - RSCAN0GTSTCFG = 0x06; - RSCAN0GTSTCTR = 0x01; - /* send and receive setting of channel1 and channel2 */ - for (tmp_obj->ch = CAN_1; tmp_obj->ch <= CAN_2; tmp_obj->ch++) { - can_reset_buffer(tmp_obj); - /* set global interrrupt */ - /* THLEIE, MEIE and DEIE interrupts are disable */ - RSCAN0GCTR &= 0xFFFFF8FF; - /* BLIE, OLIE, BORIE and BOEIE interrupts are disable */ - /* TAIE, ALIE, EPIE, EWIE and BEIE interrupts are enable */ - dmy_ctr = CTR_MATCH[tmp_obj->ch]; - *dmy_ctr &= 0x00018700; - can_set_global_mode(GL_OPE); - can_set_channel_mode(tmp_obj->ch, CH_COMM); - /* Use send/receive FIFO buffer */ - dmy_cfcc = CFCC_TBL[tmp_obj->ch][CAN_SEND]; - *dmy_cfcc |= 0x01; - dmy_cfcc = CFCC_TBL[tmp_obj->ch][CAN_RECV]; - *dmy_cfcc |= 0x01; - } - break; - case MODE_TEST_SILENT: - /* not supported */ - /* fall through */ - default: - retval = 0; - break; - } - - return retval; -} - -int can_filter(can_t *obj, uint32_t id, uint32_t mask, CANFormat format, int32_t handle) { - int retval = 0; - - if ((format == CANStandard) || (format == CANExtended)) { - if (((format == CANStandard) && (id <= 0x07FF)) || ((format == CANExtended) && (id <= 0x1FFFFFFF))) { - /* set Global Reset mode and Channel Reset mode */ - can_set_global_mode(GL_RESET); - can_set_channel_mode(obj->ch, CH_RESET); - /* enable receive rule table writing */ - RSCAN0GAFLECTR = 0x00000100; - /* set the page number of receive rule table(page number = 0) */ - RSCAN0GAFLECTR |= (obj->ch * 4); - /* set IDE format */ - *dmy_gaflid = (format << 31); - if (format == CANExtended) { - /* set receive rule ID for bit28-0 */ - *dmy_gaflid |= (id & 0x1FFFFFFF); - } else { - /* set receive rule ID for bit10-0 */ - *dmy_gaflid |= (id & 0x07FF); - } - /* set ID mask bit */ - *dmy_gaflm = (0xC0000000 | mask); - /* disable receive rule table writing */ - RSCAN0GAFLECTR &= 0xFFFFFEFF; - /* reconfigure channel which is already initialized */ - can_reconfigure_channel(); - retval = 1; - } - } - - return retval; -} - -void can_monitor(can_t *obj, int silent) { - __IO uint32_t *dmy_ctr; - - /* set Channel Hold mode */ - can_set_channel_mode(obj->ch, CH_HOLD); - if (silent) { - /* set listen only mode, enable communication test mode */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr = ((*dmy_ctr & 0x00FFFFFF) | 0x03000000); - can_set_channel_mode(obj->ch, CH_COMM); - } else { - /* set normal test mode, disable communication test mode */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr &= 0x00FFFFFF; - /* reset register */ - can_reset_reg(obj); - /* reconfigure channel which is already initialized */ - can_reconfigure_channel(); - } -} - -static void can_reset_reg(can_t *obj) { - __IO uint32_t *dmy_ctr; - - /* time stamp source uses peripheral clock (pclk(P1_phi)/2), CAN clock uses clkc(P1_phi/2), */ - /* mirror off, DLC not transfer, DLC check permit, transmit buffer priority, clock source not divided */ - RSCAN0GCFG = 0x00000003; - /* set default frequency at 100k */ - can_set_frequency(obj, 100000); - /* set receive rule */ - can_reset_recv_rule(obj); - /* set buffer */ - can_reset_buffer(obj); - /* set global interrrupt */ - /* THLEIE, MEIE and DEIE interrupts are disable */ - RSCAN0GCTR &= 0xFFFFF8FF; - /* ALIE, BLIE, OLIE, BORIE, BOEIE, EPIE, EWIE and BEIE interrupts are disable */ - dmy_ctr = CTR_MATCH[obj->ch]; - *dmy_ctr &= 0xFFFF00FF; -} - -static void can_reset_recv_rule(can_t *obj) { - /* number of receive rules of each chanel = 64 */ - RSCAN0GAFLCFG0 = 0x40404040; - RSCAN0GAFLCFG1 = 0x40000000; - /* enable receive rule table writing */ - RSCAN0GAFLECTR = 0x00000100; - /* set the page number of receive rule table(ex: id ch = 1, page number = 4) */ - RSCAN0GAFLECTR |= (obj->ch * 4); - /* set standard ID, data frame and receive rule ID */ - *dmy_gaflid = 0x07FF; - /* IDE bit, RTR bit and ID bit(28-0) are not compared */ - *dmy_gaflm = 0; - /* DLC check is 1 bytes, not use a receive buffer */ - *dmy_gaflp0 = 0x10000000; - /* use a send/receive FIFO buffer(ex: if ch = 1, FIFO buffer number = 4 and bit = 12) */ - *dmy_gaflp1 = (1 << ((obj->ch + 3) * 3)); - /* disable receive rule table writing */ - RSCAN0GAFLECTR &= 0xFFFFFEFF; -} - -static void can_reset_buffer(can_t *obj) { - __IO uint32_t *dmy_rfcc; - __IO uint32_t *dmy_cfcc; - __IO uint32_t *dmy_txqcc; - __IO uint32_t *dmy_thlcc; - int cnt; - - /* set linked send buffer number(ex: if ch = 1 and mode = send, buffer number = 16), interval timer is pclk/2 */ - /* number of rows of send/receive FIFO buffer = 4 */ - dmy_cfcc = CFCC_TBL[obj->ch][CAN_SEND]; - *dmy_cfcc = 0x00011100; /* send/receive FIFO mode is send */ - dmy_cfcc = CFCC_TBL[obj->ch][CAN_RECV]; - *dmy_cfcc = 0x00001100; /* send/receive FIFO mode is receive */ - /* receive buffer is not used */ - RSCAN0RMNB = 0; - /* receive FIFO buffer is not used */ - for (cnt = 0; cnt < 8; cnt++) { - dmy_rfcc = RFCC_MATCH[cnt]; - *dmy_rfcc = 0; - } - /* send queue is not used */ - dmy_txqcc = TXQCC_MATCH[obj->ch]; - *dmy_txqcc = 0; - /* send history is not used */ - dmy_thlcc = THLCC_MATCH[obj->ch]; - *dmy_thlcc = 0; - - /* CFTXIE and CFRXIE interrupts are enable */ - dmy_cfcc = CFCC_TBL[obj->ch][CAN_SEND]; - *dmy_cfcc |= 0x04; - dmy_cfcc = CFCC_TBL[obj->ch][CAN_RECV]; - *dmy_cfcc |= 0x02; - /* TMIEp interrupt is disable */ - RSCAN0TMIEC0 = 0x00000000; - RSCAN0TMIEC1 = 0x00000000; - RSCAN0TMIEC2 = 0x00000000; -} - -static void can_reconfigure_channel(void) { - __IO uint32_t *dmy_cfcc; - int ch_cnt; - - for (ch_cnt = 0; ch_cnt < CAN_NUM; ch_cnt++) { - if (can_initialized[ch_cnt] == 1) { - /* set Global Operation mode and Channel Communication mode */ - can_set_global_mode(GL_OPE); - can_set_channel_mode(ch_cnt, CH_COMM); - /* Use send/receive FIFO buffer */ - dmy_cfcc = CFCC_TBL[ch_cnt][CAN_SEND]; - *dmy_cfcc |= 0x01; - dmy_cfcc = CFCC_TBL[ch_cnt][CAN_RECV]; - *dmy_cfcc |= 0x01; - } - } -} - -static void can_set_frequency(can_t *obj, int f) { - __IO uint32_t *dmy_cfg; - int oldfreq = 0; - int newfreq = 0; - uint32_t clkc_val; - uint8_t tmp_tq; - uint8_t tq = 0; - uint8_t tmp_brp; - uint8_t brp = 0; - uint8_t tseg1 = 0; - uint8_t tseg2 = 0; - uint8_t sjw = 0; - - /* set clkc */ - if (RZ_A1_IsClockMode0() == false) { - clkc_val = CM1_RENESAS_RZ_A1_P1_CLK / 2; - } else { - clkc_val = CM0_RENESAS_RZ_A1_P1_CLK / 2; - } - /* calculate BRP bit and Choose max value of calculated frequency */ - for (tmp_tq = 8; tmp_tq <= 25; tmp_tq++) { - /* f = fCAN / ((BRP+1) * Tq) */ - /* BRP = (fCAN / (f * Tq)) - 1 */ - tmp_brp = ((clkc_val / (f * tmp_tq)) - 1) + 1; // carry(decimal point is carry) - newfreq = clkc_val / ((tmp_brp + 1) * tmp_tq); - if (newfreq >= oldfreq) { - oldfreq = newfreq; - tq = tmp_tq; - brp = tmp_brp; - } - } - /* calculate TSEG1 bit and TSEG2 bit */ - tseg1 = (tq - 1) * 0.666666667; - tseg2 = (tq - 1) - tseg1; - sjw = (tseg2 > 4)? 4 : tseg2; - /* set RSCAN0CmCFG register */ - dmy_cfg = CFG_MATCH[obj->ch]; - *dmy_cfg = ((sjw - 1) << 24) | ((tseg2 - 1) << 20) | ((tseg1 - 1) << 16) | brp; -} - -static void can_set_global_mode(int mode) { - /* set Global mode */ - RSCAN0GCTR = ((RSCAN0GCTR & 0xFFFFFFFC) | mode); - /* Wait to cahnge into Global XXXX mode */ - while ((RSCAN0GSTS & 0x07) != mode) { - __NOP(); - } -} - -static void can_set_channel_mode(uint32_t ch, int mode) { - __IO uint32_t *dmy_ctr; - __IO uint32_t *dmy_sts; - - /* set Channel mode */ - dmy_ctr = CTR_MATCH[ch]; - *dmy_ctr = ((*dmy_ctr & 0xFFFFFFFC) | mode); - /* Wait to cahnge into Channel XXXX mode */ - dmy_sts = STS_MATCH[ch]; - while ((*dmy_sts & 0x07) != mode) { - __NOP(); - } -} - diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c deleted file mode 100644 index de43879c16..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/ethernet_api.c +++ /dev/null @@ -1,695 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include -#include "ethernet_api.h" -#include "cmsis.h" -#include "mbed_interface.h" -#include "mbed_toolchain.h" -#include "mbed_error.h" -#include "ether_iodefine.h" -#include "ethernetext_api.h" - -/* Descriptor info */ -#define NUM_OF_TX_DESCRIPTOR (16) -#define NUM_OF_RX_DESCRIPTOR (16) -#define SIZE_OF_BUFFER (1600) /* Must be an integral multiple of 32 */ -#define MAX_SEND_SIZE (1514) -/* Ethernet Descriptor Value Define */ -#define TD0_TFP_TOP_BOTTOM (0x30000000) -#define TD0_TACT (0x80000000) -#define TD0_TDLE (0x40000000) -#define RD0_RACT (0x80000000) -#define RD0_RDLE (0x40000000) -#define RD0_RFE (0x08000000) -#define RD0_RCSE (0x04000000) -#define RD0_RFS (0x03FF0000) -#define RD0_RCS (0x0000FFFF) -#define RD0_RFS_RFOF (0x02000000) -#define RD0_RFS_RUAF (0x00400000) -#define RD0_RFS_RRF (0x00100000) -#define RD0_RFS_RTLF (0x00080000) -#define RD0_RFS_RTSF (0x00040000) -#define RD0_RFS_PRE (0x00020000) -#define RD0_RFS_CERF (0x00010000) -#define RD0_RFS_ERROR (RD0_RFS_RFOF | RD0_RFS_RUAF | RD0_RFS_RRF | RD0_RFS_RTLF | \ - RD0_RFS_RTSF | RD0_RFS_PRE | RD0_RFS_CERF) -#define RD1_RDL_MSK (0x0000FFFF) -/* PHY Register */ -#define BASIC_MODE_CONTROL_REG (0) -#define BASIC_MODE_STATUS_REG (1) -#define PHY_IDENTIFIER1_REG (2) -#define PHY_IDENTIFIER2_REG (3) -#define PHY_SP_CTL_STS_REG (31) -/* MII management interface access */ -#define PHY_ADDR (0) /* Confirm the pin connection of the PHY-LSI */ -#define PHY_ST (1) -#define PHY_WRITE (1) -#define PHY_READ (2) -#define MDC_WAIT (6) /* 400ns/4 */ -#define BASIC_STS_MSK_LINK (0x0004) /* Link Status */ -#define BASIC_STS_MSK_AUTO_CMP (0x0020) /* Auto-Negotiate Complete */ -#define M_PHY_ID (0xFFFFFFF0) -#define PHY_ID_LAN8710A (0x0007C0F0) -/* ETHERPIR0 */ -#define PIR0_MDI (0x00000008) -#define PIR0_MDO (0x00000004) -#define PIR0_MMD (0x00000002) -#define PIR0_MDC (0x00000001) -#define PIR0_MDC_HIGH (0x00000001) -#define PIR0_MDC_LOW (0x00000000) -/* ETHEREDRRR0 */ -#define EDRRR0_RR (0x00000001) -/* ETHEREDTRR0 */ -#define EDTRR0_TR (0x00000003) -/* software wait */ -#define LOOP_100us (6700) /* Loop counter for software wait 6666=100us/((1/400MHz)*6cyc) */ - -#define EDMAC_EESIPR_INI_RECV (0x0205001F) /* 0x02000000 : Detect reception suspended */ - /* 0x00040000 : Detect frame reception */ - /* 0x00010000 : Receive FIFO overflow */ - /* 0x00000010 : Residual bit frame reception */ - /* 0x00000008 : Long frame reception */ - /* 0x00000004 : Short frame reception */ - /* 0x00000002 : PHY-LSI reception error */ - /* 0x00000001 : Receive frame CRC error */ -#define EDMAC_EESIPR_INI_EtherC (0x00400000) /* 0x00400000 : E-MAC status register */ - -/* Send descriptor */ -typedef struct tag_edmac_send_desc { - uint32_t td0; - uint32_t td1; - uint8_t *td2; - uint32_t padding4; -} edmac_send_desc_t; - -/* Receive descriptor */ -typedef struct tag_edmac_recv_desc { - uint32_t rd0; - uint32_t rd1; - uint8_t *rd2; - uint32_t padding4; -} edmac_recv_desc_t; - -/* memory */ -/* The whole transmit/receive descriptors (must be allocated in 16-byte boundaries) */ -/* Transmit/receive buffers (must be allocated in 16-byte boundaries) */ -#if defined(__ICCARM__) -#pragma data_alignment=16 -static uint8_t ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) + - (sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) + - (NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) + - (NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)] //16 bytes aligned! - @ ".mirrorram"; -#else -static uint8_t ethernet_nc_memory[(sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR) + - (sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR) + - (NUM_OF_TX_DESCRIPTOR * SIZE_OF_BUFFER) + - (NUM_OF_RX_DESCRIPTOR * SIZE_OF_BUFFER)] - __attribute((section("NC_BSS"),aligned(16))); //16 bytes aligned! -#endif -static int32_t rx_read_offset; /* read offset */ -static int32_t tx_wite_offset; /* write offset */ -static uint32_t send_top_index; -static uint32_t recv_top_index; -static int32_t Interrupt_priority; -static edmac_send_desc_t *p_eth_desc_dsend = NULL; -static edmac_recv_desc_t *p_eth_desc_drecv = NULL; -static edmac_recv_desc_t *p_recv_end_desc = NULL; -static ethernetext_cb_fnc *p_recv_cb_fnc = NULL; -static char mac_addr[6] = {0x00, 0x02, 0xF7, 0xF0, 0x00, 0x00}; /* MAC Address */ -static uint32_t phy_id = 0; -static uint32_t start_stop = 1; /* 0:stop 1:start */ - -/* function */ -static void lan_reg_reset(void); -static void lan_desc_create(void); -static void lan_reg_set(int32_t link); -static uint16_t phy_reg_read(uint16_t reg_addr); -static void phy_reg_write(uint16_t reg_addr, uint16_t data); -static void mii_preamble(void); -static void mii_cmd(uint16_t reg_addr, uint32_t option); -static void mii_reg_read(uint16_t *data); -static void mii_reg_write(uint16_t data); -static void mii_z(void); -static void mii_write_1(void); -static void mii_write_0(void); -static void set_ether_pir(uint32_t set_data); -static void wait_100us(int32_t wait_cnt); - - -int ethernetext_init(ethernet_cfg_t *p_ethcfg) { - int32_t i; - uint16_t val; - - CPGSTBCR7 &= ~(CPG_STBCR7_BIT_MSTP74); /* enable ETHER clock */ - - /* -->4F<-- P1_14(ET_COL) */ - GPIOPMC1 |= 0x4000; - GPIOPFCAE1 &= ~0x4000; - GPIOPFCE1 |= 0x4000; - GPIOPFC1 |= 0x4000; - GPIOPIPC1 |= 0x4000; - - /* -->2F<-- P2_0(ET_TXCLK), P2_1(ET_TXER), P2_2(ET_TXEN), P2_3(ET_CRS), P2_4(ET_TXD0), - P2_5(ET_TXD1), P2_6(ET_TXD2), P2_7(ET_TXD3), P2_8(ET_RXD0), P2_9(ET_RXD1), P2_10(ET_RXD2) P2_11(ET_RXD3) */ - GPIOPMC2 |= 0x0FFF; - GPIOPFCAE2 &= ~0x0FFF; - GPIOPFCE2 &= ~0x0FFF; - GPIOPFC2 |= 0x0FFF; - GPIOPIPC2 |= 0x0FFF; - - /* -->3F<-- P3_3(ET_MDIO), P3_4(ET_RXCLK), P3_5(ET_RXER), P3_6(ET_RXDV) */ - GPIOPMC3 |= 0x0078; - GPIOPFCAE3 &= ~0x0078; - GPIOPFCE3 &= ~0x0078; - GPIOPFC3 |= 0x0078; - GPIOPIPC3 |= 0x0078; - - /* -->3F<-- P7_0(ET_MDC) */ - GPIOPMC7 |= 0x0001; - GPIOPFCAE7 &= ~0x0001; - GPIOPFCE7 |= 0x0001; - GPIOPFC7 &= ~0x0001; - GPIOPIPC7 |= 0x0001; - - /* Resets the E-MAC,E-DMAC */ - lan_reg_reset(); - - /* Resets the PHY-LSI */ - phy_reg_write(BASIC_MODE_CONTROL_REG, 0x8000); - for (i = 10000; i > 0; i--) { - val = phy_reg_read(BASIC_MODE_CONTROL_REG); - if (((uint32_t)val & 0x8000uL) == 0) { - break; /* Reset complete */ - } - } - - phy_id = ((uint32_t)phy_reg_read(PHY_IDENTIFIER1_REG) << 16) - | (uint32_t)phy_reg_read(PHY_IDENTIFIER2_REG); - - Interrupt_priority = p_ethcfg->int_priority; - p_recv_cb_fnc = p_ethcfg->recv_cb; - start_stop = 1; - - if (p_ethcfg->ether_mac != NULL) { - (void)memcpy(mac_addr, p_ethcfg->ether_mac, sizeof(mac_addr)); - } else { - ethernet_address(mac_addr); /* Get MAC Address */ - } - - return 0; -} - -void ethernetext_start_stop(int32_t mode) { - if (mode == 1) { - /* start */ - ETHEREDTRR0 |= EDTRR0_TR; - ETHEREDRRR0 |= EDRRR0_RR; - start_stop = 1; - } else { - /* stop */ - ETHEREDTRR0 &= ~EDTRR0_TR; - ETHEREDRRR0 &= ~EDRRR0_RR; - start_stop = 0; - } -} - -int ethernetext_chk_link_mode(void) { - int32_t link; - uint16_t data; - - if ((phy_id & M_PHY_ID) == PHY_ID_LAN8710A) { - data = phy_reg_read(PHY_SP_CTL_STS_REG); - switch (((uint32_t)data >> 2) & 0x00000007) { - case 0x0001: - link = HALF_10M; - break; - case 0x0005: - link = FULL_10M; - break; - case 0x0002: - link = HALF_TX; - break; - case 0x0006: - link = FULL_TX; - break; - default: - link = NEGO_FAIL; - break; - } - } else { - link = NEGO_FAIL; - } - - return link; -} - -void ethernetext_set_link_mode(int32_t link) { - lan_reg_reset(); /* Resets the E-MAC,E-DMAC */ - lan_desc_create(); /* Initialize of buffer memory */ - lan_reg_set(link); /* E-DMAC, E-MAC initialization */ -} - -int ethernet_init() { - ethernet_cfg_t ethcfg; - - ethcfg.int_priority = 5; - ethcfg.recv_cb = NULL; - ethcfg.ether_mac = NULL; - ethernetext_init(ðcfg); - ethernet_set_link(-1, 0); /* Auto-Negotiation */ - - return 0; -} - -void ethernet_free() { - ETHERARSTR |= 0x00000001; /* ETHER software reset */ - CPGSTBCR7 |= CPG_STBCR7_BIT_MSTP74; /* disable ETHER clock */ -} - -int ethernet_write(const char *data, int slen) { - edmac_send_desc_t *p_send_desc; - int32_t copy_size; - - if ((p_eth_desc_dsend == NULL) || (data == NULL) || (slen < 0) - || (tx_wite_offset < 0) || (tx_wite_offset >= MAX_SEND_SIZE)) { - copy_size = 0; - } else { - p_send_desc = &p_eth_desc_dsend[send_top_index]; /* Current descriptor */ - if ((p_send_desc->td0 & TD0_TACT) != 0) { - copy_size = 0; - } else { - copy_size = MAX_SEND_SIZE - tx_wite_offset; - if (copy_size > slen) { - copy_size = slen; - } - (void)memcpy(&p_send_desc->td2[tx_wite_offset], data, copy_size); - tx_wite_offset += copy_size; - } - } - - return copy_size; -} - -int ethernet_send() { - edmac_send_desc_t *p_send_desc; - int32_t ret; - - if ((p_eth_desc_dsend == NULL) || (tx_wite_offset <= 0)) { - ret = 0; - } else { - /* Transfer 1 frame */ - p_send_desc = &p_eth_desc_dsend[send_top_index]; /* Current descriptor */ - - /* Sets the frame length */ - p_send_desc->td1 = ((uint32_t)tx_wite_offset << 16); - tx_wite_offset = 0; - - /* Sets the transmit descriptor to transmit again */ - p_send_desc->td0 &= (TD0_TACT | TD0_TDLE | TD0_TFP_TOP_BOTTOM); - p_send_desc->td0 |= TD0_TACT; - if ((start_stop == 1) && ((ETHEREDTRR0 & EDTRR0_TR) != EDTRR0_TR)) { - ETHEREDTRR0 |= EDTRR0_TR; - } - - /* Update the current descriptor */ - send_top_index++; - if (send_top_index >= NUM_OF_TX_DESCRIPTOR) { - send_top_index = 0; - } - ret = 1; - } - - return ret; -} - -int ethernet_receive() { - edmac_recv_desc_t *p_recv_desc; - int32_t receive_size = 0; - - if (p_eth_desc_drecv != NULL) { - if (p_recv_end_desc != NULL) { - /* Sets the receive descriptor to receive again */ - p_recv_end_desc->rd0 &= (RD0_RACT | RD0_RDLE); - p_recv_end_desc->rd0 |= RD0_RACT; - if ((start_stop == 1) && ((ETHEREDRRR0 & EDRRR0_RR) == 0)) { - ETHEREDRRR0 |= EDRRR0_RR; - } - p_recv_end_desc = NULL; - } - - p_recv_desc = &p_eth_desc_drecv[recv_top_index]; /* Current descriptor */ - if ((p_recv_desc->rd0 & RD0_RACT) == 0) { - /* Receives 1 frame */ - if (((p_recv_desc->rd0 & RD0_RFE) != 0) && ((p_recv_desc->rd0 & RD0_RFS_ERROR) != 0)) { - /* Receive frame error */ - /* Sets the receive descriptor to receive again */ - p_recv_desc->rd0 &= (RD0_RACT | RD0_RDLE); - p_recv_desc->rd0 |= RD0_RACT; - if ((start_stop == 1) && ((ETHEREDRRR0 & EDRRR0_RR) == 0)) { - ETHEREDRRR0 |= EDRRR0_RR; - } - } else { - /* Copies the received frame */ - rx_read_offset = 0; - p_recv_end_desc = p_recv_desc; - receive_size = (p_recv_desc->rd1 & RD1_RDL_MSK); /* number of bytes received */ - } - - /* Update the current descriptor */ - recv_top_index++; - if (recv_top_index >= NUM_OF_TX_DESCRIPTOR) { - recv_top_index = 0; - } - } - } - - return receive_size; -} - -int ethernet_read(char *data, int dlen) { - edmac_recv_desc_t *p_recv_desc = p_recv_end_desc; /* Read top descriptor */ - int32_t copy_size; - - if ((data == NULL) || (dlen < 0) || (p_recv_desc == NULL)) { - copy_size = 0; - } else { - copy_size = (p_recv_desc->rd1 & RD1_RDL_MSK) - rx_read_offset; - if (copy_size > dlen) { - copy_size = dlen; - } - (void)memcpy(data, &p_recv_desc->rd2[rx_read_offset], (size_t)copy_size); - rx_read_offset += copy_size; - } - - return copy_size; -} - -void ethernet_address(char *mac) { - if (mac != NULL) { - mbed_mac_address(mac); /* Get MAC Address */ - } -} - -int ethernet_link(void) { - int32_t ret; - uint16_t data; - - data = phy_reg_read(BASIC_MODE_STATUS_REG); - if (((uint32_t)data & BASIC_STS_MSK_LINK) != 0) { - ret = 1; - } else { - ret = 0; - } - - return ret; -} - -void ethernet_set_link(int speed, int duplex) { - uint16_t data; - int32_t i; - int32_t link; - - if ((speed < 0) || (speed > 1)) { - data = 0x1000; /* Auto-Negotiation Enable */ - phy_reg_write(BASIC_MODE_CONTROL_REG, data); - for (i = 0; i < 1000; i++) { - data = phy_reg_read(BASIC_MODE_STATUS_REG); - if (((uint32_t)data & BASIC_STS_MSK_AUTO_CMP) != 0) { - break; - } - wait_100us(10); - } - } else { - data = (uint16_t)(((uint32_t)speed << 13) | ((uint32_t)duplex << 8)); - phy_reg_write(BASIC_MODE_CONTROL_REG, data); - wait_100us(1); - } - - link = ethernetext_chk_link_mode(); - ethernetext_set_link_mode(link); -} - -void INT_Ether(void) { - uint32_t stat_edmac; - uint32_t stat_etherc; - - /* Clear the interrupt request flag */ - stat_edmac = (ETHEREESR0 & ETHEREESIPR0); /* Targets are restricted to allowed interrupts */ - ETHEREESR0 = stat_edmac; - /* Reception-related */ - if (stat_edmac & EDMAC_EESIPR_INI_RECV) { - if (p_recv_cb_fnc != NULL) { - p_recv_cb_fnc(); - } - } - /* E-MAC-related */ - if (stat_edmac & EDMAC_EESIPR_INI_EtherC) { - /* Clear the interrupt request flag */ - stat_etherc = (ETHERECSR0 & ETHERECSIPR0); /* Targets are restricted to allowed interrupts */ - ETHERECSR0 = stat_etherc; - } -} - -static void lan_reg_reset(void) { - volatile int32_t j = 400; /* Wait for B dia 256 cycles ((I dia/B dia)*256)/6cyc = 8*256/6 = 342 */ - - ETHERARSTR |= 0x00000001; /* ETHER software reset */ - while (j--) { - /* Do Nothing */ - } - - ETHEREDSR0 |= 0x00000003; /* E-DMAC software reset */ - ETHEREDMR0 |= 0x00000003; /* Set SWRR and SWRT simultaneously */ - - /* Check clear software reset */ - while ((ETHEREDMR0 & 0x00000003) != 0) { - /* Do Nothing */ - } -} - -static void lan_desc_create(void) { - int32_t i; - uint8_t *p_memory_top; - - (void)memset((void *)ethernet_nc_memory, 0, sizeof(ethernet_nc_memory)); - p_memory_top = ethernet_nc_memory; - - /* Descriptor area configuration */ - p_eth_desc_dsend = (edmac_send_desc_t *)p_memory_top; - p_memory_top += (sizeof(edmac_send_desc_t) * NUM_OF_TX_DESCRIPTOR); - p_eth_desc_drecv = (edmac_recv_desc_t *)p_memory_top; - p_memory_top += (sizeof(edmac_recv_desc_t) * NUM_OF_RX_DESCRIPTOR); - - /* Transmit descriptor */ - for (i = 0; i < NUM_OF_TX_DESCRIPTOR; i++) { - p_eth_desc_dsend[i].td2 = p_memory_top; /* TD2 TBA */ - p_memory_top += SIZE_OF_BUFFER; - p_eth_desc_dsend[i].td1 = 0; /* TD1 TDL */ - p_eth_desc_dsend[i].td0 = TD0_TFP_TOP_BOTTOM; /* TD0:1frame/1buf1buf, transmission disabled */ - } - p_eth_desc_dsend[i - 1].td0 |= TD0_TDLE; /* Set the last descriptor */ - - /* Receive descriptor */ - for (i = 0; i < NUM_OF_RX_DESCRIPTOR; i++) { - p_eth_desc_drecv[i].rd2 = p_memory_top; /* RD2 RBA */ - p_memory_top += SIZE_OF_BUFFER; - p_eth_desc_drecv[i].rd1 = ((uint32_t)SIZE_OF_BUFFER << 16); /* RD1 RBL */ - p_eth_desc_drecv[i].rd0 = RD0_RACT; /* RD0:reception enabled */ - } - p_eth_desc_drecv[i - 1].rd0 |= RD0_RDLE; /* Set the last descriptor */ - - /* Initialize descriptor management information */ - send_top_index = 0; - recv_top_index = 0; - rx_read_offset = 0; - tx_wite_offset = 0; - p_recv_end_desc = NULL; -} - -static void lan_reg_set(int32_t link) { - /* MAC address setting */ - ETHERMAHR0 = ((uint32_t)mac_addr[0] << 24) - | ((uint32_t)mac_addr[1] << 16) - | ((uint32_t)mac_addr[2] << 8) - | (uint32_t)mac_addr[3]; - ETHERMALR0 = ((uint32_t)mac_addr[4] << 8) - | (uint32_t)mac_addr[5]; - - /* E-DMAC */ - ETHERTDLAR0 = (uint32_t)&p_eth_desc_dsend[0]; - ETHERRDLAR0 = (uint32_t)&p_eth_desc_drecv[0]; - ETHERTDFAR0 = (uint32_t)&p_eth_desc_dsend[0]; - ETHERRDFAR0 = (uint32_t)&p_eth_desc_drecv[0]; - ETHERTDFXR0 = (uint32_t)&p_eth_desc_dsend[NUM_OF_TX_DESCRIPTOR - 1]; - ETHERRDFXR0 = (uint32_t)&p_eth_desc_drecv[NUM_OF_RX_DESCRIPTOR - 1]; - ETHERTDFFR0 |= 0x00000001; /* TDLF Transmit Descriptor Queue Last Flag : Last descriptor (1) */ - ETHERRDFFR0 |= 0x00000001; /* RDLF Receive Descriptor Queue Last Flag : Last descriptor (1) */ - ETHEREDMR0 |= 0x00000040; /* Little endian */ - ETHERTRSCER0 &= ~0x0003009F; /* All clear */ - ETHERTFTR0 &= ~0x000007FF; /* TFT[10:0] Transmit FIFO Threshold : Store and forward modes (H'000) */ - ETHERFDR0 |= 0x00000707; /* Transmit FIFO Size:2048 bytes, Receive FIFO Size:2048 bytes */ - ETHERRMCR0 |= 0x00000001; /* RNC Receive Enable Control : Continuous reception enabled (1) */ - ETHERFCFTR0 &= ~0x001F00FF; - ETHERFCFTR0 |= 0x00070007; - ETHERRPADIR0 &= ~0x001FFFFF; /* Padding Size:No padding insertion, Padding Slot:Inserts at first byte */ - - /* E-MAC */ - ETHERECMR0 &= ~0x04BF2063; /* All clear */ - ETHERRFLR0 &= ~0x0003FFFF; /* RFL[17:0] Receive Frame Length : 1518 bytes (H'00000) */ - ETHERAPR0 &= ~0x0000FFFF; /* AP[15:0] Automatic PAUSE : Flow control is disabled (H'0000) */ - ETHERMPR0 &= ~0x0000FFFF; /* MP[15:0] Manual PAUSE : Flow control is disabled (H'0000) */ - ETHERTPAUSER0 &= ~0x0000FFFF; /* Upper Limit for Automatic PAUSE Frame : Retransmit count is unlimited */ - ETHERCSMR &= ~0xC000003F; /* The result of checksum is not written back to the receive descriptor */ - if ((link == FULL_TX) || (link == FULL_10M) || (link == NEGO_FAIL)) { - ETHERECMR0 |= 0x00000002; /* Set to full-duplex mode */ - } else { - ETHERECMR0 &= ~0x00000002; /* Set to half-duplex mode */ - } - - /* Interrupt-related */ - if (p_recv_cb_fnc != NULL) { - ETHEREESR0 |= 0xFF7F009F; /* Clear all status (by writing 1) */ - ETHEREESIPR0 |= 0x00040000; /* FR Frame Reception (1) */ - ETHERECSR0 |= 0x00000011; /* Clear all status (clear by writing 1) */ - ETHERECSIPR0 &= ~0x00000011; /* PFROIP Disable, ICDIP Disable */ - InterruptHandlerRegister(ETHERI_IRQn, INT_Ether); /* Ethernet interrupt handler registration */ - GIC_SetPriority(ETHERI_IRQn, Interrupt_priority); /* Ethernet interrupt priority */ - GIC_EnableIRQ(ETHERI_IRQn); /* Enables the E-DMAC interrupt */ - } - - ETHERECMR0 |= 0x00000060; /* RE Enable, TE Enable */ - - /* Enable transmission/reception */ - if ((start_stop == 1) && ((ETHEREDRRR0 & 0x00000001) == 0)) { - ETHEREDRRR0 |= 0x00000001; /* RR */ - } -} - -static uint16_t phy_reg_read(uint16_t reg_addr) { - uint16_t data; - - mii_preamble(); - mii_cmd(reg_addr, PHY_READ); - mii_z(); - mii_reg_read(&data); - mii_z(); - - return data; -} - -static void phy_reg_write(uint16_t reg_addr, uint16_t data) { - mii_preamble(); - mii_cmd(reg_addr, PHY_WRITE); - mii_write_1(); - mii_write_0(); - mii_reg_write(data); - mii_z(); -} - -static void mii_preamble(void) { - int32_t i = 32; - - for (i = 32; i > 0; i--) { - /* 1 is output via the MII (Media Independent Interface) block. */ - mii_write_1(); - } -} - -static void mii_cmd(uint16_t reg_addr, uint32_t option) { - int32_t i; - uint16_t data = 0; - - data |= (PHY_ST << 14); /* ST code */ - data |= (option << 12); /* OP code */ - data |= (PHY_ADDR << 7); /* PHY Address */ - data |= (uint16_t)(reg_addr << 2); /* Reg Address */ - for (i = 14; i > 0; i--) { - if ((data & 0x8000) == 0) { - mii_write_0(); - } else { - mii_write_1(); - } - data <<= 1; - } -} - -static void mii_reg_read(uint16_t *data) { - int32_t i; - uint16_t reg_data = 0; - - /* Data are read in one bit at a time */ - for (i = 16; i > 0; i--) { - set_ether_pir(PIR0_MDC_LOW); - set_ether_pir(PIR0_MDC_HIGH); - reg_data <<= 1; - reg_data |= (uint16_t)((ETHERPIR0 & PIR0_MDI) >> 3); /* MDI read */ - set_ether_pir(PIR0_MDC_HIGH); - set_ether_pir(PIR0_MDC_LOW); - } - *data = reg_data; -} - -static void mii_reg_write(uint16_t data) { - int32_t i; - - /* Data are written one bit at a time */ - for (i = 16; i > 0; i--) { - if ((data & 0x8000) == 0) { - mii_write_0(); - } else { - mii_write_1(); - } - data <<= 1; - } -} - -static void mii_z(void) { - set_ether_pir(PIR0_MDC_LOW); - set_ether_pir(PIR0_MDC_HIGH); - set_ether_pir(PIR0_MDC_HIGH); - set_ether_pir(PIR0_MDC_LOW); -} - -static void mii_write_1(void) { - set_ether_pir(PIR0_MDO | PIR0_MMD); - set_ether_pir(PIR0_MDO | PIR0_MMD | PIR0_MDC); - set_ether_pir(PIR0_MDO | PIR0_MMD | PIR0_MDC); - set_ether_pir(PIR0_MDO | PIR0_MMD); -} - -static void mii_write_0(void) { - set_ether_pir(PIR0_MMD); - set_ether_pir(PIR0_MMD | PIR0_MDC); - set_ether_pir(PIR0_MMD | PIR0_MDC); - set_ether_pir(PIR0_MMD); -} - -static void set_ether_pir(uint32_t set_data) { - int32_t i; - - for (i = MDC_WAIT; i > 0; i--) { - ETHERPIR0 = set_data; - } -} - -static void wait_100us(int32_t wait_cnt) { - volatile int32_t j = LOOP_100us * wait_cnt; - - while (--j) { - /* Do Nothing */ - } -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c deleted file mode 100644 index d6be236949..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_irq_api.c +++ /dev/null @@ -1,223 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include - -#include "gpio_irq_api.h" -#include "intc_iodefine.h" -#include "pinmap.h" -#include "cmsis.h" -#include "gpio_addrdefine.h" - -#define CHANNEL_NUM 8 - -static void gpio_irq0(void); -static void gpio_irq1(void); -static void gpio_irq2(void); -static void gpio_irq3(void); -static void gpio_irq4(void); -static void gpio_irq5(void); -static void gpio_irq6(void); -static void gpio_irq7(void); - -static gpio_irq_t *channel_obj[CHANNEL_NUM] = {NULL}; -static gpio_irq_handler irq_handler; -static const int nIRQn_h = 32; -extern PinName gpio_multi_guard; - -enum { - IRQ0,IRQ1, - IRQ2,IRQ3, - IRQ4,IRQ5, - IRQ6,IRQ7, - -} IRQNo; - -static const IRQHandler irq_tbl[CHANNEL_NUM] = { - &gpio_irq0, - &gpio_irq1, - &gpio_irq2, - &gpio_irq3, - &gpio_irq4, - &gpio_irq5, - &gpio_irq6, - &gpio_irq7, -}; - -#ifdef MAX_PERI -static const PinMap PinMap_IRQ[] = { - {P1_0, IRQ0, 4}, {P4_8, IRQ0, 8}, {P6_8, IRQ0, 8}, {P7_9, IRQ0, 8}, {P8_2, IRQ0, 5}, {P2_14, IRQ0, 8}, {P5_8, IRQ0, 2}, {P9_1, IRQ0, 4}, - {P1_1, IRQ1, 4}, {P4_9, IRQ1, 8}, {P6_9, IRQ1, 8}, {P7_8, IRQ1, 8}, {P8_3, IRQ1, 6}, {P2_15, IRQ1, 8}, - {P1_2, IRQ2, 4}, {P4_10, IRQ2, 8}, {P6_10, IRQ2, 8}, {P7_10, IRQ2, 8}, {P1_8, IRQ2, 3}, {P3_0, IRQ2, 3}, {P5_9, IRQ2, 4}, {P6_3, IRQ2, 4}, - {P1_3, IRQ3, 4}, {P4_11, IRQ3, 8}, {P6_11, IRQ3, 8}, {P7_11, IRQ3, 8}, {P1_9, IRQ3, 3}, {P6_4, IRQ3, 4}, - {P1_4, IRQ4, 4}, {P4_12, IRQ4, 8}, {P6_12, IRQ4, 8}, {P7_12, IRQ4, 8}, {P1_10, IRQ4, 3}, {P3_3, IRQ4, 3}, {P6_1, IRQ4, 4}, - {P1_5, IRQ5, 4}, {P4_13, IRQ5, 8}, {P6_13, IRQ5, 8}, {P7_13, IRQ5, 8}, {P1_11, IRQ5, 3}, {P2_0, IRQ5, 6}, {P6_0, IRQ5, 6}, {P8_7, IRQ5, 4}, - {P1_6, IRQ6, 4}, {P4_14, IRQ6, 8}, {P6_14, IRQ6, 8}, {P7_14, IRQ6, 8}, {P2_12, IRQ6, 6}, {P3_1, IRQ6, 3}, {P3_9, IRQ6, 8}, {P5_6, IRQ6, 6}, - {P1_7, IRQ7, 4}, {P4_15, IRQ7, 8}, {P6_15, IRQ7, 8}, {P6_2, IRQ7, 4}, {P2_13, IRQ7, 8}, - {NC, NC, 0} -}; -#else -static const PinMap PinMap_IRQ[] = { - {P9_1, IRQ0, 4}, - {P7_8, IRQ1, 8}, - {P1_2, IRQ2, 4}, {P1_8, IRQ2, 3}, {P3_0, IRQ2, 3}, {P5_9, IRQ2, 4}, - {P1_3, IRQ3, 4}, {P1_9, IRQ3, 3}, - {P1_4, IRQ4, 4}, {P1_10, IRQ4, 3}, - {P1_5, IRQ5, 4}, {P1_11, IRQ5, 3}, - {P3_1, IRQ6, 3}, {P3_9, IRQ6, 8}, {P5_6, IRQ6, 6}, - {NC, NC, 0} -}; -#endif - -static void handle_interrupt_in(int irq_num) { - uint16_t irqs; - uint16_t edge_req; - gpio_irq_t *obj; - gpio_irq_event irq_event; - - irqs = INTCIRQRR; - if (irqs & (1 << irq_num)) { - obj = channel_obj[irq_num]; - if (obj != NULL) { - edge_req = ((INTCICR1 >> (obj->ch * 2)) & 3); - if (edge_req == 1) { - irq_event = IRQ_FALL; - } else if (edge_req == 2) { - irq_event = IRQ_RISE; - } else { - uint32_t mask = (1 << (obj->pin & 0x0F)); - __I uint32_t *reg_in = (volatile uint32_t *) PPR((int)PINGROUP(obj->pin)); - - if ((*reg_in & mask) == 0) { - irq_event = IRQ_FALL; - } else { - irq_event = IRQ_RISE; - } - } - irq_handler(obj->port, irq_event); - } - INTCIRQRR &= ~(1 << irq_num); - } -} - -static void gpio_irq0(void) { - handle_interrupt_in(0); -} - -static void gpio_irq1(void) { - handle_interrupt_in(1); -} - -static void gpio_irq2(void) { - handle_interrupt_in(2); -} - -static void gpio_irq3(void) { - handle_interrupt_in(3); -} - -static void gpio_irq4(void) { - handle_interrupt_in(4); -} - -static void gpio_irq5(void) { - handle_interrupt_in(5); -} - -static void gpio_irq6(void) { - handle_interrupt_in(6); -} - -static void gpio_irq7(void) { - handle_interrupt_in(7); -} - -int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) { - int shift; - if (pin == NC) return -1; - - obj->ch = pinmap_peripheral(pin, PinMap_IRQ); - obj->pin = (int)pin ; - obj->port = (int)id ; - - shift = obj->ch*2; - channel_obj[obj->ch] = obj; - irq_handler = handler; - - pinmap_pinout(pin, PinMap_IRQ); - gpio_multi_guard = pin; /* Set multi guard */ - - // INTC settings - InterruptHandlerRegister((IRQn_Type)(nIRQn_h+obj->ch), (void (*)(uint32_t))irq_tbl[obj->ch]); - INTCICR1 &= ~(0x3 << shift); - INTCICR1 |= (0x3 << shift); - GIC_SetPriority((IRQn_Type)(nIRQn_h+obj->ch), 5); - GIC_EnableIRQ((IRQn_Type)(nIRQn_h+obj->ch)); - obj->int_enable = 1; - __enable_irq(); - - return 0; -} - -void gpio_irq_free(gpio_irq_t *obj) { - channel_obj[obj->ch] = NULL; -} - -void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) { - int shift = obj->ch*2; - uint16_t val = event == IRQ_RISE ? 2 : - event == IRQ_FALL ? 1 : 0; - uint16_t work_icr_val; - - /* check edge interrupt setting */ - work_icr_val = INTCICR1; - if (enable == 1) { - /* Set interrupt serect */ - work_icr_val |= (val << shift); - } else { - /* Clear interrupt serect */ - work_icr_val &= ~(val << shift); - } - - if ((work_icr_val & (3 << shift)) == 0) { - /* No edge interrupt setting */ - GIC_DisableIRQ((IRQn_Type)(nIRQn_h+obj->ch)); - /* Clear Interrupt flags */ - INTCIRQRR &= ~(1 << obj->ch); - INTCICR1 = work_icr_val; - } else if (obj->int_enable == 1) { - INTCICR1 = work_icr_val; - GIC_EnableIRQ((IRQn_Type)(nIRQn_h + obj->ch)); - } else { - INTCICR1 = work_icr_val; - } -} - -void gpio_irq_enable(gpio_irq_t *obj) { - int shift = obj->ch*2; - uint16_t work_icr_val = INTCICR1; - - /* check edge interrupt setting */ - if ((work_icr_val & (3 << shift)) != 0) { - GIC_EnableIRQ((IRQn_Type)(nIRQn_h + obj->ch)); - } - obj->int_enable = 1; -} - -void gpio_irq_disable(gpio_irq_t *obj) { - GIC_DisableIRQ((IRQn_Type)(nIRQn_h + obj->ch)); - obj->int_enable = 0; -} - diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c deleted file mode 100644 index 4904faa978..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/i2c_api.c +++ /dev/null @@ -1,760 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "mbed_assert.h" -#include "i2c_api.h" -#include "cmsis.h" -#include "pinmap.h" -#include "r_typedefs.h" - -#include "riic_iodefine.h" -#include "RZ_A1_Init.h" -#include "VKRZA1H.h" - -volatile struct st_riic *RIIC[] = RIIC_ADDRESS_LIST; - -#define REG(N) \ - RIIC[obj->i2c]->RIICn##N - -/* RIICnCR1 */ -#define CR1_RST (1 << 6) -#define CR1_ICE (1 << 7) - -/* RIICnCR2 */ -#define CR2_ST (1 << 1) -#define CR2_RS (1 << 2) -#define CR2_SP (1 << 3) -#define CR2_TRS (1 << 5) -#define CR2_BBSY (1 << 7) - -/* RIICnMR3 */ -#define MR3_ACKBT (1 << 3) -#define MR3_ACKWP (1 << 4) -#define MR3_WAIT (1 << 6) - -/* RIICnSER */ -#define SER_SAR0E (1 << 0) - -/* RIICnSR1 */ -#define SR1_AAS0 (1 << 0) - -/* RIICnSR2 */ -#define SR2_START (1 << 2) -#define SR2_STOP (1 << 3) -#define SR2_NACKF (1 << 4) -#define SR2_RDRF (1 << 5) -#define SR2_TEND (1 << 6) -#define SR2_TDRE (1 << 7) - -#define WAIT_TIMEOUT (3600000) /* Loop counter : Time-out is about 1s. By 3600000 loops, measured value is 969ms. */ - -static const PinMap PinMap_I2C_SDA[] = { - {P1_1 , I2C_0, 1}, - {P1_3 , I2C_1, 1}, - {P1_5 , I2C_2, 1}, - {P1_7 , I2C_3, 1}, - {NC , NC , 0} -}; - -static const PinMap PinMap_I2C_SCL[] = { - {P1_0 , I2C_0, 1}, - {P1_2 , I2C_1, 1}, - {P1_4 , I2C_2, 1}, - {P1_6 , I2C_3, 1}, - {NC , NC, 0} -}; - - -static inline int i2c_status(i2c_t *obj) { - return REG(SR2.UINT8[0]); -} - -static void i2c_reg_reset(i2c_t *obj) { - /* full reset */ - REG(CR1.UINT8[0]) &= ~CR1_ICE; // CR1.ICE off - REG(CR1.UINT8[0]) |= CR1_RST; // CR1.IICRST on - REG(CR1.UINT8[0]) |= CR1_ICE; // CR1.ICE on - - REG(MR1.UINT8[0]) = 0x08; // P_phi /x 9bit (including Ack) - REG(SER.UINT8[0]) = 0x00; // no slave addr enabled - - /* set frequency */ - REG(MR1.UINT8[0]) |= obj->pclk_bit; - REG(BRL.UINT8[0]) = obj->width_low; - REG(BRH.UINT8[0]) = obj->width_hi; - - REG(MR2.UINT8[0]) = 0x07; - REG(MR3.UINT8[0]) = 0x00; - - REG(FER.UINT8[0]) = 0x72; // SCLE, NFE enabled, TMOT - REG(IER.UINT8[0]) = 0x00; // no interrupt - - REG(CR1.UINT32) &= ~CR1_RST; // CR1.IICRST negate reset -} - -static inline int i2c_wait_RDRF(i2c_t *obj) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_RDRF) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - - return 0; -} - -static int i2c_wait_TDRE(i2c_t *obj) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_TDRE) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - - return 0; -} - -static int i2c_wait_TEND(i2c_t *obj) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_TEND) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - - return 0; -} - - -static int i2c_wait_START(i2c_t *obj) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_START) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - - return 0; -} - -static int i2c_wait_STOP(i2c_t *obj) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_STOP) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - - return 0; -} - -static int i2c_set_STOP(i2c_t *obj) { - /* SR2.STOP = 0 */ - REG(SR2.UINT32) &= ~SR2_STOP; - /* Stop condition */ - REG(CR2.UINT32) |= CR2_SP; - - return 0; -} - -static void i2c_set_SR2_NACKF_STOP(i2c_t *obj) { - /* SR2.NACKF = 0 */ - REG(SR2.UINT32) &= ~SR2_NACKF; - /* SR2.STOP = 0 */ - REG(SR2.UINT32) &= ~SR2_STOP; -} - -static void i2c_set_MR3_NACK(i2c_t *obj) { - /* send a NOT ACK */ - REG(MR3.UINT32) |= MR3_ACKWP; - REG(MR3.UINT32) |= MR3_ACKBT; - REG(MR3.UINT32) &= ~MR3_ACKWP; -} - -static void i2c_set_MR3_ACK(i2c_t *obj) { - /* send a ACK */ - REG(MR3.UINT32) |= MR3_ACKWP; - REG(MR3.UINT32) &= ~MR3_ACKBT; - REG(MR3.UINT32) &= ~MR3_ACKWP; -} - -static inline void i2c_power_enable(i2c_t *obj) { - volatile uint8_t dummy; - switch ((int)obj->i2c) { - case I2C_0: - CPGSTBCR9 &= ~(0x80); - break; - case I2C_1: - CPGSTBCR9 &= ~(0x40); - break; - case I2C_2: - CPGSTBCR9 &= ~(0x20); - break; - case I2C_3: - CPGSTBCR9 &= ~(0x10); - break; - } - dummy = CPGSTBCR9; -} - -void i2c_init(i2c_t *obj, PinName sda, PinName scl) { - /* determine the I2C to use */ - I2CName i2c_sda = (I2CName)pinmap_peripheral(sda, PinMap_I2C_SDA); - I2CName i2c_scl = (I2CName)pinmap_peripheral(scl, PinMap_I2C_SCL); - obj->i2c = pinmap_merge(i2c_sda, i2c_scl); - MBED_ASSERT((int)obj->i2c != NC); - - /* enable power */ - i2c_power_enable(obj); - - /* set default frequency at 100k */ - i2c_frequency(obj, 100000); - - pinmap_pinout(sda, PinMap_I2C_SDA); - pinmap_pinout(scl, PinMap_I2C_SCL); - - obj->last_stop_flag = 1; -} - -inline int i2c_start(i2c_t *obj) { - int timeout = 0; - - while ((REG(CR2.UINT32) & CR2_BBSY) != 0) { - timeout ++; - if (timeout >= obj->bbsy_wait_cnt) { - break; - } - } - /* Start Condition */ - REG(CR2.UINT8[0]) |= CR2_ST; - - return 0; -} - -static inline int i2c_restart(i2c_t *obj) { - /* SR2.START = 0 */ - REG(SR2.UINT32) &= ~SR2_START; - /* ReStart condition */ - REG(CR2.UINT32) |= CR2_RS; - - return 0; -} - -inline int i2c_stop(i2c_t *obj) { - (void)i2c_set_STOP(obj); - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - - return 0; -} - -static void i2c_set_err_noslave(i2c_t *obj) { - (void)i2c_set_STOP(obj); - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - obj->last_stop_flag = 1; -} - -static inline int i2c_do_write(i2c_t *obj, int value) { - int timeout = 0; - - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while ((i2c_status(obj) & SR2_TDRE) == 0) { - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - /* write the data */ - REG(DRT.UINT32) = value; - - return 0; -} - -static inline int i2c_read_address_write(i2c_t *obj, int value) { - int status; - - status = i2c_wait_TDRE(obj); - if (status == 0) { - /* write the data */ - REG(DRT.UINT32) = value; - } - - return status; - -} - -static inline int i2c_do_read(i2c_t *obj, int last) { - if (last == 2) { - /* this time is befor last byte read */ - /* Set MR3 WAIT bit is 1 */; - REG(MR3.UINT32) |= MR3_WAIT; - } else if (last == 1) { - i2c_set_MR3_NACK(obj); - } else { - i2c_set_MR3_ACK(obj); - } - - /* return the data */ - return (REG(DRR.UINT32) & 0xFF); -} - -void i2c_frequency(i2c_t *obj, int hz) { - float64_t pclk_val; - float64_t wait_utime; - volatile float64_t bps; - volatile float64_t L_time; /* H Width period */ - volatile float64_t H_time; /* L Width period */ - uint32_t tmp_L_width; - uint32_t tmp_H_width; - uint32_t remainder; - uint32_t wk_cks = 0; - - /* set PCLK */ - if (false == RZ_A1_IsClockMode0()) { - pclk_val = (float64_t)CM1_RENESAS_RZ_A1_P0_CLK; - } else { - pclk_val = (float64_t)CM0_RENESAS_RZ_A1_P0_CLK; - } - - /* Min 10kHz, Max 400kHz */ - if (hz < 10000) { - bps = 10000; - } else if (hz > 400000) { - bps = 400000; - } else { - bps = (float64_t)hz; - } - - /* Calculation L width time */ - L_time = (1 / (2 * bps)); /* Harf period of frequency */ - H_time = L_time; - - /* Check I2C mode of Speed */ - if (bps > 100000) { - /* Fast-mode */ - L_time -= 102E-9; /* Falling time of SCL clock. */ - H_time -= 138E-9; /* Rising time of SCL clock. */ - /* Check L wideth */ - if (L_time < 1.3E-6) { - /* Wnen L width less than 1.3us */ - /* Subtract Rise up and down time for SCL from H/L width */ - L_time = 1.3E-6; - H_time = (1 / bps) - L_time - 138E-9 - 102E-9; - } - } - - tmp_L_width = (uint32_t)(L_time * pclk_val * 10); - tmp_L_width >>= 1; - wk_cks++; - while (tmp_L_width >= 341) { - tmp_L_width >>= 1; - wk_cks++; - } - remainder = tmp_L_width % 10; - tmp_L_width = ((tmp_L_width + 9) / 10) - 3; /* carry */ - - tmp_H_width = (uint32_t)(H_time * pclk_val * 10); - tmp_H_width >>= wk_cks; - if (remainder == 0) { - tmp_H_width = ((tmp_H_width + 9) / 10) - 3; /* carry */ - } else { - remainder += tmp_H_width % 10; - tmp_H_width = (tmp_H_width / 10) - 3; - if (remainder > 10) { - tmp_H_width += 1; /* fine adjustment */ - } - } - /* timeout of BBSY bit is minimum low width by frequency */ - /* so timeout calculates "(low width) * 2" by frequency */ - wait_utime = (L_time * 2) * 1000000; - /* 1 wait of BBSY bit is about 0.3us. if it's below 0.3us, wait count is set as 1. */ - if (wait_utime <= 0.3) { - obj->bbsy_wait_cnt = 1; - } else { - obj->bbsy_wait_cnt = (int)(wait_utime / 0.3); - } - - - /* I2C Rate */ - obj->pclk_bit = (uint8_t)(0x10 * wk_cks); /* P_phi / xx */ - obj->width_low = (uint8_t)(tmp_L_width | 0x000000E0); - obj->width_hi = (uint8_t)(tmp_H_width | 0x000000E0); - - /* full reset */ - i2c_reg_reset(obj); -} - -int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { - int count = 0; - int status; - int value; - volatile uint32_t work_reg = 0; - - i2c_set_MR3_ACK(obj); - /* There is a STOP condition for last processing */ - if (obj->last_stop_flag != 0) { - status = i2c_start(obj); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_BUS_BUSY; - } - } - obj->last_stop_flag = stop; - /* Send Slave address */ - status = i2c_read_address_write(obj, (address | 0x01)); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - /* wait RDRF */ - status = i2c_wait_RDRF(obj); - /* check ACK/NACK */ - if ((status != 0) || ((REG(SR2.UINT32) & SR2_NACKF) != 0)) { - /* Slave sends NACK */ - (void)i2c_set_STOP(obj); - /* dummy read */ - value = REG(DRR.UINT32); - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - obj->last_stop_flag = 1; - return I2C_ERROR_NO_SLAVE; - } - if (length != 0) { - /* Read in all except last byte */ - if (length > 2) { - /* dummy read */ - value = REG(DRR.UINT32); - for (count = 0; count < (length - 1); count++) { - /* wait for it to arrive */ - status = i2c_wait_RDRF(obj); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - /* Recieve the data */ - if (count == (length - 2)) { - value = i2c_do_read(obj, 1); - } else if ((length >= 3) && (count == (length - 3))) { - value = i2c_do_read(obj, 2); - } else { - value = i2c_do_read(obj, 0); - } - data[count] = (char)value; - } - } else if (length == 2) { - /* Set MR3 WAIT bit is 1 */ - REG(MR3.UINT32) |= MR3_WAIT; - /* dummy read */ - value = REG(DRR.UINT32); - /* wait for it to arrive */ - status = i2c_wait_RDRF(obj); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - i2c_set_MR3_NACK(obj); - data[count] = (char)REG(DRR.UINT32); - count++; - } else { - /* length == 1 */ - /* Set MR3 WAIT bit is 1 */; - REG(MR3.UINT32) |= MR3_WAIT; - i2c_set_MR3_NACK(obj); - /* dummy read */ - value = REG(DRR.UINT32); - } - /* wait for it to arrive */ - status = i2c_wait_RDRF(obj); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - - /* If not repeated start, send stop. */ - if (stop) { - (void)i2c_set_STOP(obj); - /* RIICnDRR read */ - value = (REG(DRR.UINT32) & 0xFF); - data[count] = (char)value; - /* RIICnMR3.WAIT = 0 */ - REG(MR3.UINT32) &= ~MR3_WAIT; - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - } else { - (void)i2c_restart(obj); - /* RIICnDRR read */ - value = (REG(DRR.UINT32) & 0xFF); - data[count] = (char)value; - /* RIICnMR3.WAIT = 0 */ - REG(MR3.UINT32) &= ~MR3_WAIT; - (void)i2c_wait_START(obj); - /* SR2.START = 0 */ - REG(SR2.UINT32) &= ~SR2_START; - } - } else { - /* If not repeated start, send stop. */ - if (stop) { - (void)i2c_set_STOP(obj); - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - } else { - (void)i2c_restart(obj); - (void)i2c_wait_START(obj); - /* SR2.START = 0 */ - REG(SR2.UINT32) &= ~SR2_START; - } - } - - return length; -} - -int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) { - int cnt; - int status; - - /* There is a STOP condition for last processing */ - if (obj->last_stop_flag != 0) { - status = i2c_start(obj); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_BUS_BUSY; - } - } - obj->last_stop_flag = stop; - /* Send Slave address */ - status = i2c_do_write(obj, address); - if (status != 0) { - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - /* Wait send end */ - status = i2c_wait_TEND(obj); - if ((status != 0) || ((REG(SR2.UINT32) & SR2_NACKF) != 0)) { - /* Slave sends NACK */ - i2c_set_err_noslave(obj); - return I2C_ERROR_NO_SLAVE; - } - /* Send Write data */ - for (cnt=0; cnt= WAIT_TIMEOUT) { - return ack; - } - } - /* check ACK/NACK */ - if ((REG(SR2.UINT32) & SR2_NACKF) != 0) { - /* NACK */ - i2c_set_SR2_NACKF_STOP(obj); - } else { - ack = 1; - } - } - - return ack; -} - -void i2c_slave_mode(i2c_t *obj, int enable_slave) { - if (enable_slave != 0) { - REG(SER.UINT32) |= SER_SAR0E; // only slave addr 0 is enabled - } else { - REG(SER.UINT32) &= ~SER_SAR0E; // no slave addr enabled - } -} - -int i2c_slave_receive(i2c_t *obj) { - int status; - int retval; - - status = (REG(SR1.UINT8[0]) & SR1_AAS0); - status |= (REG(CR2.UINT8[0]) & CR2_TRS) >> 4; - - switch(status) { - case 0x01: - /* the master is writing to this slave */ - retval = 3; - break; - case 0x02: - /* the master is writing to all slave */ - retval = 2; - break; - case 0x03: - /* the master has requested a read from this slave */ - retval = 1; - break; - default : - /* no data */ - retval = 0; - break; - } - - return retval; -} - -int i2c_slave_read(i2c_t *obj, char *data, int length) { - int timeout = 0; - int count; - int break_flg = 0; - - if(length <= 0) { - return 0; - } - for (count = 0; ((count < (length + 1)) && (break_flg == 0)); count++) { - /* There is no timeout, but the upper limit value is set to avoid an infinite loop. */ - while (((i2c_status(obj) & SR2_STOP) != 0) || ((i2c_status(obj) & SR2_RDRF) == 0)) { - if ((i2c_status(obj) & SR2_STOP) != 0) { - break_flg = 1; - break; - } - timeout ++; - if (timeout >= WAIT_TIMEOUT) { - return -1; - } - } - if (break_flg == 0) { - if (count == 0) { - /* dummy read */ - (void)REG(DRR.UINT32); - } else { - data[count - 1] = (char)(REG(DRR.UINT32) & 0xFF); - } - } - } - if (break_flg == 0) { - (void)i2c_wait_STOP(obj); - } else { - if ((i2c_status(obj) & SR2_RDRF) != 0) { - if (count <= 1) { - /* fail safe */ - /* dummy read */ - (void)REG(DRR.UINT32); - } else { - data[count - 2] = (char)(REG(DRR.UINT32) & 0xFF); - } - } - } - /* SR2.STOP = 0 */ - REG(SR2.UINT32) &= ~SR2_STOP; - - return (count - 1); -} - -int i2c_slave_write(i2c_t *obj, const char *data, int length) { - int count = 0; - int status = 0; - - if(length <= 0) { - return 0; - } - - while ((count < length) && (status == 0)) { - status = i2c_do_write(obj, data[count]); - if(status == 0) { - /* Wait send end */ - status = i2c_wait_TEND(obj); - if ((status != 0) || ((count < (length - 1)) && ((REG(SR2.UINT32) & SR2_NACKF) != 0))) { - /* NACK */ - break; - } - } - count++; - } - /* dummy read */ - (void)REG(DRR.UINT32); - (void)i2c_wait_STOP(obj); - i2c_set_SR2_NACKF_STOP(obj); - - return count; -} - -void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask) { - REG(SAR0.UINT32) = (address & 0xfffffffe); -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h new file mode 100644 index 0000000000..578173c473 --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h @@ -0,0 +1,19 @@ +#ifndef MBED_DRV_CFG_H +#define MBED_DRV_CFG_H + +/* can_api.c */ +#define CAN_TEST_GLOBAL_CH 1 + +/* gpio_api.c */ +#define GPIO_GROUP_MAX 9 + +/* pwmout_api.c */ +#define FUNC_MOTOR_CTL_PWM +#define FUMC_MTU2_PWM + +/* rtc_api.c */ +#define USE_RTCX1_CLK +//#define USE_EXTAL_CLK +//#define USE_RTCX3_CLK + +#endif diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c deleted file mode 100644 index 22bb560902..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pinmap.c +++ /dev/null @@ -1,192 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "pinmap.h" -#include "mbed_error.h" -#include "gpio_addrdefine.h" - -PinName gpio_multi_guard = (PinName)NC; /* If set pin name here, setting of the "pin" is just one time */ - -typedef struct { - PinName pin; - int function; - int pm; -} PinFunc; - -#ifdef MAX_PERI -static const PinFunc PIPC_0_tbl[] = { -// pin func pm - {P4_0 , 2 , -1}, /* TIOC0A */ - {P5_0 , 6 , -1}, /* TIOC0A */ - {P7_0 , 7 , -1}, /* TIOC0A */ - {P4_1 , 2 , -1}, /* TIOC0B */ - {P5_1 , 6 , -1}, /* TIOC0B */ - {P7_1 , 7 , -1}, /* TIOC0B */ - {P4_2 , 2 , -1}, /* TIOC0C */ - {P5_5 , 6 , -1}, /* TIOC0C */ - {P7_2 , 7 , -1}, /* TIOC0C */ - {P4_3 , 2 , -1}, /* TIOC0D */ - {P5_7 , 6 , -1}, /* TIOC0D */ - {P7_3 , 7 , -1}, /* TIOC0D */ - {P2_11 , 5 , -1}, /* TIOC1A */ - {P6_0 , 5 , -1}, /* TIOC1A */ - {P7_4 , 7 , -1}, /* TIOC1A */ - {P8_8 , 5 , -1}, /* TIOC1A */ - {P9_7 , 4 , -1}, /* TIOC1A */ - {P2_12 , 8 , -1}, /* TIOC1B */ - {P5_2 , 6 , -1}, /* TIOC1B */ - {P6_1 , 5 , -1}, /* TIOC1B */ - {P7_5 , 7 , -1}, /* TIOC1B */ - {P8_9 , 5 , -1}, /* TIOC1B */ - {P2_1 , 6 , -1}, /* TIOC2A */ - {P6_2 , 6 , -1}, /* TIOC2A */ - {P7_6 , 7 , -1}, /* TIOC2A */ - {P8_14 , 4 , -1}, /* TIOC2A */ - {P2_2 , 6 , -1}, /* TIOC2B */ - {P6_3 , 6 , -1}, /* TIOC2B */ - {P7_7 , 7 , -1}, /* TIOC2B */ - {P8_15 , 4 , -1}, /* TIOC2B */ - {P3_4 , 6 , -1}, /* TIOC3A */ - {P7_8 , 7 , -1}, /* TIOC3A */ - {P8_10 , 4 , -1}, /* TIOC3A */ - {P3_5 , 6 , -1}, /* TIOC3B */ - {P7_9 , 7 , -1}, /* TIOC3B */ - {P8_11 , 4 , -1}, /* TIOC3B */ - {P3_6 , 6 , -1}, /* TIOC3C */ - {P5_3 , 6 , -1}, /* TIOC3C */ - {P7_10 , 7 , -1}, /* TIOC3C */ - {P8_12 , 4 , -1}, /* TIOC3C */ - {P3_7 , 6 , -1}, /* TIOC3D */ - {P5_4 , 6 , -1}, /* TIOC3D */ - {P7_11 , 7 , -1}, /* TIOC3D */ - {P8_13 , 4 , -1}, /* TIOC3D */ - {P3_8 , 6 , -1}, /* TIOC4A */ - {P4_4 , 3 , -1}, /* TIOC4A */ - {P7_12 , 7 , -1}, /* TIOC4A */ - {P3_9 , 6 , -1}, /* TIOC4B */ - {P4_5 , 3 , -1}, /* TIOC4B */ - {P7_13 , 7 , -1}, /* TIOC4B */ - {P3_10 , 6 , -1}, /* TIOC4C */ - {P4_6 , 3 , -1}, /* TIOC4C */ - {P7_14 , 7 , -1}, /* TIOC4C */ - {P3_11 , 6 , -1}, /* TIOC4D */ - {P4_7 , 3 , -1}, /* TIOC4D */ - {P7_15 , 7 , -1}, /* TIOC4D */ - {P5_7 , 1 , 1 }, /* TXOUT0M */ - {P5_6 , 1 , 1 }, /* TXOUT0P */ - {P5_5 , 1 , 1 }, /* TXOUT1M */ - {P5_4 , 1 , 1 }, /* TXOUT1P */ - {P5_3 , 1 , 1 }, /* TXOUT2M */ - {P5_2 , 1 , 1 }, /* TXOUT2P */ - {P5_1 , 1 , 1 }, /* TXCLKOUTM */ - {P5_0 , 1 , 1 }, /* TXCLKOUTP */ - {P2_11 , 4 , 0 }, /* SSITxD0 */ - {P4_7 , 5 , 0 }, /* SSITxD0 */ - {P7_4 , 6 , 0 }, /* SSITxD1 */ - {P4_15 , 6 , 0 }, /* SSITxD3 */ - {P7_11 , 2 , 0 }, /* SSITxD3 */ - {P2_7 , 4 , 0 }, /* SSITxD5 */ - {P4_11 , 5 , 0 }, /* SSITxD5 */ - {P8_10 , 8 , 0 }, /* SSITxD5 */ - {P3_7 , 8 , 0 }, /* WDTOVF */ - {NC , 0 , -1} -}; -#else -static const PinFunc PIPC_0_tbl[] = { - // pin func pm - {P4_0 , 2 , -1}, // TIOC0A - {P5_0 , 6 , -1}, // TIOC0A - {P4_2 , 2 , -1}, // TIOC0C - {P5_5 , 6 , -1}, // TIOC0C - // - {P8_14 , 4 , -1}, // TIOC2A - // - {P8_10 , 4 , -1}, // TIOC3A - {P5_3 , 6 , -1}, // TIOC3C - {P8_12 , 4 , -1}, // TIOC3C - // - {P3_8 , 6 , -1}, // TIOC4A - {P4_4 , 3 , -1}, // TIOC4A - {P3_10 , 6 , -1}, // TIOC4C - {P4_6 , 3 , -1}, // TIOC4C - // - {P5_7 , 1 , 1 }, // TXOUT0M - {P5_6 , 1 , 1 }, // TXOUT0P - {P5_5 , 1 , 1 }, // TXOUT1M - {P5_4 , 1 , 1 }, // TXOUT1P - {P5_3 , 1 , 1 }, // TXOUT2M - {P5_2 , 1 , 1 }, // TXOUT2P - {P5_1 , 1 , 1 }, // TXCLKOUTM - {P5_0 , 1 , 1 }, // TXCLKOUTP - {P4_7 , 5 , 0 }, // SSITxD0 - {P8_10 , 8 , 0 }, // SSITxD5 - {P3_7 , 8 , 0 }, // WDTOVF - {NC , 0 , -1} -}; -#endif - -void pin_function(PinName pin, int function) { - if (pin == (PinName)NC) return; - - int n = pin >> 4; - int bitmask = 1<<(pin & 0xf); - const PinFunc * Pipc_0_func = PIPC_0_tbl; - int pipc_data = 1; - - if (gpio_multi_guard != pin) { - if (function == 0) { - // means GPIO mode - *PMC(n) &= ~bitmask; - } else { - // alt-function mode - --function; - - if (function & (1 << 2)) { *PFCAE(n) |= bitmask;}else { *PFCAE(n) &= ~bitmask;} - if (function & (1 << 1)) { *PFCE(n) |= bitmask;}else { *PFCE(n) &= ~bitmask;} - if (function & (1 << 0)) { *PFC(n) |= bitmask;}else { *PFC(n) &= ~bitmask;} - - while (Pipc_0_func->pin != NC) { - if ((Pipc_0_func->pin == pin) && ((Pipc_0_func->function - 1) == function)) { - pipc_data = 0; - if (Pipc_0_func->pm == 0) { - *PMSR(n) = (bitmask << 16) | 0; - } else if (Pipc_0_func->pm == 1) { - *PMSR(n) = (bitmask << 16) | bitmask; - } else { - // Do Nothing - } - break; - } - Pipc_0_func++; - } - if (pipc_data == 1) { - *PIPC(n) |= bitmask; - } else { - *PIPC(n) &= ~bitmask; - } - - if (P1_0 <= pin && pin <= P1_7 && function == 0) { - *PBDC(n) |= bitmask; - } - *PMC(n) |= bitmask; - } - } else { - gpio_multi_guard = (PinName)NC; - } -} - -void pin_mode(PinName pin, PinMode mode) { -// if (pin == (PinName)NC) { return; } -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c deleted file mode 100644 index 522290cd87..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/pwmout_api.c +++ /dev/null @@ -1,700 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "mbed_assert.h" -#include "pwmout_api.h" -#include "cmsis.h" -#include "pinmap.h" -#include "RZ_A1_Init.h" -#include "cpg_iodefine.h" -#include "pwm_iodefine.h" -#include "gpio_addrdefine.h" - -#ifdef MAX_PERI -#define MTU2_PWM_NUM 27 -#define MTU2_PWM_SIGNAL 2 -#define MTU2_PWM_OFFSET 0x20 - -// PORT ID, PWM ID, Pin function -static const PinMap PinMap_PWM[] = { - // TIOC0 A,C - {P4_0 , MTU2_PWM0_PIN , 2}, //TIOC0A - {P5_0 , MTU2_PWM1_PIN , 6}, //TIOC0A - {P7_0 , MTU2_PWM2_PIN , 7}, //TIOC0A - {P4_2 , MTU2_PWM3_PIN , 2}, //TIOC0C - {P5_5 , MTU2_PWM4_PIN , 6}, //TIOC0C - {P7_2 , MTU2_PWM5_PIN , 7}, //TIOC0C - //TIOC1 A - {P2_11 , MTU2_PWM6_PIN , 5}, //TIOC1A - {P6_0 , MTU2_PWM7_PIN , 5}, //TIOC1A - {P7_4 , MTU2_PWM8_PIN , 7}, //TIOC1A - {P8_8 , MTU2_PWM9_PIN , 5}, //TIOC1A - {P9_7 , MTU2_PWM10_PIN , 4}, //TIOC1A - //TIOC2 A - {P2_1 , MTU2_PWM11_PIN , 6}, //TIOC2A - {P6_2 , MTU2_PWM12_PIN , 6}, //TIOC2A - {P7_6 , MTU2_PWM13_PIN , 7}, //TIOC2A - {P8_14 , MTU2_PWM14_PIN , 4}, //TIOC2A - //TIOC3 A,C - {P3_4 , MTU2_PWM15_PIN , 6}, //TIOC3A - {P7_8 , MTU2_PWM16_PIN , 7}, //TIOC3A - {P8_10 , MTU2_PWM17_PIN , 4}, //TIOC3A - {P3_6 , MTU2_PWM18_PIN , 6}, //TIOC3C - {P7_10 , MTU2_PWM19_PIN , 7}, //TIOC3C - {P8_12 , MTU2_PWM20_PIN , 4}, //TIOC3C - //TIOC4 A,C - {P3_8 , MTU2_PWM21_PIN , 6}, //TIOC4A - {P4_4 , MTU2_PWM22_PIN , 3}, //TIOC4A - {P7_12 , MTU2_PWM23_PIN , 7}, //TIOC4A - {P3_10 , MTU2_PWM24_PIN , 6}, //TIOC4C - {P4_6 , MTU2_PWM25_PIN , 3}, //TIOC4C - {P7_14 , MTU2_PWM26_PIN , 7}, //TIOC4C - //PWM1 - {P8_8 , PWM0_PIN , 6}, //PWM1A - {P8_9 , PWM1_PIN , 6}, //PWM1B - {P8_10 , PWM2_PIN , 6}, //PWM1C - {P8_11 , PWM3_PIN , 6}, //PWM1D - {P8_12 , PWM4_PIN , 6}, //PWM1E - {P8_13 , PWM5_PIN , 6}, //PWM1F - {P8_14 , PWM6_PIN , 6}, //PWM1G - {P8_15 , PWM7_PIN , 6}, //PWM1H - //PWM2 - {P3_0 , PWM8_PIN , 7}, //PWM2A - {P3_1 , PWM9_PIN , 7}, //PWM2B - {P3_2 , PWM10_PIN , 7}, //PWM2C - {P3_3 , PWM11_PIN , 7}, //PWM2D - {P4_4 , PWM12_PIN , 4}, //PWM2E - {P4_5 , PWM13_PIN , 4}, //PWM2F - {P4_6 , PWM14_PIN , 4}, //PWM2G - {P4_7 , PWM15_PIN , 4}, //PWM2H - {NC , NC , 0} -}; - -static const PWMType PORT[] = { - PWM1A, // PWM0_PIN - PWM1B, // PWM1_PIN - PWM1C, // PWM2_PIN - PWM1D, // PWM3_PIN - PWM1E, // PWM4_PIN - PWM1F, // PWM5_PIN - PWM1G, // PWM6_PIN - PWM1H, // PWM7_PIN - PWM2A, // PWM8_PIN - PWM2B, // PWM9_PIN - PWM2C, // PWM10_PIN - PWM2D, // PWM11_PIN - PWM2E, // PWM12_PIN - PWM2F, // PWM13_PIN - PWM2G, // PWM14_PIN - PWM2H, // PWM15_PIN -}; - -static const MTU2_PWMType MTU2_PORT[] = { - TIOC0A, // MTU2_PWM0_PIN - TIOC0A, // MTU2_PWM1_PIN - TIOC0A, // MTU2_PWM2_PIN - TIOC0C, // MTU2_PWM3_PIN - TIOC0C, // MTU2_PWM4_PIN - TIOC0C, // MTU2_PWM5_PIN - TIOC1A, // MTU2_PWM6_PIN - TIOC1A, // MTU2_PWM7_PIN - TIOC1A, // MTU2_PWM8_PIN - TIOC1A, // MTU2_PWM9_PIN - TIOC1A, // MTU2_PWM10_PIN - TIOC2A, // MTU2_PWM11_PIN - TIOC2A, // MTU2_PWM12_PIN - TIOC2A, // MTU2_PWM13_PIN - TIOC2A, // MTU2_PWM14_PIN - TIOC3A, // MTU2_PWM15_PIN - TIOC3A, // MTU2_PWM16_PIN - TIOC3A, // MTU2_PWM17_PIN - TIOC3C, // MTU2_PWM18_PIN - TIOC3C, // MTU2_PWM19_PIN - TIOC3C, // MTU2_PWM20_PIN - TIOC4A, // MTU2_PWM21_PIN - TIOC4A, // MTU2_PWM22_PIN - TIOC4A, // MTU2_PWM23_PIN - TIOC4C, // MTU2_PWM24_PIN - TIOC4C, // MTU2_PWM25_PIN - TIOC4C, // MTU2_PWM26_PIN -}; - -static __IO uint16_t *PWM_MATCH[] = { - &PWMPWBFR_1A, // PWM0_PIN - &PWMPWBFR_1A, // PWM1_PIN - &PWMPWBFR_1C, // PWM2_PIN - &PWMPWBFR_1C, // PWM3_PIN - &PWMPWBFR_1E, // PWM4_PIN - &PWMPWBFR_1E, // PWM5_PIN - &PWMPWBFR_1G, // PWM6_PIN - &PWMPWBFR_1G, // PWM7_PIN - &PWMPWBFR_2A, // PWM8_PIN - &PWMPWBFR_2A, // PWM9_PIN - &PWMPWBFR_2C, // PWM10_PIN - &PWMPWBFR_2C, // PWM11_PIN - &PWMPWBFR_2E, // PWM12_PIN - &PWMPWBFR_2E, // PWM13_PIN - &PWMPWBFR_2G, // PWM14_PIN - &PWMPWBFR_2G, // PWM15_PIN -}; - -static __IO uint16_t *MTU2_PWM_MATCH[MTU2_PWM_NUM][MTU2_PWM_SIGNAL] = { - { &MTU2TGRA_0, &MTU2TGRB_0 } // MTU2_PWM0_PIN - { &MTU2TGRA_0, &MTU2TGRB_0 } // MTU2_PWM1_PIN - { &MTU2TGRA_0, &MTU2TGRB_0 } // MTU2_PWM2_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 } // MTU2_PWM3_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 } // MTU2_PWM4_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 } // MTU2_PWM5_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 } // MTU2_PWM6_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 } // MTU2_PWM7_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 } // MTU2_PWM8_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 } // MTU2_PWM9_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 } // MTU2_PWM10_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 } // MTU2_PWM11_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 } // MTU2_PWM12_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 } // MTU2_PWM13_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 } // MTU2_PWM14_PIN - { &MTU2TGRA_3, &MTU2TGRB_3 } // MTU2_PWM15_PIN - { &MTU2TGRA_3, &MTU2TGRB_3 } // MTU2_PWM16_PIN - { &MTU2TGRA_3, &MTU2TGRB_3 } // MTU2_PWM17_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 } // MTU2_PWM18_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 } // MTU2_PWM19_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 } // MTU2_PWM20_PIN - { &MTU2TGRA_4, &MTU2TGRB_2 } // MTU2_PWM21_PIN - { &MTU2TGRA_4, &MTU2TGRB_2 } // MTU2_PWM22_PIN - { &MTU2TGRA_4, &MTU2TGRB_2 } // MTU2_PWM23_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 } // MTU2_PWM24_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 } // MTU2_PWM25_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 } // MTU2_PWM26_PIN -}; -#else -#define MTU2_PWM_NUM 12 -#define MTU2_PWM_SIGNAL 2 -#define MTU2_PWM_OFFSET 0x20 - -// PORT ID, PWM ID, Pin function -static const PinMap PinMap_PWM[] = { - //TIOC0 A,C - {P4_0 , MTU2_PWM0_PIN , 2}, //TIOC0A - {P5_0 , MTU2_PWM1_PIN , 6}, //TIOC0A - {P4_2 , MTU2_PWM2_PIN , 2}, //TIOC0C - {P5_5 , MTU2_PWM3_PIN , 6}, //TIOC0C - //TIOC2 A - {P8_14 , MTU2_PWM4_PIN , 4}, //TIOC2A - //TIOC3 A,C - {P8_10 , MTU2_PWM5_PIN , 4}, //TIOC3A - {P5_3 , MTU2_PWM6_PIN , 6}, //TIOC3C - {P8_12 , MTU2_PWM7_PIN , 4}, //TIOC3C - //TIOC4 A,C - {P3_8 , MTU2_PWM8_PIN , 6}, //TIOC4A - {P4_4 , MTU2_PWM9_PIN , 3}, //TIOC4A - {P3_10 , MTU2_PWM10_PIN , 6}, //TIOC4C - {P4_6 , MTU2_PWM11_PIN , 3}, //TIOC4C - //PWM1 - {P8_10 , PWM0_PIN , 6}, //PWM1C - {P8_11 , PWM1_PIN , 6}, //PWM1D - {P8_12 , PWM2_PIN , 6}, //PWM1E - {P8_13 , PWM3_PIN , 6}, //PWM1F - {P8_14 , PWM4_PIN , 6}, //PWM1G - {P8_15 , PWM5_PIN , 6}, //PWM1H - //PWM2 - {P3_0 , PWM6_PIN , 7}, //PWM2A - {P3_1 , PWM7_PIN , 7}, //PWM2B - {P3_2 , PWM8_PIN , 7}, //PWM2C - {P4_4 , PWM9_PIN , 4}, //PWM2E - {P4_5 , PWM10_PIN , 4}, //PWM2F - {P4_6 , PWM11_PIN , 4}, //PWM2G - {P4_7 , PWM12_PIN , 4}, //PWM2H - {NC , NC , 0} -}; - -static const PWMType PORT[] = { - PWM1C, // PWM0_PIN - PWM1D, // PWM1_PIN - PWM1E, // PWM2_PIN - PWM1F, // PWM3_PIN - PWM1G, // PWM4_PIN - PWM1H, // PWM5_PIN - PWM2A, // PWM6_PIN - PWM2B, // PWM7_PIN - PWM2C, // PWM8_PIN - PWM2E, // PWM9_PIN - PWM2F, // PWM10_PIN - PWM2G, // PWM11_PIN - PWM2H, // PWM12_PIN -}; - -static const MTU2_PWMType MTU2_PORT[] = { - TIOC0A, // MTU2_PWM0_PIN - TIOC0A, // MTU2_PWM1_PIN - TIOC0C, // MTU2_PWM2_PIN - TIOC0C, // MTU2_PWM3_PIN - TIOC2A, // MTU2_PWM4_PIN - TIOC3A, // MTU2_PWM5_PIN - TIOC3C, // MTU2_PWM6_PIN - TIOC3C, // MTU2_PWM7_PIN - TIOC4A, // MTU2_PWM8_PIN - TIOC4A, // MTU2_PWM9_PIN - TIOC4C, // MTU2_PWM10_PIN - TIOC4C, // MTU2_PWM11_PIN -}; - -static __IO uint16_t *PWM_MATCH[] = { - &PWMPWBFR_1C, // PWM0_PIN - &PWMPWBFR_1C, // PWM1_PIN - &PWMPWBFR_1E, // PWM2_PIN - &PWMPWBFR_1E, // PWM3_PIN - &PWMPWBFR_1G, // PWM4_PIN - &PWMPWBFR_1G, // PWM5_PIN - &PWMPWBFR_2A, // PWM6_PIN - &PWMPWBFR_2A, // PWM7_PIN - &PWMPWBFR_2C, // PWM8_PIN - &PWMPWBFR_2E, // PWM9_PIN - &PWMPWBFR_2E, // PWM10_PIN - &PWMPWBFR_2G, // PWM11_PIN - &PWMPWBFR_2G, // PWM12_PIN -}; - -static __IO uint16_t *MTU2_PWM_MATCH[MTU2_PWM_NUM][MTU2_PWM_SIGNAL] = { - { &MTU2TGRA_0, &MTU2TGRB_0 }, // MTU2_PWM0_PIN - { &MTU2TGRA_0, &MTU2TGRB_0 }, // MTU2_PWM1_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 }, // MTU2_PWM2_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 }, // MTU2_PWM3_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 }, // MTU2_PWM4_PIN - { &MTU2TGRA_3, &MTU2TGRB_3 }, // MTU2_PWM5_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 }, // MTU2_PWM6_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 }, // MTU2_PWM7_PIN - { &MTU2TGRA_4, &MTU2TGRB_2 }, // MTU2_PWM8_PIN - { &MTU2TGRA_4, &MTU2TGRB_2 }, // MTU2_PWM9_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 }, // MTU2_PWM10_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 }, // MTU2_PWM11_PIN -}; -#endif - - -static __IO uint8_t *TCR_MATCH[] = { - &MTU2TCR_0, - &MTU2TCR_1, - &MTU2TCR_2, - &MTU2TCR_3, - &MTU2TCR_4, -}; - -static __IO uint8_t *TIORH_MATCH[] = { - &MTU2TIORH_0, - &MTU2TIOR_1, - &MTU2TIOR_2, - &MTU2TIORH_3, - &MTU2TIORH_4, -}; - -static __IO uint8_t *TIORL_MATCH[] = { - &MTU2TIORL_0, - NULL, - NULL, - &MTU2TIORL_3, - &MTU2TIORL_4, -}; - -static __IO uint16_t *TGRA_MATCH[] = { - &MTU2TGRA_0, - &MTU2TGRA_1, - &MTU2TGRA_2, - &MTU2TGRA_3, - &MTU2TGRA_4, -}; - -static __IO uint16_t *TGRC_MATCH[] = { - &MTU2TGRC_0, - NULL, - NULL, - &MTU2TGRC_3, - &MTU2TGRC_4, -}; - -static __IO uint8_t *TMDR_MATCH[] = { - &MTU2TMDR_0, - &MTU2TMDR_1, - &MTU2TMDR_2, - &MTU2TMDR_3, - &MTU2TMDR_4, -}; - -static int MAX_PERIOD[] = { - 125000, - 503000, - 2000000, - 2000000, - 2000000, -}; - -typedef enum { - MODE_PWM = 0, - MODE_MTU2 -} PWMmode; - -typedef enum { - MTU2_PULSE = 0, - MTU2_PERIOD -} MTU2Signal; - -static int pwm_mode = MODE_PWM; -static uint16_t init_period_ch1 = 0; -static uint16_t init_period_ch2 = 0; -static uint16_t init_mtu2_period_ch[5] = {0}; -static int32_t period_ch1 = 1; -static int32_t period_ch2 = 1; -static int32_t mtu2_period_ch[5] = {1, 1, 1, 1, 1}; - -void pwmout_init(pwmout_t* obj, PinName pin) { - // determine the channel - PWMName pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); - MBED_ASSERT(pwm != (PWMName)NC); - - if (pwm >= MTU2_PWM_OFFSET) { - /* PWM by MTU2 */ - int tmp_pwm; - - pwm_mode = MODE_MTU2; - // power on - CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP33); - - obj->pwm = pwm; - tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); - if (((uint32_t)MTU2_PORT[tmp_pwm] & 0x00000040) == 0x00000040) { - obj->ch = 4; - MTU2TOER |= 0x36; - } else if (((uint32_t)MTU2_PORT[tmp_pwm] & 0x00000030) == 0x00000030) { - obj->ch = 3; - MTU2TOER |= 0x09; - } else if (((uint32_t)MTU2_PORT[tmp_pwm] & 0x00000020) == 0x00000020) { - obj->ch = 2; - } else if (((uint32_t)MTU2_PORT[tmp_pwm] & 0x00000010) == 0x00000010) { - obj->ch = 1; - } else { - obj->ch = 0; - } - // Wire pinout - pinmap_pinout(pin, PinMap_PWM); - - int bitmask = 1 << (pin & 0xf); - - *PMSR(PINGROUP(pin)) = (bitmask << 16) | 0; - - // default duty 0.0f - pwmout_write(obj, 0); - if (init_mtu2_period_ch[obj->ch] == 0) { - // default period 1ms - pwmout_period_us(obj, 1000); - init_mtu2_period_ch[obj->ch] = 1; - } - } else { - /* PWM */ - pwm_mode = MODE_PWM; - // power on - CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP30); - - obj->pwm = pwm; - if (((uint32_t)PORT[obj->pwm] & 0x00000010) == 0x00000010) { - obj->ch = 2; - PWMPWPR_2_BYTE_L = 0x00; - } else { - obj->ch = 1; - PWMPWPR_1_BYTE_L = 0x00; - } - - // Wire pinout - pinmap_pinout(pin, PinMap_PWM); - - // default to 491us: standard for servos, and fine for e.g. brightness control - pwmout_write(obj, 0); - if ((obj->ch == 2) && (init_period_ch2 == 0)) { - pwmout_period_us(obj, 491); - init_period_ch2 = 1; - } - if ((obj->ch == 1) && (init_period_ch1 == 0)) { - pwmout_period_us(obj, 491); - init_period_ch1 = 1; - } - } -} - -void pwmout_free(pwmout_t* obj) { - pwmout_write(obj, 0); -} - -void pwmout_write(pwmout_t* obj, float value) { - uint32_t wk_cycle; - uint16_t v; - - if (pwm_mode == MODE_MTU2) { - /* PWM by MTU2 */ - int tmp_pwm; - - if (value < 0.0f) { - value = 0.0f; - } else if (value > 1.0f) { - value = 1.0f; - } else { - // Do Nothing - } - tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); - wk_cycle = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] & 0xffff; - // set channel match to percentage - *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] = (uint16_t)((float)wk_cycle * value); - } else { - /* PWM */ - if (value < 0.0f) { - value = 0.0f; - } else if (value > 1.0f) { - value = 1.0f; - } else { - // Do Nothing - } - - if (obj->ch == 2) { - wk_cycle = PWMPWCYR_2 & 0x03ff; - } else { - wk_cycle = PWMPWCYR_1 & 0x03ff; - } - - // set channel match to percentage - v = (uint16_t)((float)wk_cycle * value); - *PWM_MATCH[obj->pwm] = (v | ((PORT[obj->pwm] & 1) << 12)); - } -} - -float pwmout_read(pwmout_t* obj) { - uint32_t wk_cycle; - float value; - - if (pwm_mode == MODE_MTU2) { - /* PWM by MTU2 */ - uint32_t wk_pulse; - int tmp_pwm; - - tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); - wk_cycle = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] & 0xffff; - wk_pulse = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] & 0xffff; - value = ((float)wk_pulse / (float)wk_cycle); - } else { - /* PWM */ - if (obj->ch == 2) { - wk_cycle = PWMPWCYR_2 & 0x03ff; - } else { - wk_cycle = PWMPWCYR_1 & 0x03ff; - } - value = ((float)(*PWM_MATCH[obj->pwm] & 0x03ff) / (float)wk_cycle); - } - - return (value > 1.0f) ? (1.0f) : (value); -} - -void pwmout_period(pwmout_t* obj, float seconds) { - pwmout_period_us(obj, seconds * 1000000.0f); -} - -void pwmout_period_ms(pwmout_t* obj, int ms) { - pwmout_period_us(obj, ms * 1000); -} - -static void set_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, uint16_t new_cycle){ - uint16_t wk_pwmpbfr; - float value; - uint16_t v; - - wk_pwmpbfr = *p_pwmpbfr; - value = ((float)(wk_pwmpbfr & 0x03ff) / (float)last_cycle); - v = (uint16_t)((float)new_cycle * value); - *p_pwmpbfr = (v | (wk_pwmpbfr & 0x1000)); -} - -static void set_mtu2_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, uint16_t new_cycle){ - uint16_t wk_pwmpbfr; - float value; - - wk_pwmpbfr = *p_pwmpbfr; - value = ((float)(wk_pwmpbfr & 0xffff) / (float)last_cycle); - *p_pwmpbfr = (uint16_t)((float)new_cycle * value); -} - -// Set the PWM period, keeping the duty cycle the same. -void pwmout_period_us(pwmout_t* obj, int us) { - uint64_t wk_cycle_mtu2; - uint32_t pclk_base; - uint32_t wk_cycle; - uint32_t wk_cks = 0; - uint16_t wk_last_cycle; - int max_us = 0; - - if (pwm_mode == MODE_MTU2) { - /* PWM by MTU2 */ - int tmp_pwm; - uint8_t tmp_tcr_up; - uint8_t tmp_tstr_sp; - uint8_t tmp_tstr_st; - - max_us = MAX_PERIOD[obj->ch]; - if (us > max_us) { - us = max_us; - } else if (us < 1) { - us = 1; - } else { - // Do Nothing - } - - if (RZ_A1_IsClockMode0() == false) { - pclk_base = (uint32_t)CM1_RENESAS_RZ_A1_P0_CLK; - } else { - pclk_base = (uint32_t)CM0_RENESAS_RZ_A1_P0_CLK; - } - - wk_cycle_mtu2 = (uint64_t)pclk_base * us; - while (wk_cycle_mtu2 >= 65535000000) { - if ((obj->ch == 1) && (wk_cks == 3)) { - wk_cks+=2; - } else if ((obj->ch == 2) && (wk_cks == 3)) { - wk_cycle_mtu2 >>= 2; - wk_cks+=3; - } - wk_cycle_mtu2 >>= 2; - wk_cks++; - } - wk_cycle = (uint32_t)(wk_cycle_mtu2 / 1000000); - - tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); - if (((uint8_t)MTU2_PORT[tmp_pwm] & 0x02) == 0x02) { - tmp_tcr_up = 0xC0; - } else { - tmp_tcr_up = 0x40; - } - if ((obj->ch == 4) || (obj->ch == 3)) { - tmp_tstr_sp = ~(0x38 | (1 << (obj->ch + 3))); - tmp_tstr_st = (1 << (obj->ch + 3)); - } else { - tmp_tstr_sp = ~(0x38 | (1 << obj->ch)); - tmp_tstr_st = (1 << obj->ch); - } - // Counter Stop - MTU2TSTR &= tmp_tstr_sp; - wk_last_cycle = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] & 0xffff; - *TCR_MATCH[obj->ch] = tmp_tcr_up | wk_cks; - *TIORH_MATCH[obj->ch] = 0x21; - if ((obj->ch == 0) || (obj->ch == 3) || (obj->ch == 4)) { - *TIORL_MATCH[obj->ch] = 0x21; - } - *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] = (uint16_t)wk_cycle; // Set period - - // Set duty again(TGRA) - set_mtu2_duty_again(TGRA_MATCH[obj->ch], wk_last_cycle, wk_cycle); - if ((obj->ch == 0) || (obj->ch == 3) || (obj->ch == 4)) { - // Set duty again(TGRC) - set_mtu2_duty_again(TGRC_MATCH[obj->ch], wk_last_cycle, wk_cycle); - } - *TMDR_MATCH[obj->ch] = 0x02; // PWM mode 1 - - // Counter Start - MTU2TSTR |= tmp_tstr_st; - // Save for future use - mtu2_period_ch[obj->ch] = us; - } else { - /* PWM */ - if (us > 491) { - us = 491; - } else if (us < 1) { - us = 1; - } else { - // Do Nothing - } - - if (RZ_A1_IsClockMode0() == false) { - pclk_base = (uint32_t)CM1_RENESAS_RZ_A1_P0_CLK / 10000; - } else { - pclk_base = (uint32_t)CM0_RENESAS_RZ_A1_P0_CLK / 10000; - } - - wk_cycle = pclk_base * us; - while (wk_cycle >= 102350) { - wk_cycle >>= 1; - wk_cks++; - } - wk_cycle = (wk_cycle + 50) / 100; - - if (obj->ch == 2) { - wk_last_cycle = PWMPWCYR_2 & 0x03ff; - PWMPWCR_2_BYTE_L = 0xc0 | wk_cks; - PWMPWCYR_2 = (uint16_t)wk_cycle; - - // Set duty again - set_duty_again(&PWMPWBFR_2A, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_2C, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_2E, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_2G, wk_last_cycle, wk_cycle); - - // Counter Start - PWMPWCR_2_BYTE_L |= 0x08; - - // Save for future use - period_ch2 = us; - } else { - wk_last_cycle = PWMPWCYR_1 & 0x03ff; - PWMPWCR_1_BYTE_L = 0xc0 | wk_cks; - PWMPWCYR_1 = (uint16_t)wk_cycle; - - // Set duty again - set_duty_again(&PWMPWBFR_1A, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_1C, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_1E, wk_last_cycle, wk_cycle); - set_duty_again(&PWMPWBFR_1G, wk_last_cycle, wk_cycle); - - // Counter Start - PWMPWCR_1_BYTE_L |= 0x08; - - // Save for future use - period_ch1 = us; - } - } -} - -void pwmout_pulsewidth(pwmout_t* obj, float seconds) { - pwmout_pulsewidth_us(obj, seconds * 1000000.0f); -} - -void pwmout_pulsewidth_ms(pwmout_t* obj, int ms) { - pwmout_pulsewidth_us(obj, ms * 1000); -} - -void pwmout_pulsewidth_us(pwmout_t* obj, int us) { - float value = 0; - - if (pwm_mode == MODE_MTU2) { - /* PWM by MTU2 */ - if (mtu2_period_ch[obj->ch] != 0) { - value = (float)us / (float)mtu2_period_ch[obj->ch]; - } - } else { - /* PWM */ - if (obj->ch == 2) { - if (period_ch2 != 0) { - value = (float)us / (float)period_ch2; - } - } else { - if (period_ch1 != 0) { - value = (float)us / (float)period_ch1; - } - } - } - pwmout_write(obj, value); -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c deleted file mode 100644 index f9a89359fd..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/serial_api.c +++ /dev/null @@ -1,672 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2015 ARM Limited - * - * 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. - */ -// math.h required for floating point operations for baud rate calculation -#include "mbed_assert.h" -#include -#include -#include - -#include "serial_api.h" -#include "cmsis.h" -#include "pinmap.h" -#include "gpio_api.h" -#include "mbed_critical.h" - -#include "scif_iodefine.h" -#include "cpg_iodefine.h" - -/****************************************************************************** - * INITIALIZATION - ******************************************************************************/ -#define PCLK (66666666) // Define the peripheral clock P1 frequency. - -#define UART_NUM 8 -#define IRQ_NUM 2 - -static void uart0_tx_irq(void); -static void uart1_tx_irq(void); -static void uart2_tx_irq(void); -static void uart3_tx_irq(void); -static void uart4_tx_irq(void); -static void uart5_tx_irq(void); -static void uart6_tx_irq(void); -static void uart7_tx_irq(void); -static void uart0_rx_irq(void); -static void uart1_rx_irq(void); -static void uart2_rx_irq(void); -static void uart3_rx_irq(void); -static void uart4_rx_irq(void); -static void uart5_rx_irq(void); -static void uart6_rx_irq(void); -static void uart7_rx_irq(void); - -#ifdef MAX_PERI -static const PinMap PinMap_UART_TX[] = { - {P2_14 , UART0, 6}, - {P4_9 , UART0, 7}, - {P6_9 , UART0, 5}, - {P2_5 , UART1, 6}, - {P4_12 , UART1, 7}, - {P6_12 , UART1, 5}, - {P9_3 , UART1, 4}, - {P3_0 , UART2, 6}, - {P3_1 , UART2, 4}, - {P4_2 , UART2, 5}, - {P4_14 , UART2, 7}, - {P6_3 , UART2, 7}, - {P8_6 , UART2, 7}, - {P3_5 , UART3, 7}, - {P5_3 , UART3, 5}, - {P6_1 , UART3, 7}, - {P8_8 , UART3, 7}, - {P5_0 , UART4, 5}, - {P7_1 , UART4, 4}, - {P8_14 , UART4, 7}, - {P6_6 , UART5, 5}, - {P8_1 , UART5, 4}, - {P8_13 , UART5, 5}, - {P5_6 , UART6, 5}, - {P6_14 , UART6, 4}, - {P7_4 , UART7, 4}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_RX[] = { - {P2_15 , UART0, 6}, - {P4_10 , UART0, 7}, - {P6_10 , UART0, 5}, - {P2_6 , UART1, 6}, - {P4_13 , UART1, 7}, - {P6_13 , UART1, 5}, - {P9_4 , UART1, 4}, - {P3_2 , UART2, 4}, - {P4_3 , UART2, 5}, - {P4_15 , UART2, 7}, - {P6_2 , UART2, 7}, - {P8_4 , UART2, 7}, - {P3_6 , UART3, 7}, - {P5_4 , UART3, 5}, - {P6_0 , UART3, 7}, - {P8_9 , UART3, 7}, - {P5_1 , UART4, 5}, - {P7_2 , UART4, 4}, - {P8_15 , UART4, 7}, - {P6_7 , UART5, 5}, - {P8_2 , UART5, 4}, - {P8_11 , UART5, 5}, - {P5_7 , UART6, 5}, - {P6_15 , UART6, 4}, - {P7_5 , UART7, 4}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_CTS[] = { - {P2_3 , UART1, 6}, - {P9_5 , UART1, 4}, - {P6_3 , UART5, 5}, - {P7_15 , UART5, 4}, - {P7_6 , UART7, 4}, - {NC , NC , 0} -}; -static const PinMap PinMap_UART_RTS[] = { - {P2_7 , UART1, 6}, - {P9_6 , UART1, 4}, - {P6_4 , UART5, 5}, - {P8_3 , UART5, 4}, - {P7_7 , UART7, 4}, - {NC , NC , 0} -}; -#else -static const PinMap PinMap_UART_TX[] = { - {P3_0 , UART2, 6}, - {P3_1 , UART2, 4}, - {P4_2 , UART2, 5}, - {P5_3 , UART3, 5}, - {P8_8 , UART3, 7}, - {P5_0 , UART4, 5}, - {P8_14 , UART4, 7}, - {P8_13 , UART5, 5}, - {P5_6 , UART6, 5}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_RX[] = { - {P3_2 , UART2, 4}, - {P4_3 , UART2, 5}, - {P5_4 , UART3, 5}, - {P8_9 , UART3, 7}, - {P5_1 , UART4, 5}, - {P8_15 , UART4, 7}, - {P8_11 , UART5, 5}, - {P5_7 , UART6, 5}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_CTS[] = { - {NC , NC , 0} -}; -static const PinMap PinMap_UART_RTS[] = { - {NC , NC , 0} -}; -#endif - -static const struct st_scif *SCIF[] = SCIF_ADDRESS_LIST; -static uart_irq_handler irq_handler; - -int stdio_uart_inited = 0; -serial_t stdio_uart; - -struct serial_global_data_s { - uint32_t serial_irq_id; - gpio_t sw_rts, sw_cts; - uint8_t count, rx_irq_set_flow, rx_irq_set_api; -}; - -static struct serial_global_data_s uart_data[UART_NUM]; - -static const IRQn_Type irq_set_tbl[UART_NUM][IRQ_NUM] = { - {SCIFRXI0_IRQn, SCIFTXI0_IRQn}, - {SCIFRXI1_IRQn, SCIFTXI1_IRQn}, - {SCIFRXI2_IRQn, SCIFTXI2_IRQn}, - {SCIFRXI3_IRQn, SCIFTXI3_IRQn}, - {SCIFRXI4_IRQn, SCIFTXI4_IRQn}, - {SCIFRXI5_IRQn, SCIFTXI5_IRQn}, - {SCIFRXI6_IRQn, SCIFTXI6_IRQn}, - {SCIFRXI7_IRQn, SCIFTXI7_IRQn} -}; - -static const IRQHandler hander_set_tbl[UART_NUM][IRQ_NUM] = { - {uart0_rx_irq, uart0_tx_irq}, - {uart1_rx_irq, uart1_tx_irq}, - {uart2_rx_irq, uart2_tx_irq}, - {uart3_rx_irq, uart3_tx_irq}, - {uart4_rx_irq, uart4_tx_irq}, - {uart5_rx_irq, uart5_tx_irq}, - {uart6_rx_irq, uart6_tx_irq}, - {uart7_rx_irq, uart7_tx_irq} -}; - -static __IO uint16_t *SCSCR_MATCH[] = { - &SCSCR_0, - &SCSCR_1, - &SCSCR_2, - &SCSCR_3, - &SCSCR_4, - &SCSCR_5, - &SCSCR_6, - &SCSCR_7, -}; - -static __IO uint16_t *SCFSR_MATCH[] = { - &SCFSR_0, - &SCFSR_1, - &SCFSR_2, - &SCFSR_3, - &SCFSR_4, - &SCFSR_5, - &SCFSR_6, - &SCFSR_7, -}; - - -void serial_init(serial_t *obj, PinName tx, PinName rx) { - volatile uint8_t dummy ; - int is_stdio_uart = 0; - // determine the UART to use - uint32_t uart_tx = pinmap_peripheral(tx, PinMap_UART_TX); - uint32_t uart_rx = pinmap_peripheral(rx, PinMap_UART_RX); - uint32_t uart = pinmap_merge(uart_tx, uart_rx); - - MBED_ASSERT((int)uart != NC); - - obj->uart = (struct st_scif *)SCIF[uart]; - // enable power - switch (uart) { - case UART0: - CPG.STBCR4 &= ~(1 << 7); - break; - case UART1: - CPG.STBCR4 &= ~(1 << 6); - break; - case UART2: - CPG.STBCR4 &= ~(1 << 5); - break; - case UART3: - CPG.STBCR4 &= ~(1 << 4); - break; - case UART4: - CPG.STBCR4 &= ~(1 << 3); - break; - case UART5: - CPG.STBCR4 &= ~(1 << 2); - break; - case UART6: - CPG.STBCR4 &= ~(1 << 1); - break; - case UART7: - CPG.STBCR4 &= ~(1 << 0); - break; - } - dummy = CPG.STBCR4; - - /* if this uart has been previously configured to tx, wait tx completion befor loading new configuration */ - if(obj->uart->SCSCR & 0xA0) - while(!(obj->uart->SCFSR & 0x0040)); - - /* ==== SCIF initial setting ==== */ - /* ---- Serial control register (SCSCR) setting ---- */ - /* B'00 : Internal CLK */ - obj->uart->SCSCR = 0x0000u; /* SCIF transmitting and receiving operations stop */ - - /* ---- FIFO control register (SCFCR) setting ---- */ - /* Transmit FIFO reset & Receive FIFO data register reset */ - obj->uart->SCFCR = 0x0006; - - /* ---- Serial status register (SCFSR) setting ---- */ - dummy = obj->uart->SCFSR; - obj->uart->SCFSR = (dummy & 0xFF6Cu); /* ER,BRK,DR bit clear */ - - /* ---- Line status register (SCLSR) setting ---- */ - /* ORER bit clear */ - obj->uart->SCLSR = 0; - - /* ---- Serial extension mode register (SCEMR) setting ---- - b7 BGDM - Baud rate generator double-speed mode : Normal mode - b0 ABCS - Base clock select in asynchronous mode : Base clock is 16 times the bit rate */ - obj->uart->SCEMR = 0x0000u; - - /* ---- Bit rate register (SCBRR) setting ---- */ - serial_baud (obj, 9600); - serial_format(obj, 8, ParityNone, 1); - - /* ---- FIFO control register (SCFCR) setting ---- */ - obj->uart->SCFCR = 0x0030u; - - /* ---- Serial port register (SCSPTR) setting ---- - b1 SPB2IO - Serial port break output : disabled - b0 SPB2DT - Serial port break data : High-level */ - obj->uart->SCSPTR = 0x0003u; // SPB2IO = 1, SPB2DT = 1 - - /* ---- Line status register (SCLSR) setting ---- - b0 ORER - Overrun error detect : clear */ - - if (obj->uart->SCLSR & 0x0001) { - obj->uart->SCLSR = 0u; // ORER clear - } - - // pinout the chosen uart - pinmap_pinout(tx, PinMap_UART_TX); - pinmap_pinout(rx, PinMap_UART_RX); - - switch (uart) { - case UART0: - obj->index = 0; - break; - case UART1: - obj->index = 1; - break; - case UART2: - obj->index = 2; - break; - case UART3: - obj->index = 3; - break; - case UART4: - obj->index = 4; - break; - case UART5: - obj->index = 5; - break; - case UART6: - obj->index = 6; - break; - case UART7: - obj->index = 7; - break; - } - uart_data[obj->index].sw_rts.pin = NC; - uart_data[obj->index].sw_cts.pin = NC; - - /* ---- Serial control register (SCSCR) setting ---- */ - /* Setting the TE and RE bits enables the TxD and RxD pins to be used. */ - obj->uart->SCSCR = (((uart_tx != (uint32_t)NC)? 0xA0 : 0) | ((uart_rx != (uint32_t)NC)? 0x50 : 0 )); //0x00F0; - - is_stdio_uart = (uart == STDIO_UART) ? (1) : (0); - - if (is_stdio_uart) { - stdio_uart_inited = 1; - memcpy(&stdio_uart, obj, sizeof(serial_t)); - } -} - -void serial_free(serial_t *obj) { - uart_data[obj->index].serial_irq_id = 0; -} - -// serial_baud -// set the baud rate, taking in to account the current SystemFrequency -void serial_baud(serial_t *obj, int baudrate) { - uint16_t DL; - - obj->uart->SCSMR &= ~0x0003; - - if (baudrate > 32552) { - obj->uart->SCEMR = 0x0081; // BGDM = 1, ABCS = 1 - DL = PCLK / (8 * baudrate); - if (DL > 0) { - DL--; - } - obj->uart->SCBRR = (uint8_t)DL; - } else if (baudrate > 16276) { - obj->uart->SCEMR = 0x0080; // BGDM = 1 - obj->uart->SCBRR = PCLK / (16 * baudrate) - 1; - } else if (baudrate > 8138) { - obj->uart->SCEMR = 0x0000; - obj->uart->SCBRR = PCLK / (32 * baudrate) - 1; - } else if (baudrate > 4169) { - obj->uart->SCSMR |= 0x0001; - obj->uart->SCEMR = 0x0080; // BGDM = 1 - obj->uart->SCBRR = PCLK / (64 * baudrate) - 1; - } else if (baudrate > 2034) { - obj->uart->SCSMR |= 0x0001; - obj->uart->SCEMR = 0x0000; - obj->uart->SCBRR = PCLK / (128 * baudrate) - 1; - } else if (baudrate > 1017) { - obj->uart->SCSMR |= 0x0002; - obj->uart->SCEMR = 0x0080; // BGDM = 1 - obj->uart->SCBRR = PCLK / (256 * baudrate) - 1; - } else if (baudrate > 508) { - obj->uart->SCSMR |= 0x0002; - obj->uart->SCEMR = 0x0000; - obj->uart->SCBRR = PCLK / (512 * baudrate) - 1; - } else if (baudrate > 254) { - obj->uart->SCSMR |= 0x0003; - obj->uart->SCEMR = 0x0080; // BGDM = 1 - obj->uart->SCBRR = PCLK / (1024 * baudrate) - 1; - } else if (baudrate > 127) { - obj->uart->SCSMR |= 0x0003; - obj->uart->SCEMR = 0x0000; - obj->uart->SCBRR = PCLK / (2048 * baudrate) - 1; - } else { - obj->uart->SCSMR |= 0x0003; - obj->uart->SCEMR = 0x0000; - obj->uart->SCBRR = 0xFFu; - } -} - -void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { - int parity_enable; - int parity_select; - - MBED_ASSERT((stop_bits == 1) || (stop_bits == 2)); // 0: 1 stop bits, 1: 2 stop bits - MBED_ASSERT((data_bits > 4) && (data_bits < 9)); // 5: 5 data bits ... 3: 8 data bits - MBED_ASSERT((parity == ParityNone) || (parity == ParityOdd) || (parity == ParityEven) || - (parity == ParityForced1) || (parity == ParityForced0)); - - stop_bits = (stop_bits == 1)? 0: - (stop_bits == 2)? 1: - 0; // must not to be - - data_bits = (data_bits == 8)? 0: - (data_bits == 7)? 1: - 0; // must not to be - - switch (parity) { - case ParityNone: - parity_enable = 0; - parity_select = 0; - break; - case ParityOdd: - parity_enable = 1; - parity_select = 1; - break; - case ParityEven: - parity_enable = 1; - parity_select = 0; - break; - case ParityForced1: - case ParityForced0: - default: - parity_enable = 0; - parity_select = 0; - break; - } - - obj->uart->SCSMR = data_bits << 6 - | parity_enable << 5 - | parity_select << 4 - | stop_bits << 3; -} - -/****************************************************************************** - * INTERRUPTS HANDLING - ******************************************************************************/ - -static void uart_tx_irq(IRQn_Type irq_num, uint32_t index) { - __IO uint16_t *dmy_rd_scscr; - __IO uint16_t *dmy_rd_scfsr; - - dmy_rd_scscr = SCSCR_MATCH[index]; - *dmy_rd_scscr &= 0x007B; // Clear TIE and Write to bit15~8,2 is always 0 - dmy_rd_scfsr = SCFSR_MATCH[index]; - *dmy_rd_scfsr = (*dmy_rd_scfsr & ~0x0020); // Clear TDFE - - irq_handler(uart_data[index].serial_irq_id, TxIrq); -} - -static void uart_rx_irq(IRQn_Type irq_num, uint32_t index) { - __IO uint16_t *dmy_rd_scscr; - __IO uint16_t *dmy_rd_scfsr; - - dmy_rd_scscr = SCSCR_MATCH[index]; - *dmy_rd_scscr &= 0x00B3; // Clear RIE,REIE and Write to bit15~8,2 is always 0 - dmy_rd_scfsr = SCFSR_MATCH[index]; - *dmy_rd_scfsr = (*dmy_rd_scfsr & ~0x0003); // Clear RDF,DR - - irq_handler(uart_data[index].serial_irq_id, RxIrq); -} - -/* TX handler */ -static void uart0_tx_irq(void) { - uart_tx_irq(SCIFTXI0_IRQn, 0); -} -static void uart1_tx_irq(void) { - uart_tx_irq(SCIFTXI1_IRQn, 1); -} -static void uart2_tx_irq(void) { - uart_tx_irq(SCIFTXI2_IRQn, 2); -} -static void uart3_tx_irq(void) { - uart_tx_irq(SCIFTXI3_IRQn, 3); -} -static void uart4_tx_irq(void) { - uart_tx_irq(SCIFTXI4_IRQn, 4); -} -static void uart5_tx_irq(void) { - uart_tx_irq(SCIFTXI5_IRQn, 5); -} -static void uart6_tx_irq(void) { - uart_tx_irq(SCIFTXI6_IRQn, 6); -} -static void uart7_tx_irq(void) { - uart_tx_irq(SCIFTXI7_IRQn, 7); -} -/* RX handler */ -static void uart0_rx_irq(void) { - uart_rx_irq(SCIFRXI0_IRQn, 0); -} -static void uart1_rx_irq(void) { - uart_rx_irq(SCIFRXI1_IRQn, 1); -} -static void uart2_rx_irq(void) { - uart_rx_irq(SCIFRXI2_IRQn, 2); -} -static void uart3_rx_irq(void) { - uart_rx_irq(SCIFRXI3_IRQn, 3); -} -static void uart4_rx_irq(void) { - uart_rx_irq(SCIFRXI4_IRQn, 4); -} -static void uart5_rx_irq(void) { - uart_rx_irq(SCIFRXI5_IRQn, 5); -} -static void uart6_rx_irq(void) { - uart_rx_irq(SCIFRXI6_IRQn, 6); -} -static void uart7_rx_irq(void) { - uart_rx_irq(SCIFRXI7_IRQn, 7); -} - -void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { - irq_handler = handler; - uart_data[obj->index].serial_irq_id = id; -} - -static void serial_irq_set_internal(serial_t *obj, SerialIrq irq, uint32_t enable) { - IRQn_Type IRQn; - IRQHandler handler; - - IRQn = irq_set_tbl[obj->index][irq]; - handler = hander_set_tbl[obj->index][irq]; - - if ((obj->index >= 0) && (obj->index <= 7)) { - if (enable) { - InterruptHandlerRegister(IRQn, (void (*)(uint32_t))handler); - GIC_SetPriority(IRQn, 5); - GIC_EnableIRQ(IRQn); - } else { - GIC_DisableIRQ(IRQn); - } - } -} - -void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { - if (RxIrq == irq) { - uart_data[obj->index].rx_irq_set_api = enable; - } - serial_irq_set_internal(obj, irq, enable); -} - -static void serial_flow_irq_set(serial_t *obj, uint32_t enable) { - uart_data[obj->index].rx_irq_set_flow = enable; - serial_irq_set_internal(obj, RxIrq, enable); -} - -/****************************************************************************** - * READ/WRITE - ******************************************************************************/ -int serial_getc(serial_t *obj) { - uint16_t err_read; - int data; - - core_util_critical_section_enter(); - if (obj->uart->SCFSR & 0x93) { - err_read = obj->uart->SCFSR; - obj->uart->SCFSR = (err_read & ~0x93); - } - obj->uart->SCSCR |= 0x0040; // Set RIE - core_util_critical_section_exit(); - - if (obj->uart->SCLSR & 0x0001) { - obj->uart->SCLSR = 0u; // ORER clear - } - - while (!serial_readable(obj)); - data = obj->uart->SCFRDR & 0xff; - - core_util_critical_section_enter(); - - err_read = obj->uart->SCFSR; - obj->uart->SCFSR = (err_read & 0xfffD); // Clear RDF - - core_util_critical_section_exit(); - - if (err_read & 0x80) { - data = -1; //err - } - return data; -} - -void serial_putc(serial_t *obj, int c) { - uint16_t dummy_read; - - core_util_critical_section_enter(); - obj->uart->SCSCR |= 0x0080; // Set TIE - core_util_critical_section_exit(); - while (!serial_writable(obj)); - obj->uart->SCFTDR = c; - core_util_critical_section_enter(); - dummy_read = obj->uart->SCFSR; - obj->uart->SCFSR = (dummy_read & 0xff9f); // Clear TEND/TDFE - core_util_critical_section_exit(); - uart_data[obj->index].count++; -} - -int serial_readable(serial_t *obj) { - return ((obj->uart->SCFSR & 0x02) != 0); // RDF -} - -int serial_writable(serial_t *obj) { - return ((obj->uart->SCFSR & 0x20) != 0); // TDFE -} - -void serial_clear(serial_t *obj) { - core_util_critical_section_enter(); - obj->uart->SCFCR |= 0x06; // TFRST = 1, RFRST = 1 - obj->uart->SCFCR &= ~0x06; // TFRST = 0, RFRST = 0 - obj->uart->SCFSR &= ~0x0093u; // ER, BRK, RDF, DR = 0 - core_util_critical_section_exit(); -} - -void serial_pinout_tx(PinName tx) { - pinmap_pinout(tx, PinMap_UART_TX); -} - -void serial_break_set(serial_t *obj) { - core_util_critical_section_enter(); - // TxD Output(L) - obj->uart->SCSPTR &= ~0x0001u; // SPB2DT = 0 - obj->uart->SCSCR &= ~0x0020u; // TE = 0 (Output disable) - core_util_critical_section_exit(); -} - -void serial_break_clear(serial_t *obj) { - core_util_critical_section_enter(); - obj->uart->SCSCR |= 0x0020u; // TE = 1 (Output enable) - obj->uart->SCSPTR |= 0x0001u; // SPB2DT = 1 - core_util_critical_section_exit(); -} - -void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow) { - // determine the UART to use - serial_flow_irq_set(obj, 0); - - if (type == FlowControlRTSCTS) { - core_util_critical_section_enter(); - obj->uart->SCFCR = 0x0008u; // CTS/RTS enable - core_util_critical_section_exit(); - pinmap_pinout(rxflow, PinMap_UART_RTS); - pinmap_pinout(txflow, PinMap_UART_CTS); - } else { - core_util_critical_section_enter(); - obj->uart->SCFCR = 0x0000u; // CTS/RTS diable - core_util_critical_section_exit(); - } -} - - - - diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c deleted file mode 100644 index 1464aaacd3..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/spi_api.c +++ /dev/null @@ -1,343 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include "mbed_assert.h" -#include - -#include "spi_api.h" -#include "cmsis.h" -#include "pinmap.h" -#include "mbed_error.h" -#include "RZ_A1_Init.h" - - -#ifdef MAX_PERI -static const PinMap PinMap_SPI_SCLK[] = { - {P2_12 , SPI_0, 2}, - {P7_15 , SPI_0, 2}, - {P4_4 , SPI_1, 2}, - {P6_4 , SPI_1, 7}, - {P8_3 , SPI_2, 3}, - {P8_14 , SPI_2, 5}, - {P3_0 , SPI_3, 8}, - {P5_0 , SPI_3, 8}, - {P2_8 , SPI_4, 8}, - {P4_0 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_SSEL[] = { - {P2_13 , SPI_0, 2}, - {P8_0 , SPI_0, 2}, - {P4_5 , SPI_1, 2}, - {P6_5 , SPI_1, 7}, - {P8_4 , SPI_2, 3}, - {P8_15 , SPI_2, 5}, - {P3_1 , SPI_3, 8}, - {P5_1 , SPI_3, 8}, - {P2_9 , SPI_4, 8}, - {P4_1 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MOSI[] = { - {P2_14 , SPI_0, 2}, - {P8_1 , SPI_0, 2}, - {P4_6 , SPI_1, 2}, - {P6_6 , SPI_1, 7}, - {P8_5 , SPI_2, 3}, - {P9_0 , SPI_2, 5}, - {P3_2 , SPI_3, 8}, - {P5_2 , SPI_3, 8}, - {P2_10 , SPI_4, 8}, - {P4_2 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MISO[] = { - {P2_15 , SPI_0, 2}, - {P8_2 , SPI_0, 2}, - {P4_7 , SPI_1, 2}, - {P6_7 , SPI_1, 7}, - {P8_6 , SPI_2, 3}, - {P9_1 , SPI_2, 5}, - {P3_3 , SPI_3, 8}, - {P5_3 , SPI_3, 8}, - {P2_11 , SPI_4, 8}, - {P4_3 , SPI_4, 7}, - {NC , NC , 0} -}; -#else -static const PinMap PinMap_SPI_SCLK[] = { - {P4_4 , SPI_1, 2}, - {P8_14 , SPI_2, 5}, - {P5_0 , SPI_3, 8}, - {P4_0 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_SSEL[] = { - {P4_5 , SPI_1, 2}, - {P8_15 , SPI_2, 5}, - {P5_1 , SPI_3, 8}, - {P4_1 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MOSI[] = { - {P4_6 , SPI_1, 2}, - {P9_0 , SPI_2, 5}, - {P5_2 , SPI_3, 8}, - {P4_2 , SPI_4, 7}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MISO[] = { - {P4_7 , SPI_1, 2}, - {P9_1 , SPI_2, 5}, - {P5_3 , SPI_3, 8}, - {P4_3 , SPI_4, 7}, - {NC , NC , 0} -}; -#endif - - -static const struct st_rspi *RSPI[] = RSPI_ADDRESS_LIST; - -static inline void spi_disable(spi_t *obj); -static inline void spi_enable(spi_t *obj); -static inline int spi_readable(spi_t *obj); -static inline void spi_write(spi_t *obj, int value); -static inline int spi_read(spi_t *obj); - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { - // determine the SPI to use - volatile uint8_t dummy; - uint32_t spi_mosi = pinmap_peripheral(mosi, PinMap_SPI_MOSI); - uint32_t spi_miso = pinmap_peripheral(miso, PinMap_SPI_MISO); - uint32_t spi_sclk = pinmap_peripheral(sclk, PinMap_SPI_SCLK); - uint32_t spi_ssel = pinmap_peripheral(ssel, PinMap_SPI_SSEL); - uint32_t spi_data = pinmap_merge(spi_mosi, spi_miso); - uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel); - uint32_t spi = pinmap_merge(spi_data, spi_cntl); - - MBED_ASSERT((int)spi != NC); - - obj->spi = (struct st_rspi *)RSPI[spi]; - - // enable power and clocking - switch (spi) { - case SPI_1: CPGSTBCR10 &= ~(0x40); break; - case SPI_2: CPGSTBCR10 &= ~(0x20); break; - case SPI_3: CPGSTBCR10 &= ~(0x10); break; - case SPI_4: CPGSTBCR10 &= ~(0x08); break; - } - dummy = CPGSTBCR10; - - obj->spi->SPCR = 0x00; // CTRL to 0 - obj->spi->SPSCR = 0x00; // no sequential operation - obj->spi->SSLP = 0x00; // SSL 'L' active - obj->spi->SPDCR = 0x20; // byte access - obj->spi->SPCKD = 0x00; // SSL -> enable CLK delay : 1RSPCK - obj->spi->SSLND = 0x00; // CLK end -> SSL neg delay : 1RSPCK - obj->spi->SPND = 0x00; // delay between CMD : 1RSPCK + 2P1CLK - obj->spi->SPPCR = 0x20; // MOSI Idle fixed value equals 0 - obj->spi->SPBFCR = 0xf0; // and set trigger count: read 1, write 1 - obj->spi->SPBFCR = 0x30; // and reset buffer - - // pin out the spi pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - if ((int)ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } -} - -void spi_free(spi_t *obj) {} - -void spi_format(spi_t *obj, int bits, int mode, int slave) { - int DSS; // DSS (data select size) - int polarity = (mode & 0x2) ? 1 : 0; - int phase = (mode & 0x1) ? 1 : 0; - uint16_t tmp = 0; - uint16_t mask = 0xf03; - uint16_t wk_spcmd0; - uint8_t splw; - - switch (mode) { - case 0: - case 1: - case 2: - case 3: - // Do Nothing - break; - default: - error("SPI format error"); - return; - } - - switch (bits) { - case 8: - DSS = 0x7; - splw = 0x20; - break; - case 16: - DSS = 0xf; - splw = 0x40; - break; - case 32: - DSS = 0x2; - splw = 0x60; - break; - default: - error("SPI module don't support other than 8/16/32bits"); - return; - } - tmp |= phase; - tmp |= (polarity << 1); - tmp |= (DSS << 8); - obj->bits = bits; - - spi_disable(obj); - wk_spcmd0 = obj->spi->SPCMD0; - wk_spcmd0 &= ~mask; - wk_spcmd0 |= (mask & tmp); - obj->spi->SPCMD0 = wk_spcmd0; - obj->spi->SPDCR = splw; - if (slave) { - obj->spi->SPCR &=~(1 << 3); // MSTR to 0 - } else { - obj->spi->SPCR |= (1 << 3); // MSTR to 1 - } - spi_enable(obj); -} - -void spi_frequency(spi_t *obj, int hz) { - uint32_t pclk_base; - uint32_t div; - uint32_t brdv = 0; - uint32_t hz_max; - uint32_t hz_min; - uint16_t mask = 0x000c; - uint16_t wk_spcmd0; - - /* set PCLK */ - if (RZ_A1_IsClockMode0() == false) { - pclk_base = CM1_RENESAS_RZ_A1_P1_CLK; - } else { - pclk_base = CM0_RENESAS_RZ_A1_P1_CLK; - } - - hz_min = pclk_base / 2 / 256 / 8; - hz_max = pclk_base / 2; - if ((hz < hz_min) || (hz > hz_max)) { - error("Couldn't setup requested SPI frequency"); - return; - } - - div = (pclk_base / hz / 2); - while (div > 256) { - div >>= 1; - brdv++; - } - div -= 1; - brdv = (brdv << 2); - - spi_disable(obj); - obj->spi->SPBR = div; - wk_spcmd0 = obj->spi->SPCMD0; - wk_spcmd0 &= ~mask; - wk_spcmd0 |= (mask & brdv); - obj->spi->SPCMD0 = wk_spcmd0; - spi_enable(obj); -} - -static inline void spi_disable(spi_t *obj) { - obj->spi->SPCR &= ~(1 << 6); // SPE to 0 -} - -static inline void spi_enable(spi_t *obj) { - obj->spi->SPCR |= (1 << 6); // SPE to 1 -} - -static inline int spi_readable(spi_t *obj) { - return obj->spi->SPSR & (1 << 7); // SPRF -} - -static inline int spi_tend(spi_t *obj) { - return obj->spi->SPSR & (1 << 6); // TEND -} - -static inline void spi_write(spi_t *obj, int value) { - if (obj->bits == 8) { - obj->spi->SPDR.UINT8[0] = (uint8_t)value; - } else if (obj->bits == 16) { - obj->spi->SPDR.UINT16[0] = (uint16_t)value; - } else { - obj->spi->SPDR.UINT32 = (uint32_t)value; - } -} - -static inline int spi_read(spi_t *obj) { - int read_data; - - if (obj->bits == 8) { - read_data = obj->spi->SPDR.UINT8[0]; - } else if (obj->bits == 16) { - read_data = obj->spi->SPDR.UINT16[0]; - } else { - read_data = obj->spi->SPDR.UINT32; - } - - return read_data; -} - -int spi_master_write(spi_t *obj, int value) { - spi_write(obj, value); - while(!spi_tend(obj)); - return spi_read(obj); -} - -int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, - char *rx_buffer, int rx_length, char write_fill) { - int total = (tx_length > rx_length) ? tx_length : rx_length; - - for (int i = 0; i < total; i++) { - char out = (i < tx_length) ? tx_buffer[i] : write_fill; - char in = spi_master_write(obj, out); - if (i < rx_length) { - rx_buffer[i] = in; - } - } - - return total; -} - -int spi_slave_receive(spi_t *obj) { - return (spi_readable(obj) && !spi_busy(obj)) ? (1) : (0); -} - -int spi_slave_read(spi_t *obj) { - return spi_read(obj); -} - -void spi_slave_write(spi_t *obj, int value) { - spi_write(obj, value); -} - -int spi_busy(spi_t *obj) { - return 0; -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c deleted file mode 100644 index e2c15edbde..0000000000 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/us_ticker.c +++ /dev/null @@ -1,136 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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. - */ -#include -#include "us_ticker_api.h" -#include "PeripheralNames.h" -#include "ostm_iodefine.h" - -#include "RZ_A1_Init.h" -#include "VKRZA1H.h" -#include "mbed_critical.h" - -#define US_TICKER_TIMER_IRQn (OSTMI1TINT_IRQn) -#define CPG_STBCR5_BIT_MSTP50 (0x01u) /* OSTM1 */ - -#define US_TICKER_CLOCK_US_DEV (1000000) - -int us_ticker_inited = 0; -static double count_clock = 0; -static uint32_t last_read = 0; -static uint32_t wrap_arround = 0; -static uint64_t ticker_us_last64 = 0; - -void us_ticker_interrupt(void) { - us_ticker_irq_handler(); -} - -void us_ticker_init(void) { - if (us_ticker_inited) return; - us_ticker_inited = 1; - - /* set Counter Clock(us) */ - if (false == RZ_A1_IsClockMode0()) { - count_clock = ((double)CM1_RENESAS_RZ_A1_P0_CLK / (double)US_TICKER_CLOCK_US_DEV); - } else { - count_clock = ((double)CM0_RENESAS_RZ_A1_P0_CLK / (double)US_TICKER_CLOCK_US_DEV); - } - - /* Power Control for Peripherals */ - CPGSTBCR5 &= ~(CPG_STBCR5_BIT_MSTP50); /* enable OSTM1 clock */ - - // timer settings - OSTM1TT = 0x01; /* Stop the counter and clears the OSTM1TE bit. */ - OSTM1CTL = 0x02; /* Free running timer mode. Interrupt disabled when star counter */ - - OSTM1TS = 0x1; /* Start the counter and sets the OSTM0TE bit. */ - - // INTC settings - InterruptHandlerRegister(US_TICKER_TIMER_IRQn, (void (*)(uint32_t))us_ticker_interrupt); - GIC_SetPriority(US_TICKER_TIMER_IRQn, 5); - GIC_EnableIRQ(US_TICKER_TIMER_IRQn); -} - -static uint64_t ticker_read_counter64(void) { - uint32_t cnt_val; - uint64_t cnt_val64; - - if (!us_ticker_inited) - us_ticker_init(); - - /* read counter */ - cnt_val = OSTM1CNT; - if (last_read > cnt_val) { - wrap_arround++; - } - last_read = cnt_val; - cnt_val64 = ((uint64_t)wrap_arround << 32) + cnt_val; - - return cnt_val64; -} - -uint32_t us_ticker_read() { - uint64_t cnt_val64; - uint64_t us_val64; - - core_util_critical_section_enter(); - - cnt_val64 = ticker_read_counter64(); - us_val64 = (cnt_val64 / count_clock); - ticker_us_last64 = us_val64; - - core_util_critical_section_exit(); - /* clock to us */ - return (uint32_t)us_val64; -} - -void us_ticker_set_interrupt(timestamp_t timestamp) { - // set match value - uint64_t timestamp64; - uint64_t set_cmp_val64; - volatile uint32_t set_cmp_val; - uint64_t count_val_64; - - /* calc compare mach timestamp */ - timestamp64 = (ticker_us_last64 & 0xFFFFFFFF00000000) + timestamp; - if (timestamp < (ticker_us_last64 & 0x00000000FFFFFFFF)) { - /* This event is wrap arround */ - timestamp64 += 0x100000000; - } - - /* calc compare mach timestamp */ - set_cmp_val64 = timestamp64 * count_clock; - set_cmp_val = (uint32_t)(set_cmp_val64 & 0x00000000FFFFFFFF); - count_val_64 = ticker_read_counter64(); - if (set_cmp_val64 <= (count_val_64 + 500)) { - GIC_SetPendingIRQ(US_TICKER_TIMER_IRQn); - GIC_EnableIRQ(US_TICKER_TIMER_IRQn); - return; - } - OSTM1CMP = set_cmp_val; - GIC_EnableIRQ(US_TICKER_TIMER_IRQn); -} - -void us_ticker_fire_interrupt(void) { - GIC_SetPendingIRQ(US_TICKER_TIMER_IRQn); -} - -void us_ticker_disable_interrupt(void) { - GIC_DisableIRQ(US_TICKER_TIMER_IRQn); -} - -void us_ticker_clear_interrupt(void) { - GIC_ClearPendingIRQ(US_TICKER_TIMER_IRQn); -} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/analogin_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/analogin_api.c similarity index 89% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/analogin_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/analogin_api.c index 90dc113be4..c3eaac7961 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/analogin_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/analogin_api.c @@ -17,25 +17,12 @@ #include "analogin_api.h" #include "cmsis.h" -#include "pinmap.h" +#include "PeripheralPins.h" -#include "adc_iodefine.h" -#include "cpg_iodefine.h" +#include "iodefine.h" #define ANALOGIN_MEDIAN_FILTER 0 -static const PinMap PinMap_ADC[] = { - {P1_8, AN0, 1}, - {P1_9, AN1, 1}, - {P1_10, AN2, 1}, - {P1_11, AN3, 1}, - {P1_12, AN4, 1}, - {P1_13, AN5, 1}, - {P1_14, AN6, 1}, - {P1_15, AN7, 1}, - {NC, NC, 0} -}; - static volatile uint16_t *ADCDR[] = { &ADCADDRA, &ADCADDRB, diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/can_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/can_api.c similarity index 95% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/can_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/can_api.c index 11bd6dcfc2..b91e608f87 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/can_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/can_api.c @@ -18,12 +18,16 @@ #include "can_api.h" #include "RZ_A1_Init.h" #include "cmsis.h" -#include "pinmap.h" -#include "rscan0_iodefine.h" +#include "PeripheralPins.h" +#include "iodefine.h" #include "r_typedefs.h" -#include "MBRZA1H.h" +#include "mbed_drv_cfg.h" +#if defined(TARGET_RZA1H) #define CAN_NUM 5 +#else +#define CAN_NUM 2 +#endif #define CAN_SND_RCV 2 #define IRQ_NUM 8 @@ -31,40 +35,43 @@ static void can_rec_irq(uint32_t ch); static void can_trx_irq(uint32_t ch); static void can_err_irq(uint32_t ch, CanIrqType type); static void can0_rec_irq(void); -static void can1_rec_irq(void); -static void can2_rec_irq(void); -static void can3_rec_irq(void); -static void can4_rec_irq(void); static void can0_trx_irq(void); -static void can1_trx_irq(void); -static void can2_trx_irq(void); -static void can3_trx_irq(void); -static void can4_trx_irq(void); static void can0_err_warning_irq(void); -static void can1_err_warning_irq(void); -static void can2_err_warning_irq(void); -static void can3_err_warning_irq(void); -static void can4_err_warning_irq(void); static void can0_overrun_irq(void); -static void can1_overrun_irq(void); -static void can2_overrun_irq(void); -static void can3_overrun_irq(void); -static void can4_overrun_irq(void); static void can0_passive_irq(void); -static void can1_passive_irq(void); -static void can2_passive_irq(void); -static void can3_passive_irq(void); -static void can4_passive_irq(void); static void can0_arb_lost_irq(void); -static void can1_arb_lost_irq(void); -static void can2_arb_lost_irq(void); -static void can3_arb_lost_irq(void); -static void can4_arb_lost_irq(void); static void can0_bus_err_irq(void); +static void can1_rec_irq(void); +static void can1_trx_irq(void); +static void can1_err_warning_irq(void); +static void can1_overrun_irq(void); +static void can1_passive_irq(void); +static void can1_arb_lost_irq(void); static void can1_bus_err_irq(void); +#if defined(TARGET_RZA1H) +static void can2_rec_irq(void); +static void can2_trx_irq(void); +static void can2_err_warning_irq(void); +static void can2_overrun_irq(void); +static void can2_passive_irq(void); +static void can2_arb_lost_irq(void); static void can2_bus_err_irq(void); +static void can3_rec_irq(void); +static void can3_trx_irq(void); +static void can3_err_warning_irq(void); +static void can3_overrun_irq(void); +static void can3_passive_irq(void); +static void can3_arb_lost_irq(void); static void can3_bus_err_irq(void); +static void can4_rec_irq(void); +static void can4_trx_irq(void); +static void can4_err_warning_irq(void); +static void can4_overrun_irq(void); +static void can4_passive_irq(void); +static void can4_arb_lost_irq(void); static void can4_bus_err_irq(void); +#endif + static void can_reset_reg(can_t *obj); static void can_reset_recv_rule(can_t *obj); static void can_reset_buffer(can_t *obj); @@ -99,53 +106,25 @@ static can_irq_handler irq_handler; static uint32_t can_irq_id[CAN_NUM]; static int can_initialized[CAN_NUM] = {0}; -static const PinMap PinMap_CAN_RD[] = { - {P7_8 , CAN_0, 4}, - {P9_1 , CAN_0, 3}, - {P1_4 , CAN_1, 3}, - {P5_9 , CAN_1, 5}, - {P7_11 , CAN_1, 4}, - {P11_12, CAN_1, 1}, - {P4_9 , CAN_2, 6}, - {P6_4 , CAN_2, 3}, - {P7_2 , CAN_2, 5}, - {P2_12 , CAN_3, 5}, - {P4_2 , CAN_3, 4}, - {P1_5 , CAN_4, 3}, - {P2_14 , CAN_4, 5}, - {NC , NC , 0} -}; - -static const PinMap PinMap_CAN_TD[] = { - {P7_9 , CAN_0, 4}, - {P9_0 , CAN_0, 3}, - {P5_10 , CAN_1, 5}, - {P7_10 , CAN_1, 4}, - {P11_13, CAN_1, 1}, - {P4_8 , CAN_2, 6}, - {P6_5 , CAN_2, 3}, - {P7_3 , CAN_2, 5}, - {P2_13 , CAN_3, 5}, - {P4_3 , CAN_3, 4}, - {P4_11 , CAN_4, 6}, - {P8_10 , CAN_4, 5}, - {NC , NC , 0} -}; static __IO uint32_t *CTR_MATCH[] = { &RSCAN0C0CTR, &RSCAN0C1CTR, +#if defined(TARGET_RZA1H) &RSCAN0C2CTR, &RSCAN0C3CTR, &RSCAN0C4CTR, +#endif }; static __IO uint32_t *CFG_MATCH[] = { &RSCAN0C0CFG, &RSCAN0C1CFG, +#if defined(TARGET_RZA1H) &RSCAN0C2CFG, &RSCAN0C3CFG, &RSCAN0C4CFG, +#endif }; static __IO uint32_t *RFCC_MATCH[] = { @@ -162,89 +141,111 @@ static __IO uint32_t *RFCC_MATCH[] = { static __IO uint32_t *TXQCC_MATCH[] = { &RSCAN0TXQCC0, &RSCAN0TXQCC1, +#if defined(TARGET_RZA1H) &RSCAN0TXQCC2, &RSCAN0TXQCC3, &RSCAN0TXQCC4, +#endif }; static __IO uint32_t *THLCC_MATCH[] = { &RSCAN0THLCC0, &RSCAN0THLCC1, +#if defined(TARGET_RZA1H) &RSCAN0THLCC2, &RSCAN0THLCC3, &RSCAN0THLCC4, +#endif }; static __IO uint32_t *STS_MATCH[] = { &RSCAN0C0STS, &RSCAN0C1STS, +#if defined(TARGET_RZA1H) &RSCAN0C2STS, &RSCAN0C3STS, &RSCAN0C4STS, +#endif }; static __IO uint32_t *ERFL_MATCH[] = { &RSCAN0C0ERFL, &RSCAN0C1ERFL, +#if defined(TARGET_RZA1H) &RSCAN0C2ERFL, &RSCAN0C3ERFL, &RSCAN0C4ERFL, +#endif }; static __IO uint32_t *CFCC_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFCC0 , &RSCAN0CFCC1 }, { &RSCAN0CFCC3 , &RSCAN0CFCC4 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFCC6 , &RSCAN0CFCC7 }, { &RSCAN0CFCC9 , &RSCAN0CFCC10 }, - { &RSCAN0CFCC12, &RSCAN0CFCC13 } + { &RSCAN0CFCC12, &RSCAN0CFCC13 }, +#endif }; static __IO uint32_t *CFSTS_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFSTS0 , &RSCAN0CFSTS1 }, { &RSCAN0CFSTS3 , &RSCAN0CFSTS4 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFSTS6 , &RSCAN0CFSTS7 }, { &RSCAN0CFSTS9 , &RSCAN0CFSTS10 }, - { &RSCAN0CFSTS12, &RSCAN0CFSTS13 } + { &RSCAN0CFSTS12, &RSCAN0CFSTS13 }, +#endif }; static __IO uint32_t *CFPCTR_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFPCTR0 , &RSCAN0CFPCTR1 }, { &RSCAN0CFPCTR3 , &RSCAN0CFPCTR4 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFPCTR6 , &RSCAN0CFPCTR7 }, { &RSCAN0CFPCTR9 , &RSCAN0CFPCTR10 }, - { &RSCAN0CFPCTR12, &RSCAN0CFPCTR13 } + { &RSCAN0CFPCTR12, &RSCAN0CFPCTR13 }, +#endif }; static __IO uint32_t *CFID_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFID0 , &RSCAN0CFID1 }, { &RSCAN0CFID3 , &RSCAN0CFID4 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFID6 , &RSCAN0CFID7 }, { &RSCAN0CFID9 , &RSCAN0CFID10 }, - { &RSCAN0CFID12, &RSCAN0CFID13 } + { &RSCAN0CFID12, &RSCAN0CFID13 }, +#endif }; static __IO uint32_t *CFPTR_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFPTR0 , &RSCAN0CFPTR1 }, { &RSCAN0CFPTR3 , &RSCAN0CFPTR4 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFPTR6 , &RSCAN0CFPTR7 }, { &RSCAN0CFPTR9 , &RSCAN0CFPTR10 }, { &RSCAN0CFPTR12, &RSCAN0CFPTR13 } +#endif }; static __IO uint32_t *CFDF0_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFDF00 , &RSCAN0CFDF01 }, { &RSCAN0CFDF03 , &RSCAN0CFDF04 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFDF06 , &RSCAN0CFDF07 }, { &RSCAN0CFDF09 , &RSCAN0CFDF010 }, - { &RSCAN0CFDF012, &RSCAN0CFDF013 } + { &RSCAN0CFDF012, &RSCAN0CFDF013 }, +#endif }; static __IO uint32_t *CFDF1_TBL[CAN_NUM][CAN_SND_RCV] = { { &RSCAN0CFDF10 , &RSCAN0CFDF11 }, { &RSCAN0CFDF13 , &RSCAN0CFDF14 }, +#if defined(TARGET_RZA1H) { &RSCAN0CFDF16 , &RSCAN0CFDF17 }, { &RSCAN0CFDF19 , &RSCAN0CFDF110 }, - { &RSCAN0CFDF112, &RSCAN0CFDF113 } + { &RSCAN0CFDF112, &RSCAN0CFDF113 }, +#endif }; static const can_info_int_t can_int_info[CAN_NUM][IRQ_NUM] = @@ -269,6 +270,7 @@ static const can_info_int_t can_int_info[CAN_NUM][IRQ_NUM] = { INTRCAN1ERR_IRQn, can1_arb_lost_irq }, /* AlIrq */ { INTRCAN1ERR_IRQn, can1_bus_err_irq } /* BeIrq */ }, +#if defined(TARGET_RZA1H) { /* ch2 */ { INTRCAN2REC_IRQn, can2_rec_irq }, /* RxIrq */ { INTRCAN2TRX_IRQn, can2_trx_irq }, /* TxIrq */ @@ -298,7 +300,8 @@ static const can_info_int_t can_int_info[CAN_NUM][IRQ_NUM] = { INTRCAN4ERR_IRQn, can4_passive_irq }, /* EpIrq */ { INTRCAN4ERR_IRQn, can4_arb_lost_irq }, /* AlIrq */ { INTRCAN4ERR_IRQn, can4_bus_err_irq } /* BeIrq */ - } + }, +#endif }; static __IO uint32_t *dmy_gaflid = &RSCAN0GAFLID0; @@ -404,141 +407,143 @@ static void can0_rec_irq(void) { can_rec_irq(CAN_0); } -static void can1_rec_irq(void) { - can_rec_irq(CAN_1); -} - -static void can2_rec_irq(void) { - can_rec_irq(CAN_2); -} - -static void can3_rec_irq(void) { - can_rec_irq(CAN_3); -} - -static void can4_rec_irq(void) { - can_rec_irq(CAN_4); -} - static void can0_trx_irq(void) { can_trx_irq(CAN_0); } -static void can1_trx_irq(void) { - can_trx_irq(CAN_1); -} - -static void can2_trx_irq(void) { - can_trx_irq(CAN_2); -} - -static void can3_trx_irq(void) { - can_trx_irq(CAN_3); -} - -static void can4_trx_irq(void) { - can_trx_irq(CAN_4); -} - static void can0_err_warning_irq(void) { can_err_irq(CAN_0, IRQ_ERROR); } -static void can1_err_warning_irq(void) { - can_err_irq(CAN_1, IRQ_ERROR); -} - -static void can2_err_warning_irq(void) { - can_err_irq(CAN_2, IRQ_ERROR); -} - -static void can3_err_warning_irq(void) { - can_err_irq(CAN_3, IRQ_ERROR); -} - -static void can4_err_warning_irq(void) { - can_err_irq(CAN_4, IRQ_ERROR); -} - static void can0_overrun_irq(void) { can_err_irq(CAN_0, IRQ_OVERRUN); } -static void can1_overrun_irq(void) { - can_err_irq(CAN_1, IRQ_OVERRUN); -} - -static void can2_overrun_irq(void) { - can_err_irq(CAN_2, IRQ_OVERRUN); -} - -static void can3_overrun_irq(void) { - can_err_irq(CAN_3, IRQ_OVERRUN); -} - -static void can4_overrun_irq(void) { - can_err_irq(CAN_4, IRQ_OVERRUN); -} - static void can0_passive_irq(void) { can_err_irq(CAN_0, IRQ_PASSIVE); } -static void can1_passive_irq(void) { - can_err_irq(CAN_1, IRQ_PASSIVE); -} - -static void can2_passive_irq(void) { - can_err_irq(CAN_2, IRQ_PASSIVE); -} - -static void can3_passive_irq(void) { - can_err_irq(CAN_3, IRQ_PASSIVE); -} - -static void can4_passive_irq(void) { - can_err_irq(CAN_4, IRQ_PASSIVE); -} - static void can0_arb_lost_irq(void) { can_err_irq(CAN_0, IRQ_ARB); } -static void can1_arb_lost_irq(void) { - can_err_irq(CAN_1, IRQ_ARB); -} - -static void can2_arb_lost_irq(void) { - can_err_irq(CAN_2, IRQ_ARB); -} - -static void can3_arb_lost_irq(void) { - can_err_irq(CAN_3, IRQ_ARB); -} - -static void can4_arb_lost_irq(void) { - can_err_irq(CAN_4, IRQ_ARB); -} - static void can0_bus_err_irq(void) { can_err_irq(CAN_0, IRQ_BUS); } +static void can1_rec_irq(void) { + can_rec_irq(CAN_1); +} + +static void can1_trx_irq(void) { + can_trx_irq(CAN_1); +} + +static void can1_err_warning_irq(void) { + can_err_irq(CAN_1, IRQ_ERROR); +} + +static void can1_overrun_irq(void) { + can_err_irq(CAN_1, IRQ_OVERRUN); +} + +static void can1_passive_irq(void) { + can_err_irq(CAN_1, IRQ_PASSIVE); +} + +static void can1_arb_lost_irq(void) { + can_err_irq(CAN_1, IRQ_ARB); +} + static void can1_bus_err_irq(void) { can_err_irq(CAN_1, IRQ_BUS); } +#if defined(TARGET_RZA1H) +static void can2_rec_irq(void) { + can_rec_irq(CAN_2); +} + +static void can2_trx_irq(void) { + can_trx_irq(CAN_2); +} + +static void can2_err_warning_irq(void) { + can_err_irq(CAN_2, IRQ_ERROR); +} + +static void can2_overrun_irq(void) { + can_err_irq(CAN_2, IRQ_OVERRUN); +} + +static void can2_passive_irq(void) { + can_err_irq(CAN_2, IRQ_PASSIVE); +} + +static void can2_arb_lost_irq(void) { + can_err_irq(CAN_2, IRQ_ARB); +} + static void can2_bus_err_irq(void) { can_err_irq(CAN_2, IRQ_BUS); } +static void can3_rec_irq(void) { + can_rec_irq(CAN_3); +} + +static void can3_trx_irq(void) { + can_trx_irq(CAN_3); +} + +static void can3_err_warning_irq(void) { + can_err_irq(CAN_3, IRQ_ERROR); +} + +static void can3_overrun_irq(void) { + can_err_irq(CAN_3, IRQ_OVERRUN); +} + +static void can3_passive_irq(void) { + can_err_irq(CAN_3, IRQ_PASSIVE); +} + +static void can3_arb_lost_irq(void) { + can_err_irq(CAN_3, IRQ_ARB); +} + static void can3_bus_err_irq(void) { can_err_irq(CAN_3, IRQ_BUS); } +static void can4_rec_irq(void) { + can_rec_irq(CAN_4); +} + +static void can4_trx_irq(void) { + can_trx_irq(CAN_4); +} + +static void can4_err_warning_irq(void) { + can_err_irq(CAN_4, IRQ_ERROR); +} + +static void can4_overrun_irq(void) { + can_err_irq(CAN_4, IRQ_OVERRUN); +} + +static void can4_passive_irq(void) { + can_err_irq(CAN_4, IRQ_PASSIVE); +} + +static void can4_arb_lost_irq(void) { + can_err_irq(CAN_4, IRQ_ARB); +} + static void can4_bus_err_irq(void) { can_err_irq(CAN_4, IRQ_BUS); } +#endif void can_init_freq(can_t *obj, PinName rd, PinName td, int hz) { __IO uint32_t *dmy_ctr; @@ -763,9 +768,9 @@ int can_mode(can_t *obj, CanMode mode) { can_set_channel_mode(obj->ch, CH_COMM); break; case MODE_TEST_GLOBAL: - /* set the channel between the communication test on channel 1 and channel 2 */ + /* set the channel between the communication test on CAN_TEST_GLOBAL_CH and CAN_TEST_GLOBAL_CH+1 */ /* set Channel Hold mode */ - for (tmp_obj->ch = CAN_1; tmp_obj->ch <= CAN_2; tmp_obj->ch++) { + for (tmp_obj->ch = CAN_TEST_GLOBAL_CH; tmp_obj->ch <= (CAN_TEST_GLOBAL_CH + 1); tmp_obj->ch++) { dmy_sts = STS_MATCH[tmp_obj->ch]; if ((*dmy_sts & 0x04) == 0x04) { /* Channel Stop mode */ @@ -777,11 +782,11 @@ int can_mode(can_t *obj, CanMode mode) { can_set_channel_mode(tmp_obj->ch, CH_HOLD); } can_set_global_mode(GL_TEST); - /* enable communication test between channel1 and channel2 */ + /* enable communication test between CAN_TEST_GLOBAL_CH and CAN_TEST_GLOBAL_CH+1 */ RSCAN0GTSTCFG = 0x06; RSCAN0GTSTCTR = 0x01; /* send and receive setting of channel1 and channel2 */ - for (tmp_obj->ch = CAN_1; tmp_obj->ch <= CAN_2; tmp_obj->ch++) { + for (tmp_obj->ch = CAN_TEST_GLOBAL_CH; tmp_obj->ch <= (CAN_TEST_GLOBAL_CH + 1); tmp_obj->ch++) { can_reset_buffer(tmp_obj); /* set global interrrupt */ /* THLEIE, MEIE and DEIE interrupts are disable */ @@ -888,7 +893,9 @@ static void can_reset_reg(can_t *obj) { static void can_reset_recv_rule(can_t *obj) { /* number of receive rules of each chanel = 64 */ RSCAN0GAFLCFG0 = 0x40404040; +#if defined(TARGET_RZA1H) RSCAN0GAFLCFG1 = 0x40000000; +#endif /* enable receive rule table writing */ RSCAN0GAFLECTR = 0x00000100; /* set the page number of receive rule table(ex: id ch = 1, page number = 4) */ @@ -939,8 +946,10 @@ static void can_reset_buffer(can_t *obj) { *dmy_cfcc |= 0x02; /* TMIEp interrupt is disable */ RSCAN0TMIEC0 = 0x00000000; +#if defined(TARGET_RZA1H) RSCAN0TMIEC1 = 0x00000000; RSCAN0TMIEC2 = 0x00000000; +#endif } static void can_reconfigure_channel(void) { @@ -1003,9 +1012,9 @@ static void can_set_frequency(can_t *obj, int f) { static void can_set_global_mode(int mode) { /* set Global mode */ - RSCAN0GCTR = ((RSCAN0GCTR & 0xFFFFFFFC) | mode); + RSCAN0GCTR = ((RSCAN0GCTR & 0xFFFFFFFC) | (uint32_t)mode); /* Wait to cahnge into Global XXXX mode */ - while ((RSCAN0GSTS & 0x07) != mode) { + while ((RSCAN0GSTS & 0x07) != (uint32_t)mode) { __NOP(); } } @@ -1016,10 +1025,10 @@ static void can_set_channel_mode(uint32_t ch, int mode) { /* set Channel mode */ dmy_ctr = CTR_MATCH[ch]; - *dmy_ctr = ((*dmy_ctr & 0xFFFFFFFC) | mode); + *dmy_ctr = ((*dmy_ctr & 0xFFFFFFFC) | (uint32_t)mode); /* Wait to cahnge into Channel XXXX mode */ dmy_sts = STS_MATCH[ch]; - while ((*dmy_sts & 0x07) != mode) { + while ((*dmy_sts & 0x07) != (uint32_t)mode) { __NOP(); } } diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/ethernet_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/ethernet_api.c similarity index 95% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/ethernet_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/ethernet_api.c index 706e75cc6f..ae3317b20d 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/ethernet_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/ethernet_api.c @@ -19,9 +19,11 @@ #include "mbed_interface.h" #include "mbed_toolchain.h" #include "mbed_error.h" -#include "ether_iodefine.h" +#include "iodefine.h" #include "ethernetext_api.h" +#if DEVICE_ETHERNET + /* Descriptor info */ #define NUM_OF_TX_DESCRIPTOR (16) #define NUM_OF_RX_DESCRIPTOR (16) @@ -160,6 +162,7 @@ int ethernetext_init(ethernet_cfg_t *p_ethcfg) { CPGSTBCR7 &= ~(CPG_STBCR7_BIT_MSTP74); /* enable ETHER clock */ +#if defined(TARGET_RZ_A1H) /* P4_2(PHY Reset) */ GPIOP4 &= ~0x0004; /* Outputs low level */ GPIOPMC4 &= ~0x0004; /* Port mode */ @@ -201,6 +204,41 @@ int ethernetext_init(ethernet_cfg_t *p_ethcfg) { wait_100us(250); /* 25msec */ GPIOP4 |= 0x0004; /* P4_2 Outputs high level */ wait_100us(100); /* 10msec */ +#elif defined(TARGET_VK_RZ_A1H) + /* -->4F<-- P1_14(ET_COL) */ + GPIOPMC1 |= 0x4000; + GPIOPFCAE1 &= ~0x4000; + GPIOPFCE1 |= 0x4000; + GPIOPFC1 |= 0x4000; + GPIOPIPC1 |= 0x4000; + + /* -->2F<-- P2_0(ET_TXCLK), P2_1(ET_TXER), P2_2(ET_TXEN), P2_3(ET_CRS), P2_4(ET_TXD0), + P2_5(ET_TXD1), P2_6(ET_TXD2), P2_7(ET_TXD3), P2_8(ET_RXD0), P2_9(ET_RXD1), P2_10(ET_RXD2) P2_11(ET_RXD3) */ + GPIOPMC2 |= 0x0FFF; + GPIOPFCAE2 &= ~0x0FFF; + GPIOPFCE2 &= ~0x0FFF; + GPIOPFC2 |= 0x0FFF; + GPIOPIPC2 |= 0x0FFF; + + /* -->3F<-- P3_3(ET_MDIO), P3_4(ET_RXCLK), P3_5(ET_RXER), P3_6(ET_RXDV) */ + GPIOPMC3 |= 0x0078; + GPIOPFCAE3 &= ~0x0078; + GPIOPFCE3 &= ~0x0078; + GPIOPFC3 |= 0x0078; + GPIOPIPC3 |= 0x0078; + + /* -->3F<-- P7_0(ET_MDC) */ + GPIOPMC7 |= 0x0001; + GPIOPFCAE7 &= ~0x0001; + GPIOPFCE7 |= 0x0001; + GPIOPFC7 &= ~0x0001; + GPIOPIPC7 |= 0x0001; + + /* Resets the E-MAC,E-DMAC */ + lan_reg_reset(); +#else +#error "There is no initialization processing." +#endif /* Resets the PHY-LSI */ phy_reg_write(BASIC_MODE_CONTROL_REG, 0x8000); @@ -708,3 +746,4 @@ static void wait_100us(int32_t wait_cnt) { /* Do Nothing */ } } +#endif /* DEVICE_ETHERNET */ diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_api.c similarity index 96% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_api.c index a0540aa825..ea1351c769 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/gpio_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_api.c @@ -16,6 +16,7 @@ #include "gpio_api.h" #include "pinmap.h" #include "gpio_addrdefine.h" +#include "mbed_drv_cfg.h" uint32_t gpio_set(PinName pin) { @@ -31,7 +32,7 @@ void gpio_init(gpio_t *obj, PinName pin) { obj->mask = gpio_set(pin); group = PINGROUP(pin); - if (group > 9) return; + if (group > GPIO_GROUP_MAX) return; obj->reg_set = (volatile uint32_t *) PSR(group); obj->reg_in = (volatile uint32_t *) PPR(group); diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_irq_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_irq_api.c similarity index 77% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_irq_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_irq_api.c index e63ab2594e..5c0950f556 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/gpio_irq_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/gpio_irq_api.c @@ -16,8 +16,8 @@ #include #include "gpio_irq_api.h" -#include "intc_iodefine.h" -#include "pinmap.h" +#include "iodefine.h" +#include "PeripheralPins.h" #include "cmsis.h" #include "gpio_addrdefine.h" @@ -37,14 +37,6 @@ static gpio_irq_handler irq_handler; static const int nIRQn_h = 32; extern PinName gpio_multi_guard; -enum { - IRQ0,IRQ1, - IRQ2,IRQ3, - IRQ4,IRQ5, - IRQ6,IRQ7, - -} IRQNo; - static const IRQHandler irq_tbl[CHANNEL_NUM] = { &gpio_irq0, &gpio_irq1, @@ -56,34 +48,6 @@ static const IRQHandler irq_tbl[CHANNEL_NUM] = { &gpio_irq7, }; -static const PinMap PinMap_IRQ[] = { - {P1_0, IRQ0, 4}, {P1_1, IRQ1, 4}, {P1_2, IRQ2, 4}, - {P1_3, IRQ3, 4}, {P1_4, IRQ4, 4}, {P1_5, IRQ5, 4}, - {P1_6, IRQ6, 4}, {P1_7, IRQ7, 4}, {P1_8, IRQ2, 3}, - {P1_9, IRQ3, 3}, {P1_10, IRQ4, 3}, {P1_11, IRQ5, 3}, // 11 - {P2_0, IRQ5, 6}, {P2_12, IRQ6, 6}, {P2_13, IRQ7, 8}, - {P2_14, IRQ0, 8}, {P2_15, IRQ1, 8}, // 16 - {P3_0, IRQ2, 3}, {P3_1, IRQ6, 3}, {P3_3, IRQ4, 3}, - {P3_9, IRQ6, 8}, // 20 - {P4_8, IRQ0, 8}, {P4_9, IRQ1, 8}, {P4_10, IRQ2, 8}, - {P4_11, IRQ3, 8}, {P4_12, IRQ4, 8}, {P4_13, IRQ5, 8}, - {P4_14, IRQ6, 8}, {P4_15, IRQ7, 8}, // 28 - {P5_6, IRQ6, 6}, {P5_8, IRQ0, 2}, {P5_9, IRQ2, 4}, // 31 - {P6_0, IRQ5, 6}, {P6_1, IRQ4, 4}, {P6_2, IRQ7, 4}, - {P6_3, IRQ2, 4}, {P6_4, IRQ3, 4}, {P6_8, IRQ0, 8}, - {P6_9, IRQ1, 8}, {P6_10, IRQ2, 8}, {P6_11, IRQ3, 8}, - {P6_12, IRQ4, 8}, {P6_13, IRQ5, 8}, {P6_14, IRQ6, 8}, - {P6_15, IRQ7, 8}, // 44 - {P7_8, IRQ1, 8}, {P7_9, IRQ0, 8}, {P7_10, IRQ2, 8}, - {P7_11, IRQ3, 8}, {P7_12, IRQ4, 8}, {P7_13, IRQ5, 8}, - {P7_14, IRQ6, 8}, // 51 - {P8_2, IRQ0, 5}, {P8_3, IRQ1, 6}, {P8_7, IRQ5, 4}, - {P9_1, IRQ0, 4}, // 55 - {P11_12,IRQ3, 3}, {P11_15,IRQ1, 3}, // 57 - - {NC, NC, 0} -}; - static void handle_interrupt_in(int irq_num) { uint16_t irqs; uint16_t edge_req; diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/i2c_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/i2c_api.c similarity index 98% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/i2c_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/i2c_api.c index be70f1eb80..227ac68f4e 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/i2c_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/i2c_api.c @@ -17,12 +17,11 @@ #include "dma_api.h" #include "i2c_api.h" #include "cmsis.h" -#include "pinmap.h" +#include "PeripheralPins.h" #include "r_typedefs.h" -#include "riic_iodefine.h" +#include "iodefine.h" #include "RZ_A1_Init.h" -#include "MBRZA1H.h" volatile struct st_riic *RIIC[] = RIIC_ADDRESS_LIST; @@ -61,20 +60,6 @@ volatile struct st_riic *RIIC[] = RIIC_ADDRESS_LIST; #define WAIT_TIMEOUT (3600000) /* Loop counter : Time-out is about 1s. By 3600000 loops, measured value is 969ms. */ -static const PinMap PinMap_I2C_SDA[] = { - {P1_1 , I2C_0, 1}, - {P1_3 , I2C_1, 1}, - {P1_7 , I2C_3, 1}, - {NC , NC , 0} -}; - -static const PinMap PinMap_I2C_SCL[] = { - {P1_0 , I2C_0, 1}, - {P1_2 , I2C_1, 1}, - {P1_6 , I2C_3, 1}, - {NC , NC, 0} -}; - static inline int i2c_status(i2c_t *obj) { return REG(SR2.UINT8[0]); } @@ -220,6 +205,7 @@ static inline void i2c_power_enable(i2c_t *obj) { break; } dummy = CPGSTBCR9; + (void)dummy; } void i2c_init(i2c_t *obj, PinName sda, PinName scl) { @@ -414,7 +400,6 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { int count = 0; int status; int value; - volatile uint32_t work_reg = 0; i2c_set_MR3_ACK(obj); /* There is a STOP condition for last processing */ diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/objects.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/objects.h similarity index 98% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/objects.h rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/objects.h index e6b0455d88..be1a9e5487 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/objects.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/objects.h @@ -22,7 +22,6 @@ #include "PeripheralNames.h" #include "PinNames.h" #include "gpio_object.h" -#include "rspi_iodefine.h" #ifdef __cplusplus extern "C" { @@ -41,6 +40,7 @@ struct i2c_s { struct spi_s { struct st_rspi *spi; uint32_t bits; + int index; }; struct gpio_irq_s { diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/pinmap.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/pinmap.c new file mode 100644 index 0000000000..aa096aa1a1 --- /dev/null +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/pinmap.c @@ -0,0 +1,74 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * 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. + */ +#include "PeripheralPins.h" +#include "mbed_error.h" +#include "gpio_addrdefine.h" + +PinName gpio_multi_guard = (PinName)NC; /* If set pin name here, setting of the "pin" is just one time */ + +void pin_function(PinName pin, int function) { + if (pin == (PinName)NC) return; + + int n = pin >> 4; + int bitmask = 1<<(pin & 0xf); + const PinFunc * Pipc_0_func = PIPC_0_tbl; + int pipc_data = 1; + + if (gpio_multi_guard != pin) { + if (function == 0) { + // means GPIO mode + *PMC(n) &= ~bitmask; + } else { + // alt-function mode + --function; + + if (function & (1 << 2)) { *PFCAE(n) |= bitmask;}else { *PFCAE(n) &= ~bitmask;} + if (function & (1 << 1)) { *PFCE(n) |= bitmask;}else { *PFCE(n) &= ~bitmask;} + if (function & (1 << 0)) { *PFC(n) |= bitmask;}else { *PFC(n) &= ~bitmask;} + + while (Pipc_0_func->pin != NC) { + if ((Pipc_0_func->pin == pin) && ((Pipc_0_func->function - 1) == function)) { + pipc_data = 0; + if (Pipc_0_func->pm == 0) { + *PMSR(n) = (bitmask << 16) | 0; + } else if (Pipc_0_func->pm == 1) { + *PMSR(n) = (bitmask << 16) | bitmask; + } else { + // Do Nothing + } + break; + } + Pipc_0_func++; + } + if (pipc_data == 1) { + *PIPC(n) |= bitmask; + } else { + *PIPC(n) &= ~bitmask; + } + + if (P1_0 <= pin && pin <= P1_7 && function == 0) { + *PBDC(n) |= bitmask; + } + *PMC(n) |= bitmask; + } + } else { + gpio_multi_guard = (PinName)NC; + } +} + +void pin_mode(PinName pin, PinMode mode) { +// if (pin == (PinName)NC) { return; } +} diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/port_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/port_api.c similarity index 86% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/port_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/port_api.c index a330077018..91cc3056cb 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/port_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/port_api.c @@ -23,20 +23,20 @@ PinName port_pin(PortName port, int pin_n) { } void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { + uint32_t i; + obj->port = port; obj->mask = mask; - obj->reg_dir = (volatile uint32_t *)PMSR(port); obj->reg_out = (volatile uint32_t *)PORT(port); obj->reg_in = (volatile uint32_t *)PPR(port); obj->reg_buf = (volatile uint32_t *)PIBC(port); // Do not use masking, because it prevents the use of the unmasked pins // port_reg->FIOMASK = ~mask; - - uint32_t i; + // The function is set per pin: reuse gpio logic - for (i=0; i<32; i++) { - if (obj->mask & (1<mask & (1 << i)) { gpio_set(port_pin(obj->port, i)); } } @@ -47,8 +47,8 @@ void port_init(port_t *obj, PortName port, int mask, PinDirection dir) { void port_mode(port_t *obj, PinMode mode) { uint32_t i; // The mode is set per pin: reuse pinmap logic - for (i=0; i<32; i++) { - if (obj->mask & (1<mask & (1 << i)) { pin_mode(port_pin(obj->port, i), mode); } } @@ -57,11 +57,14 @@ void port_mode(port_t *obj, PinMode mode) { void port_dir(port_t *obj, PinDirection dir) { switch (dir) { case PIN_INPUT : *obj->reg_dir = (obj->mask << 16) | obj->mask; - *obj->reg_buf |= obj->mask; - break; + *obj->reg_buf |= obj->mask; + break; case PIN_OUTPUT: *obj->reg_dir = (obj->mask << 16) | ~obj->mask; - *obj->reg_buf &= ~obj->mask; - break; + *obj->reg_buf &= ~obj->mask; + break; + default: + // do nothing + break; } } diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pwmout_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/pwmout_api.c similarity index 71% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pwmout_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/pwmout_api.c index 469fe6fed4..0bed1c4aa3 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/pwmout_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/pwmout_api.c @@ -16,139 +16,120 @@ #include "mbed_assert.h" #include "pwmout_api.h" #include "cmsis.h" -#include "pinmap.h" +#include "PeripheralPins.h" #include "RZ_A1_Init.h" -#include "cpg_iodefine.h" -#include "pwm_iodefine.h" +#include "iodefine.h" #include "gpio_addrdefine.h" +#include "mbed_drv_cfg.h" -#define MTU2_PWM_NUM 22 -#define MTU2_PWM_SIGNAL 2 #define MTU2_PWM_OFFSET 0x20 -// PORT ID, PWM ID, Pin function -static const PinMap PinMap_PWM[] = { - {P2_1 , MTU2_PWM0_PIN , 6}, - {P2_11 , MTU2_PWM1_PIN , 5}, - {P3_8 , MTU2_PWM2_PIN , 6}, - {P3_10 , MTU2_PWM3_PIN , 6}, - {P4_0 , MTU2_PWM4_PIN , 2}, - {P4_4 , MTU2_PWM5_PIN , 3}, - {P4_6 , MTU2_PWM6_PIN , 3}, - {P5_0 , MTU2_PWM7_PIN , 6}, - {P5_3 , MTU2_PWM8_PIN , 6}, - {P5_5 , MTU2_PWM9_PIN , 6}, - {P7_2 , MTU2_PWM10_PIN , 7}, - {P7_4 , MTU2_PWM11_PIN , 7}, - {P7_6 , MTU2_PWM12_PIN , 7}, - {P7_10 , MTU2_PWM13_PIN , 7}, - {P7_12 , MTU2_PWM14_PIN , 7}, - {P7_14 , MTU2_PWM15_PIN , 7}, - {P8_8 , MTU2_PWM16_PIN , 5}, - {P8_10 , MTU2_PWM17_PIN , 4}, - {P8_12 , MTU2_PWM18_PIN , 4}, - {P8_14 , MTU2_PWM19_PIN , 4}, - {P11_0 , MTU2_PWM20_PIN , 2}, - {P11_2 , MTU2_PWM21_PIN , 2}, - {P4_4 , PWM0_PIN , 4}, - {P3_2 , PWM1_PIN , 7}, - {P4_6 , PWM2_PIN , 4}, - {P4_7 , PWM3_PIN , 4}, - {P8_14 , PWM4_PIN , 6}, - {P8_15 , PWM5_PIN , 6}, - {P8_13 , PWM6_PIN , 6}, - {P8_11 , PWM7_PIN , 6}, - {P8_8 , PWM8_PIN , 6}, - {P10_0 , PWM9_PIN , 3}, - {P8_12 , PWM10_PIN , 6}, - {P8_9 , PWM11_PIN , 6}, - {P8_10 , PWM12_PIN , 6}, - {P4_5 , PWM13_PIN , 4}, - {NC , NC , 0} -}; +#ifdef FUNC_MOTOR_CTL_PWM +typedef enum { + PWM1A = 0, + PWM1B, + PWM1C, + PWM1D, + PWM1E, + PWM1F, + PWM1G, + PWM1H, + PWM2A = 0x10, + PWM2B, + PWM2C, + PWM2D, + PWM2E, + PWM2F, + PWM2G, + PWM2H, +} PWMType; static const PWMType PORT[] = { - PWM2E, // PWM0_PIN - PWM2C, // PWM1_PIN - PWM2G, // PWM2_PIN - PWM2H, // PWM3_PIN - PWM1G, // PWM4_PIN - PWM1H, // PWM5_PIN - PWM1F, // PWM6_PIN - PWM1D, // PWM7_PIN - PWM1A, // PWM8_PIN - PWM2A, // PWM9_PIN - PWM1E, // PWM10_PIN - PWM1B, // PWM11_PIN - PWM1C, // PWM12_PIN - PWM2F, // PWM13_PIN -}; - -static const MTU2_PWMType MTU2_PORT[] = { - TIOC2A, // MTU2_PWM0_PIN - TIOC1A, // MTU2_PWM1_PIN - TIOC4A, // MTU2_PWM2_PIN - TIOC4C, // MTU2_PWM3_PIN - TIOC0A, // MTU2_PWM4_PIN - TIOC4A, // MTU2_PWM5_PIN - TIOC4C, // MTU2_PWM6_PIN - TIOC0A, // MTU2_PWM7_PIN - TIOC3C, // MTU2_PWM8_PIN - TIOC0C, // MTU2_PWM9_PIN - TIOC0C, // MTU2_PWM10_PIN - TIOC1A, // MTU2_PWM11_PIN - TIOC2A, // MTU2_PWM12_PIN - TIOC3C, // MTU2_PWM13_PIN - TIOC4A, // MTU2_PWM14_PIN - TIOC4C, // MTU2_PWM15_PIN - TIOC1A, // MTU2_PWM16_PIN - TIOC3A, // MTU2_PWM17_PIN - TIOC3C, // MTU2_PWM18_PIN - TIOC2A, // MTU2_PWM19_PIN - TIOC4A, // MTU2_PWM20_PIN - TIOC4C, // MTU2_PWM21_PIN + PWM1A, // PWM_PWM1A + PWM1B, // PWM_PWM1B + PWM1C, // PWM_PWM1C + PWM1D, // PWM_PWM1D + PWM1E, // PWM_PWM1E + PWM1F, // PWM_PWM1F + PWM1G, // PWM_PWM1G + PWM1H, // PWM_PWM1H + PWM2A, // PWM_PWM2A + PWM2B, // PWM_PWM2B + PWM2C, // PWM_PWM2C + PWM2D, // PWM_PWM2D + PWM2E, // PWM_PWM2E + PWM2F, // PWM_PWM2F + PWM2G, // PWM_PWM2G + PWM2H, // PWM_PWM2H }; static __IO uint16_t *PWM_MATCH[] = { - &PWMPWBFR_2E, // PWM0_PIN - &PWMPWBFR_2C, // PWM1_PIN - &PWMPWBFR_2G, // PWM2_PIN - &PWMPWBFR_2G, // PWM3_PIN - &PWMPWBFR_1G, // PWM4_PIN - &PWMPWBFR_1G, // PWM5_PIN - &PWMPWBFR_1E, // PWM6_PIN - &PWMPWBFR_1C, // PWM7_PIN - &PWMPWBFR_1A, // PWM8_PIN - &PWMPWBFR_2A, // PWM9_PIN - &PWMPWBFR_1E, // PWM10_PIN - &PWMPWBFR_1A, // PWM11_PIN - &PWMPWBFR_1C, // PWM12_PIN - &PWMPWBFR_2E, // PWM13_PIN + &PWMPWBFR_1A, // PWM_PWM1A + &PWMPWBFR_1A, // PWM_PWM1B + &PWMPWBFR_1C, // PWM_PWM1C + &PWMPWBFR_1C, // PWM_PWM1D + &PWMPWBFR_1E, // PWM_PWM1E + &PWMPWBFR_1E, // PWM_PWM1F + &PWMPWBFR_1G, // PWM_PWM1G + &PWMPWBFR_1G, // PWM_PWM1H + &PWMPWBFR_2A, // PWM_PWM2A + &PWMPWBFR_2A, // PWM_PWM2B + &PWMPWBFR_2C, // PWM_PWM2C + &PWMPWBFR_2C, // PWM_PWM2D + &PWMPWBFR_2E, // PWM_PWM2E + &PWMPWBFR_2E, // PWM_PWM2F + &PWMPWBFR_2G, // PWM_PWM2G + &PWMPWBFR_2G, // PWM_PWM2H }; -static __IO uint16_t *MTU2_PWM_MATCH[MTU2_PWM_NUM][MTU2_PWM_SIGNAL] = { - { &MTU2TGRA_2, &MTU2TGRB_2 }, // MTU2_PWM0_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 }, // MTU2_PWM1_PIN - { &MTU2TGRA_4, &MTU2TGRB_4 }, // MTU2_PWM2_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 }, // MTU2_PWM3_PIN - { &MTU2TGRA_0, &MTU2TGRB_0 }, // MTU2_PWM4_PIN - { &MTU2TGRA_4, &MTU2TGRB_4 }, // MTU2_PWM5_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 }, // MTU2_PWM6_PIN - { &MTU2TGRA_0, &MTU2TGRB_0 }, // MTU2_PWM7_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 }, // MTU2_PWM8_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 }, // MTU2_PWM9_PIN - { &MTU2TGRC_0, &MTU2TGRD_0 }, // MTU2_PWM10_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 }, // MTU2_PWM11_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 }, // MTU2_PWM12_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 }, // MTU2_PWM13_PIN - { &MTU2TGRA_4, &MTU2TGRB_4 }, // MTU2_PWM14_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 }, // MTU2_PWM15_PIN - { &MTU2TGRA_1, &MTU2TGRB_1 }, // MTU2_PWM16_PIN - { &MTU2TGRA_3, &MTU2TGRB_3 }, // MTU2_PWM17_PIN - { &MTU2TGRC_3, &MTU2TGRD_3 }, // MTU2_PWM18_PIN - { &MTU2TGRA_2, &MTU2TGRB_2 }, // MTU2_PWM19_PIN - { &MTU2TGRA_4, &MTU2TGRB_4 }, // MTU2_PWM20_PIN - { &MTU2TGRC_4, &MTU2TGRD_4 } // MTU2_PWM21_PIN +static uint16_t init_period_ch1 = 0; +static uint16_t init_period_ch2 = 0; +static int32_t period_ch1 = 1; +static int32_t period_ch2 = 1; +#endif + +#ifdef FUMC_MTU2_PWM +#define MTU2_PWM_SIGNAL 2 + +typedef enum { + TIOC0A = 0, + TIOC0B, + TIOC0C, + TIOC0D, + TIOC1A = 0x10, + TIOC1B, + TIOC2A = 0x20, + TIOC2B, + TIOC3A = 0x30, + TIOC3B, + TIOC3C, + TIOC3D, + TIOC4A = 0x40, + TIOC4B, + TIOC4C, + TIOC4D, +} MTU2_PWMType; + +static const MTU2_PWMType MTU2_PORT[] = { + TIOC0A, // PWM_TIOC0A + TIOC0C, // PWM_TIOC0C + TIOC1A, // PWM_TIOC1A + TIOC2A, // PWM_TIOC2A + TIOC3A, // PWM_TIOC3A + TIOC3C, // PWM_TIOC3C + TIOC4A, // PWM_TIOC4A + TIOC4C, // PWM_TIOC4C +}; + +static __IO uint16_t *MTU2_PWM_MATCH[][MTU2_PWM_SIGNAL] = { + { &MTU2TGRA_0, &MTU2TGRB_0 }, // PWM_TIOC0A + { &MTU2TGRC_0, &MTU2TGRD_0 }, // PWM_TIOC0C + { &MTU2TGRA_1, &MTU2TGRB_1 }, // PWM_TIOC1A + { &MTU2TGRA_2, &MTU2TGRB_2 }, // PWM_TIOC2A + { &MTU2TGRA_3, &MTU2TGRB_3 }, // PWM_TIOC3A + { &MTU2TGRC_3, &MTU2TGRD_3 }, // PWM_TIOC3C + { &MTU2TGRA_4, &MTU2TGRB_4 }, // PWM_TIOC4A + { &MTU2TGRC_4, &MTU2TGRD_4 }, // PWM_TIOC4C }; static __IO uint8_t *TCR_MATCH[] = { @@ -212,12 +193,9 @@ typedef enum { MTU2_PERIOD } MTU2Signal; -static uint16_t init_period_ch1 = 0; -static uint16_t init_period_ch2 = 0; static uint16_t init_mtu2_period_ch[5] = {0}; -static int32_t period_ch1 = 1; -static int32_t period_ch2 = 1; static int32_t mtu2_period_ch[5] = {1, 1, 1, 1, 1}; +#endif void pwmout_init(pwmout_t* obj, PinName pin) { // determine the channel @@ -225,6 +203,7 @@ void pwmout_init(pwmout_t* obj, PinName pin) { MBED_ASSERT(pwm != (PWMName)NC); if (pwm >= MTU2_PWM_OFFSET) { +#ifdef FUMC_MTU2_PWM /* PWM by MTU2 */ int tmp_pwm; @@ -260,7 +239,9 @@ void pwmout_init(pwmout_t* obj, PinName pin) { pwmout_period_us(obj, 1000); init_mtu2_period_ch[obj->ch] = 1; } +#endif } else { +#ifdef FUNC_MOTOR_CTL_PWM /* PWM */ // power on CPGSTBCR3 &= ~(CPG_STBCR3_BIT_MSTP30); @@ -287,6 +268,7 @@ void pwmout_init(pwmout_t* obj, PinName pin) { pwmout_period_us(obj, 491); init_period_ch1 = 1; } +#endif } } @@ -296,12 +278,12 @@ void pwmout_free(pwmout_t* obj) { void pwmout_write(pwmout_t* obj, float value) { uint32_t wk_cycle; - uint16_t v; if (obj->pwm >= MTU2_PWM_OFFSET) { +#ifdef FUMC_MTU2_PWM /* PWM by MTU2 */ int tmp_pwm; - + if (value < 0.0f) { value = 0.0f; } else if (value > 1.0f) { @@ -312,8 +294,16 @@ void pwmout_write(pwmout_t* obj, float value) { tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); wk_cycle = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] & 0xffff; // set channel match to percentage - *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] = (uint16_t)((float)wk_cycle * value); + if (value == 1.0f) { + *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] = (uint16_t)(wk_cycle - 1); + } else { + *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] = (uint16_t)((float)wk_cycle * value); + } +#endif } else { +#ifdef FUNC_MOTOR_CTL_PWM + uint16_t v; + /* PWM */ if (value < 0.0f) { value = 0.0f; @@ -332,6 +322,7 @@ void pwmout_write(pwmout_t* obj, float value) { // set channel match to percentage v = (uint16_t)((float)wk_cycle * value); *PWM_MATCH[obj->pwm] = (v | ((PORT[obj->pwm] & 1) << 12)); +#endif } } @@ -340,6 +331,7 @@ float pwmout_read(pwmout_t* obj) { float value; if (obj->pwm >= MTU2_PWM_OFFSET) { +#ifdef FUMC_MTU2_PWM /* PWM by MTU2 */ uint32_t wk_pulse; int tmp_pwm; @@ -348,7 +340,9 @@ float pwmout_read(pwmout_t* obj) { wk_cycle = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PERIOD] & 0xffff; wk_pulse = *MTU2_PWM_MATCH[tmp_pwm][MTU2_PULSE] & 0xffff; value = ((float)wk_pulse / (float)wk_cycle); +#endif } else { +#ifdef FUNC_MOTOR_CTL_PWM /* PWM */ if (obj->ch == 2) { wk_cycle = PWMPWCYR_2 & 0x03ff; @@ -356,6 +350,7 @@ float pwmout_read(pwmout_t* obj) { wk_cycle = PWMPWCYR_1 & 0x03ff; } value = ((float)(*PWM_MATCH[obj->pwm] & 0x03ff) / (float)wk_cycle); +#endif } return (value > 1.0f) ? (1.0f) : (value); @@ -369,6 +364,7 @@ void pwmout_period_ms(pwmout_t* obj, int ms) { pwmout_period_us(obj, ms * 1000); } +#ifdef FUNC_MOTOR_CTL_PWM static void set_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, uint16_t new_cycle){ uint16_t wk_pwmpbfr; float value; @@ -379,7 +375,9 @@ static void set_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, uint16 v = (uint16_t)((float)new_cycle * value); *p_pwmpbfr = (v | (wk_pwmpbfr & 0x1000)); } +#endif +#ifdef FUMC_MTU2_PWM static void set_mtu2_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, uint16_t new_cycle){ uint16_t wk_pwmpbfr; float value; @@ -388,17 +386,20 @@ static void set_mtu2_duty_again(__IO uint16_t *p_pwmpbfr, uint16_t last_cycle, u value = ((float)(wk_pwmpbfr & 0xffff) / (float)last_cycle); *p_pwmpbfr = (uint16_t)((float)new_cycle * value); } +#endif // Set the PWM period, keeping the duty cycle the same. void pwmout_period_us(pwmout_t* obj, int us) { - uint64_t wk_cycle_mtu2; uint32_t pclk_base; uint32_t wk_cycle; uint32_t wk_cks = 0; uint16_t wk_last_cycle; - int max_us = 0; if (obj->pwm >= MTU2_PWM_OFFSET) { +#ifdef FUMC_MTU2_PWM + uint64_t wk_cycle_mtu2; + int max_us = 0; + /* PWM by MTU2 */ int tmp_pwm; uint8_t tmp_tcr_up; @@ -432,7 +433,7 @@ void pwmout_period_us(pwmout_t* obj, int us) { wk_cks++; } wk_cycle = (uint32_t)(wk_cycle_mtu2 / 1000000); - + tmp_pwm = (int)(obj->pwm - MTU2_PWM_OFFSET); if (((uint8_t)MTU2_PORT[tmp_pwm] & 0x02) == 0x02) { tmp_tcr_up = 0xC0; @@ -468,7 +469,9 @@ void pwmout_period_us(pwmout_t* obj, int us) { MTU2TSTR |= tmp_tstr_st; // Save for future use mtu2_period_ch[obj->ch] = us; +#endif } else { +#ifdef FUNC_MOTOR_CTL_PWM /* PWM */ if (us > 491) { us = 491; @@ -524,6 +527,7 @@ void pwmout_period_us(pwmout_t* obj, int us) { // Save for future use period_ch1 = us; } +#endif } } @@ -539,11 +543,14 @@ void pwmout_pulsewidth_us(pwmout_t* obj, int us) { float value = 0; if (obj->pwm >= MTU2_PWM_OFFSET) { +#ifdef FUMC_MTU2_PWM /* PWM by MTU2 */ if (mtu2_period_ch[obj->ch] != 0) { value = (float)us / (float)mtu2_period_ch[obj->ch]; } +#endif } else { +#ifdef FUNC_MOTOR_CTL_PWM /* PWM */ if (obj->ch == 2) { if (period_ch2 != 0) { @@ -554,6 +561,7 @@ void pwmout_pulsewidth_us(pwmout_t* obj, int us) { value = (float)us / (float)period_ch1; } } +#endif } pwmout_write(obj, value); } diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/rtc_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/rtc_api.c similarity index 98% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/rtc_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/rtc_api.c index 8754a5d257..f3c19958e8 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/rtc_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/rtc_api.c @@ -19,15 +19,11 @@ #if DEVICE_RTC -#define USE_RTCX1_CLK -//#define USE_EXTAL_CLK -//#define USE_RTCX3_CLK - #include "rtc_api.h" -#include "rtc_iodefine.h" +#include "iodefine.h" +#include "mbed_drv_cfg.h" #include "mbed_mktime.h" - #define RCR1_VAL_ON (0x08u) // AIE = 1 #define RCR1_VAL_OFF (0x00u) #define RCR3_VAL (0x00u) @@ -138,6 +134,7 @@ void rtc_init(void) { // Dummy read dummy_read = RTC.RYRCNT; dummy_read = RTC.RYRCNT; + (void)dummy_read; } @@ -188,6 +185,7 @@ void rtc_free(void) { // Dummy read dummy_read = RTC.RYRCNT; dummy_read = RTC.RYRCNT; + (void)dummy_read; } @@ -365,6 +363,7 @@ void rtc_write(time_t t) { dummy_read = (uint16_t)RTC.RCR2; dummy_read = (uint16_t)RTC.RCR2; + (void)dummy_read; } } diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/serial_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/serial_api.c similarity index 77% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/serial_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/serial_api.c index 0d91ccb88d..e658c30214 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/serial_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/serial_api.c @@ -21,103 +21,55 @@ #include "serial_api.h" #include "cmsis.h" -#include "pinmap.h" +#include "PeripheralPins.h" #include "gpio_api.h" +#include "RZ_A1_Init.h" -#include "scif_iodefine.h" -#include "cpg_iodefine.h" +#include "iodefine.h" +#include "mbed_drv_cfg.h" #include "mbed_critical.h" /****************************************************************************** * INITIALIZATION ******************************************************************************/ -#define PCLK (66666666) // Define the peripheral clock P1 frequency. - +#if defined(TARGET_RZA1H) #define UART_NUM 8 +#else +#define UART_NUM 5 +#endif #define IRQ_NUM 4 static void uart0_tx_irq(void); -static void uart1_tx_irq(void); -static void uart2_tx_irq(void); -static void uart3_tx_irq(void); -static void uart4_tx_irq(void); -static void uart5_tx_irq(void); -static void uart6_tx_irq(void); -static void uart7_tx_irq(void); static void uart0_rx_irq(void); -static void uart1_rx_irq(void); -static void uart2_rx_irq(void); -static void uart3_rx_irq(void); -static void uart4_rx_irq(void); -static void uart5_rx_irq(void); -static void uart6_rx_irq(void); -static void uart7_rx_irq(void); static void uart0_er_irq(void); +static void uart1_tx_irq(void); +static void uart1_rx_irq(void); static void uart1_er_irq(void); +static void uart2_tx_irq(void); +static void uart2_rx_irq(void); static void uart2_er_irq(void); +static void uart3_tx_irq(void); +static void uart3_rx_irq(void); static void uart3_er_irq(void); +static void uart4_tx_irq(void); +static void uart4_rx_irq(void); static void uart4_er_irq(void); +#if defined(TARGET_RZA1H) +static void uart5_tx_irq(void); +static void uart5_rx_irq(void); static void uart5_er_irq(void); +static void uart6_tx_irq(void); +static void uart6_rx_irq(void); static void uart6_er_irq(void); +static void uart7_tx_irq(void); +static void uart7_rx_irq(void); static void uart7_er_irq(void); +#endif static void serial_put_done(serial_t *obj); static uint8_t serial_available_buffer(serial_t *obj); static void serial_irq_err_set(serial_t *obj, uint32_t enable); -static const PinMap PinMap_UART_TX[] = { - {P2_14 , UART0, 6}, - {P2_5 , UART1, 6}, - {P4_12 , UART1, 7}, - {P6_3 , UART2, 7}, - {P4_14 , UART2, 7}, - {P5_3 , UART3, 5}, - {P8_8 , UART3, 7}, - {P5_0 , UART4, 5}, - {P8_14 , UART4, 7}, - {P8_13 , UART5, 5}, - {P11_10, UART5, 3}, - {P6_6 , UART5, 5}, - {P5_6 , UART6, 5}, - {P11_1 , UART6, 4}, - {P7_4 , UART7, 4}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_RX[] = { - {P2_15 , UART0, 6}, - {P2_6 , UART1, 6}, - {P4_13 , UART1, 7}, - {P6_2 , UART2, 7}, - {P4_15 , UART2, 7}, - {P5_4 , UART3, 5}, - {P8_9 , UART3, 7}, - {P5_1 , UART4, 5}, - {P8_15 , UART4, 7}, - {P8_11 , UART5, 5}, - {P11_11, UART5, 3}, - {P6_7 , UART5, 5}, - {P5_7 , UART6, 5}, - {P11_2 , UART6, 4}, - {P7_5 , UART7, 4}, - {NC , NC , 0} -}; - -static const PinMap PinMap_UART_CTS[] = { - {P2_3 , UART1, 6}, - {P11_7 , UART5, 3}, - {P7_6 , UART7, 4}, - {NC , NC , 0} -}; -static const PinMap PinMap_UART_RTS[] = { - {P2_7 , UART1, 6}, - {P11_8 , UART5, 3}, - {P7_7 , UART7, 4}, - {NC , NC , 0} -}; - - - static const struct st_scif *SCIF[] = SCIF_ADDRESS_LIST; static uart_irq_handler irq_handler; @@ -127,7 +79,6 @@ serial_t stdio_uart; struct serial_global_data_s { uint32_t serial_irq_id; gpio_t sw_rts, sw_cts; - uint8_t rx_irq_set_flow, rx_irq_set_api; serial_t *tranferring_obj, *receiving_obj; uint32_t async_tx_callback, async_rx_callback; int event, wanted_rx_events; @@ -141,9 +92,11 @@ static const IRQn_Type irq_set_tbl[UART_NUM][IRQ_NUM] = { {SCIFRXI2_IRQn, SCIFTXI2_IRQn, SCIFBRI2_IRQn, SCIFERI2_IRQn}, {SCIFRXI3_IRQn, SCIFTXI3_IRQn, SCIFBRI3_IRQn, SCIFERI3_IRQn}, {SCIFRXI4_IRQn, SCIFTXI4_IRQn, SCIFBRI4_IRQn, SCIFERI4_IRQn}, +#if defined(TARGET_RZA1H) {SCIFRXI5_IRQn, SCIFTXI5_IRQn, SCIFBRI5_IRQn, SCIFERI5_IRQn}, {SCIFRXI6_IRQn, SCIFTXI6_IRQn, SCIFBRI6_IRQn, SCIFERI6_IRQn}, - {SCIFRXI7_IRQn, SCIFTXI7_IRQn, SCIFBRI7_IRQn, SCIFERI7_IRQn} + {SCIFRXI7_IRQn, SCIFTXI7_IRQn, SCIFBRI7_IRQn, SCIFERI7_IRQn}, +#endif }; static const IRQHandler hander_set_tbl[UART_NUM][IRQ_NUM] = { @@ -152,9 +105,11 @@ static const IRQHandler hander_set_tbl[UART_NUM][IRQ_NUM] = { {uart2_rx_irq, uart2_tx_irq, uart2_er_irq, uart2_er_irq}, {uart3_rx_irq, uart3_tx_irq, uart3_er_irq, uart3_er_irq}, {uart4_rx_irq, uart4_tx_irq, uart4_er_irq, uart4_er_irq}, +#if defined(TARGET_RZA1H) {uart5_rx_irq, uart5_tx_irq, uart5_er_irq, uart5_er_irq}, {uart6_rx_irq, uart6_tx_irq, uart6_er_irq, uart6_er_irq}, - {uart7_rx_irq, uart7_tx_irq, uart7_er_irq, uart7_er_irq} + {uart7_rx_irq, uart7_tx_irq, uart7_er_irq, uart7_er_irq}, +#endif }; static __IO uint16_t *SCSCR_MATCH[] = { @@ -163,9 +118,11 @@ static __IO uint16_t *SCSCR_MATCH[] = { &SCSCR_2, &SCSCR_3, &SCSCR_4, +#if defined(TARGET_RZA1H) &SCSCR_5, &SCSCR_6, &SCSCR_7, +#endif }; static __IO uint16_t *SCFSR_MATCH[] = { @@ -174,9 +131,11 @@ static __IO uint16_t *SCFSR_MATCH[] = { &SCFSR_2, &SCFSR_3, &SCFSR_4, +#if defined(TARGET_RZA1H) &SCFSR_5, &SCFSR_6, &SCFSR_7, +#endif }; @@ -192,32 +151,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) { obj->serial.uart = (struct st_scif *)SCIF[uart]; // enable power - switch (uart) { - case UART0: - CPG.STBCR4 &= ~(1 << 7); - break; - case UART1: - CPG.STBCR4 &= ~(1 << 6); - break; - case UART2: - CPG.STBCR4 &= ~(1 << 5); - break; - case UART3: - CPG.STBCR4 &= ~(1 << 4); - break; - case UART4: - CPG.STBCR4 &= ~(1 << 3); - break; - case UART5: - CPG.STBCR4 &= ~(1 << 2); - break; - case UART6: - CPG.STBCR4 &= ~(1 << 1); - break; - case UART7: - CPG.STBCR4 &= ~(1 << 0); - break; - } + CPG.STBCR4 &= ~(1 << (7 - uart)); dummy = CPG.STBCR4; /* ==== SCIF initial setting ==== */ @@ -227,7 +161,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) { /* ---- FIFO control register (SCFCR) setting ---- */ /* Transmit FIFO reset & Receive FIFO data register reset */ - obj->serial.uart->SCFCR = 0x0006; + obj->serial.uart->SCFCR = 0x0006u; /* ---- Serial status register (SCFSR) setting ---- */ dummy = obj->serial.uart->SCFSR; @@ -265,32 +199,8 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) { pinmap_pinout(tx, PinMap_UART_TX); pinmap_pinout(rx, PinMap_UART_RX); - switch (uart) { - case UART0: - obj->serial.index = 0; - break; - case UART1: - obj->serial.index = 1; - break; - case UART2: - obj->serial.index = 2; - break; - case UART3: - obj->serial.index = 3; - break; - case UART4: - obj->serial.index = 4; - break; - case UART5: - obj->serial.index = 5; - break; - case UART6: - obj->serial.index = 6; - break; - case UART7: - obj->serial.index = 7; - break; - } + obj->serial.index = uart; + uart_data[obj->serial.index].sw_rts.pin = NC; uart_data[obj->serial.index].sw_cts.pin = NC; @@ -313,51 +223,43 @@ void serial_free(serial_t *obj) { // serial_baud // set the baud rate, taking in to account the current SystemFrequency void serial_baud(serial_t *obj, int baudrate) { - uint16_t DL; + uint32_t pclk_base; + uint32_t bgdm = 1; + uint32_t cks = 0; + uint32_t DL; - obj->serial.uart->SCSMR &= ~0x0003; + if (RZ_A1_IsClockMode0() == false) { + pclk_base = CM1_RENESAS_RZ_A1_P1_CLK; + } else { + pclk_base = CM0_RENESAS_RZ_A1_P1_CLK; + } - if (baudrate > 32552) { - obj->serial.uart->SCEMR = 0x0081; // BGDM = 1, ABCS = 1 - DL = PCLK / (8 * baudrate); + if (baudrate > (int)(pclk_base / 0x800)) { + obj->serial.uart->SCSMR &= ~0x0003; + obj->serial.uart->SCEMR = 0x0081; // BGDM = 1, ABCS = 1 + DL = (pclk_base + (4 * baudrate)) / (8 * baudrate); // Rounding if (DL > 0) { DL--; } obj->serial.uart->SCBRR = (uint8_t)DL; - } else if (baudrate > 16276) { - obj->serial.uart->SCEMR = 0x0080; // BGDM = 1 - obj->serial.uart->SCBRR = PCLK / (16 * baudrate) - 1; - } else if (baudrate > 8138) { - obj->serial.uart->SCEMR = 0x0000; - obj->serial.uart->SCBRR = PCLK / (32 * baudrate) - 1; - } else if (baudrate > 4169) { - obj->serial.uart->SCSMR |= 0x0001; - obj->serial.uart->SCEMR = 0x0080; // BGDM = 1 - obj->serial.uart->SCBRR = PCLK / (64 * baudrate) - 1; - } else if (baudrate > 2034) { - obj->serial.uart->SCSMR |= 0x0001; - obj->serial.uart->SCEMR = 0x0000; - obj->serial.uart->SCBRR = PCLK / (128 * baudrate) - 1; - } else if (baudrate > 1017) { - obj->serial.uart->SCSMR |= 0x0002; - obj->serial.uart->SCEMR = 0x0080; // BGDM = 1 - obj->serial.uart->SCBRR = PCLK / (256 * baudrate) - 1; - } else if (baudrate > 508) { - obj->serial.uart->SCSMR |= 0x0002; - obj->serial.uart->SCEMR = 0x0000; - obj->serial.uart->SCBRR = PCLK / (512 * baudrate) - 1; - } else if (baudrate > 254) { + } else if (baudrate < (int)(pclk_base / 0x80000)) { obj->serial.uart->SCSMR |= 0x0003; - obj->serial.uart->SCEMR = 0x0080; // BGDM = 1 - obj->serial.uart->SCBRR = PCLK / (1024 * baudrate) - 1; - } else if (baudrate > 127) { - obj->serial.uart->SCSMR |= 0x0003; - obj->serial.uart->SCEMR = 0x0000; - obj->serial.uart->SCBRR = PCLK / (2048 * baudrate) - 1; + obj->serial.uart->SCEMR = 0x0000; + obj->serial.uart->SCBRR = 0xFFu; } else { - obj->serial.uart->SCSMR |= 0x0003; - obj->serial.uart->SCEMR = 0x0000; - obj->serial.uart->SCBRR = 0xFFu; + DL = (pclk_base + (8 * baudrate)) / (16 * baudrate); // Rounding + while (DL > 256) { + DL >>= 1; + if (bgdm == 1) { + bgdm = 0; + } else { + bgdm = 1; + cks++; + } + } + obj->serial.uart->SCSMR = (obj->serial.uart->SCSMR & ~0x0003) | (uint8_t)cks; + obj->serial.uart->SCEMR = (uint8_t)(bgdm << 7); + obj->serial.uart->SCBRR = (uint8_t)(DL - 1); } } @@ -399,11 +301,10 @@ void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_b break; } - obj->serial.uart->SCSMR = (obj->serial.uart->SCSMR & ~0x0078) - | (data_bits << 6) - | (parity_enable << 5) - | (parity_select << 4) - | (stop_bits << 3); + obj->serial.uart->SCSMR = data_bits << 6 + | parity_enable << 5 + | parity_select << 4 + | stop_bits << 3; } /****************************************************************************** @@ -538,89 +439,87 @@ static void uart_err_irq(IRQn_Type irq_num, uint32_t index) { } } -/* TX handler */ -static void uart0_tx_irq(void) { +static void uart0_tx_irq(void) { uart_tx_irq(SCIFTXI0_IRQn, 0); } -static void uart1_tx_irq(void) { - uart_tx_irq(SCIFTXI1_IRQn, 1); -} -static void uart2_tx_irq(void) { - uart_tx_irq(SCIFTXI2_IRQn, 2); -} -static void uart3_tx_irq(void) { - uart_tx_irq(SCIFTXI3_IRQn, 3); -} -static void uart4_tx_irq(void) { - uart_tx_irq(SCIFTXI4_IRQn, 4); -} -static void uart5_tx_irq(void) { - uart_tx_irq(SCIFTXI5_IRQn, 5); -} -static void uart6_tx_irq(void) { - uart_tx_irq(SCIFTXI6_IRQn, 6); -} -static void uart7_tx_irq(void) { - uart_tx_irq(SCIFTXI7_IRQn, 7); -} -/* RX handler */ -static void uart0_rx_irq(void) { +static void uart0_rx_irq(void) { uart_rx_irq(SCIFRXI0_IRQn, 0); } -static void uart1_rx_irq(void) { - uart_rx_irq(SCIFRXI1_IRQn, 1); -} -static void uart2_rx_irq(void) { - uart_rx_irq(SCIFRXI2_IRQn, 2); -} -static void uart3_rx_irq(void) { - uart_rx_irq(SCIFRXI3_IRQn, 3); -} -static void uart4_rx_irq(void) { - uart_rx_irq(SCIFRXI4_IRQn, 4); -} -static void uart5_rx_irq(void) { - uart_rx_irq(SCIFRXI5_IRQn, 5); -} -static void uart6_rx_irq(void) { - uart_rx_irq(SCIFRXI6_IRQn, 6); -} -static void uart7_rx_irq(void) { - uart_rx_irq(SCIFRXI7_IRQn, 7); -} -/* Error handler */ -static void uart0_er_irq(void) -{ +static void uart0_er_irq(void) { uart_err_irq(SCIFERI0_IRQn, 0); } -static void uart1_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 1); + +static void uart1_tx_irq(void) { + uart_tx_irq(SCIFTXI1_IRQn, 1); } -static void uart2_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 2); +static void uart1_rx_irq(void) { + uart_rx_irq(SCIFRXI1_IRQn, 1); } -static void uart3_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 3); +static void uart1_er_irq(void) { + uart_err_irq(SCIFERI1_IRQn, 1); } -static void uart4_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 4); + +static void uart2_tx_irq(void) { + uart_tx_irq(SCIFTXI2_IRQn, 2); } -static void uart5_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 5); +static void uart2_rx_irq(void) { + uart_rx_irq(SCIFRXI2_IRQn, 2); } -static void uart6_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 6); +static void uart2_er_irq(void) { + uart_err_irq(SCIFERI2_IRQn, 2); } -static void uart7_er_irq(void) -{ - uart_err_irq(SCIFERI0_IRQn, 7); + +static void uart3_tx_irq(void) { + uart_tx_irq(SCIFTXI3_IRQn, 3); } +static void uart3_rx_irq(void) { + uart_rx_irq(SCIFRXI3_IRQn, 3); +} +static void uart3_er_irq(void) { + uart_err_irq(SCIFERI3_IRQn, 3); +} + +static void uart4_tx_irq(void) { + uart_tx_irq(SCIFTXI4_IRQn, 4); +} +static void uart4_rx_irq(void) { + uart_rx_irq(SCIFRXI4_IRQn, 4); +} +static void uart4_er_irq(void) { + uart_err_irq(SCIFERI4_IRQn, 4); +} + +#if defined(TARGET_RZA1H) +static void uart5_tx_irq(void) { + uart_tx_irq(SCIFTXI5_IRQn, 5); +} +static void uart5_rx_irq(void) { + uart_rx_irq(SCIFRXI5_IRQn, 5); +} +static void uart5_er_irq(void) { + uart_err_irq(SCIFERI5_IRQn, 5); +} + +static void uart6_tx_irq(void) { + uart_tx_irq(SCIFTXI6_IRQn, 6); +} +static void uart6_rx_irq(void) { + uart_rx_irq(SCIFRXI6_IRQn, 6); +} +static void uart6_er_irq(void) { + uart_err_irq(SCIFERI6_IRQn, 6); +} + +static void uart7_tx_irq(void) { + uart_tx_irq(SCIFTXI7_IRQn, 7); +} +static void uart7_rx_irq(void) { + uart_rx_irq(SCIFRXI7_IRQn, 7); +} +static void uart7_er_irq(void) { + uart_err_irq(SCIFERI7_IRQn, 7); +} +#endif void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { irq_handler = handler; @@ -638,7 +537,13 @@ static void serial_irq_set_irq(IRQn_Type IRQn, IRQHandler handler, uint32_t enab } } -static void serial_irq_set_internal(serial_t *obj, SerialIrq irq, uint32_t enable) { +static void serial_irq_err_set(serial_t *obj, uint32_t enable) +{ + serial_irq_set_irq(irq_set_tbl[obj->serial.index][2], hander_set_tbl[obj->serial.index][2], enable); + serial_irq_set_irq(irq_set_tbl[obj->serial.index][3], hander_set_tbl[obj->serial.index][3], enable); +} + +void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { IRQn_Type IRQn; IRQHandler handler; @@ -650,24 +555,6 @@ static void serial_irq_set_internal(serial_t *obj, SerialIrq irq, uint32_t enabl } } -static void serial_irq_err_set(serial_t *obj, uint32_t enable) -{ - serial_irq_set_irq(irq_set_tbl[obj->serial.index][2], hander_set_tbl[obj->serial.index][2], enable); - serial_irq_set_irq(irq_set_tbl[obj->serial.index][3], hander_set_tbl[obj->serial.index][3], enable); -} - -void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { - if (RxIrq == irq) { - uart_data[obj->serial.index].rx_irq_set_api = enable; - } - serial_irq_set_internal(obj, irq, enable); -} - -static void serial_flow_irq_set(serial_t *obj, uint32_t enable) { - uart_data[obj->serial.index].rx_irq_set_flow = enable; - serial_irq_set_internal(obj, RxIrq, enable); -} - /****************************************************************************** * READ/WRITE ******************************************************************************/ @@ -729,8 +616,8 @@ int serial_writable(serial_t *obj) { void serial_clear(serial_t *obj) { core_util_critical_section_enter(); - obj->serial.uart->SCFCR |= 0x06; // TFRST = 1, RFRST = 1 - obj->serial.uart->SCFCR &= ~0x06; // TFRST = 0, RFRST = 0 + obj->serial.uart->SCFCR |= 0x0006u; // TFRST = 1, RFRST = 1 + obj->serial.uart->SCFCR &= ~0x0006u; // TFRST = 0, RFRST = 0 obj->serial.uart->SCFSR &= ~0x0093u; // ER, BRK, RDF, DR = 0 core_util_critical_section_exit(); @@ -755,23 +642,23 @@ void serial_break_clear(serial_t *obj) { core_util_critical_section_exit(); } +#if DEVICE_SERIAL_FC void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow) { // determine the UART to use - serial_flow_irq_set(obj, 0); - if (type == FlowControlRTSCTS) { core_util_critical_section_enter(); - obj->serial.uart->SCFCR = 0x0008u; // CTS/RTS enable + obj->serial.uart->SCFCR |= 0x0008u; // CTS/RTS enable core_util_critical_section_exit(); pinmap_pinout(rxflow, PinMap_UART_RTS); pinmap_pinout(txflow, PinMap_UART_CTS); } else { core_util_critical_section_enter(); - obj->serial.uart->SCFCR = 0x0000u; // CTS/RTS diable + obj->serial.uart->SCFCR &= ~0x0008u; // CTS/RTS diable core_util_critical_section_exit(); } } +#endif static uint8_t serial_available_buffer(serial_t *obj) { diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/spi_api.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c similarity index 89% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/spi_api.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c index 6e94a0db4f..fd3db3716f 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/spi_api.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/spi_api.c @@ -18,49 +18,10 @@ #include "spi_api.h" #include "cmsis.h" -#include "pinmap.h" +#include "PeripheralPins.h" #include "mbed_error.h" #include "RZ_A1_Init.h" - -static const PinMap PinMap_SPI_SCLK[] = { - {P10_12, SPI_0, 4}, - {P4_4 , SPI_1, 2}, - {P6_4 , SPI_1, 7}, - {P11_12, SPI_1, 2}, - {P8_3 , SPI_2, 3}, - {P5_0 , SPI_3, 8}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_SSEL[] = { - {P10_13, SPI_0, 4}, - {P4_5 , SPI_1, 2}, - {P6_5 , SPI_1, 7}, - {P11_13, SPI_1, 2}, - {P8_4 , SPI_2, 3}, - {P5_1 , SPI_3, 8}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MOSI[] = { - {P10_14, SPI_0, 4}, - {P4_6 , SPI_1, 2}, - {P6_6 , SPI_1, 7}, - {P11_14, SPI_1, 2}, - {P8_5 , SPI_2, 3}, - {P5_2 , SPI_3, 8}, - {NC , NC , 0} -}; - -static const PinMap PinMap_SPI_MISO[] = { - {P10_15, SPI_0, 4}, - {P4_7 , SPI_1, 2}, - {P6_7 , SPI_1, 7}, - {P11_15, SPI_1, 2}, - {P8_6 , SPI_2, 3}, - {P5_3 , SPI_3, 8}, - {NC , NC , 0} -}; +#include "mbed_drv_cfg.h" static const struct st_rspi *RSPI[] = RSPI_ADDRESS_LIST; @@ -87,13 +48,9 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel obj->spi.index = spi; // enable power and clocking - switch (spi) { - case SPI_0: CPGSTBCR10 &= ~(0x80); break; - case SPI_1: CPGSTBCR10 &= ~(0x40); break; - case SPI_2: CPGSTBCR10 &= ~(0x20); break; - case SPI_3: CPGSTBCR10 &= ~(0x10); break; - } + CPGSTBCR10 &= ~(0x80 >> spi); dummy = CPGSTBCR10; + (void)dummy; obj->spi.spi->SPCR = 0x00; // CTRL to 0 obj->spi.spi->SPSCR = 0x00; // no sequential operation @@ -192,7 +149,7 @@ void spi_frequency(spi_t *obj, int hz) { hz_min = pclk_base / 2 / 256 / 8; hz_max = pclk_base / 2; - if ((hz < hz_min) || (hz > hz_max)) { + if (((uint32_t)hz < hz_min) || ((uint32_t)hz > hz_max)) { error("Couldn't setup requested SPI frequency"); return; } @@ -293,37 +250,38 @@ int spi_busy(spi_t *obj) { #if DEVICE_SPI_ASYNCH -#define IRQ_NUM 2 +#define SPI_NUM 5 +#define IRQ_NUM 2 static void spi_irqs_set(spi_t *obj, uint32_t enable); static void spi_async_write(spi_t *obj); static void spi_async_read(spi_t *obj); static void spi0_rx_irq(void); -static void spi1_rx_irq(void); -static void spi2_rx_irq(void); -static void spi3_rx_irq(void); -static void spi4_rx_irq(void); static void spi0_er_irq(void); +static void spi1_rx_irq(void); static void spi1_er_irq(void); +static void spi2_rx_irq(void); static void spi2_er_irq(void); +static void spi3_rx_irq(void); static void spi3_er_irq(void); +static void spi4_rx_irq(void); static void spi4_er_irq(void); -static const IRQn_Type irq_set_tbl[RSPI_COUNT][IRQ_NUM] = { +static const IRQn_Type irq_set_tbl[SPI_NUM][IRQ_NUM] = { {RSPISPRI0_IRQn, RSPISPEI0_IRQn}, {RSPISPRI1_IRQn, RSPISPEI1_IRQn}, {RSPISPRI2_IRQn, RSPISPEI2_IRQn}, {RSPISPRI3_IRQn, RSPISPEI3_IRQn}, - {RSPISPRI4_IRQn, RSPISPEI4_IRQn} + {RSPISPRI4_IRQn, RSPISPEI4_IRQn}, }; -static const IRQHandler hander_set_tbl[RSPI_COUNT][IRQ_NUM] = { +static const IRQHandler hander_set_tbl[SPI_NUM][IRQ_NUM] = { {spi0_rx_irq, spi0_er_irq}, {spi1_rx_irq, spi1_er_irq}, {spi2_rx_irq, spi2_er_irq}, {spi3_rx_irq, spi3_er_irq}, - {spi4_rx_irq, spi4_er_irq} + {spi4_rx_irq, spi4_er_irq}, }; struct spi_global_data_s { @@ -331,7 +289,7 @@ struct spi_global_data_s { uint32_t async_callback, event, wanted_events; }; -static struct spi_global_data_s spi_data[RSPI_COUNT]; +static struct spi_global_data_s spi_data[SPI_NUM]; static void spi_rx_irq(IRQn_Type irq_num, uint32_t index) { @@ -388,53 +346,34 @@ static void spi_err_irq(IRQn_Type irq_num, uint32_t index) } } -static void spi0_rx_irq(void) -{ +static void spi0_rx_irq(void) { spi_rx_irq(RSPISPRI0_IRQn, 0); } - -static void spi1_rx_irq(void) -{ - spi_rx_irq(RSPISPRI1_IRQn, 1); -} - -static void spi2_rx_irq(void) -{ - spi_rx_irq(RSPISPRI2_IRQn, 2); -} - -static void spi3_rx_irq(void) -{ - spi_rx_irq(RSPISPRI3_IRQn, 3); -} - -static void spi4_rx_irq(void) -{ - spi_rx_irq(RSPISPRI4_IRQn, 4); -} - -static void spi0_er_irq(void) -{ +static void spi0_er_irq(void) { spi_err_irq(RSPISPEI0_IRQn, 0); } - -static void spi1_er_irq(void) -{ +static void spi1_rx_irq(void) { + spi_rx_irq(RSPISPRI1_IRQn, 1); +} +static void spi1_er_irq(void) { spi_err_irq(RSPISPEI1_IRQn, 1); } - -static void spi2_er_irq(void) -{ +static void spi2_rx_irq(void) { + spi_rx_irq(RSPISPRI2_IRQn, 2); +} +static void spi2_er_irq(void) { spi_err_irq(RSPISPEI2_IRQn, 2); } - -static void spi3_er_irq(void) -{ +static void spi3_rx_irq(void) { + spi_rx_irq(RSPISPRI3_IRQn, 3); +} +static void spi3_er_irq(void) { spi_err_irq(RSPISPEI3_IRQn, 3); } - -static void spi4_er_irq(void) -{ +static void spi4_rx_irq(void) { + spi_rx_irq(RSPISPRI4_IRQn, 4); +} +static void spi4_er_irq(void) { spi_err_irq(RSPISPEI4_IRQn, 4); } @@ -562,7 +501,7 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, obj->rx_buff.length = rx_length * bit_width / 8; obj->rx_buff.pos = 0; obj->rx_buff.width = bit_width; - for (i = 0; i < obj->rx_buff.length; i++) { + for (i = 0; i < (int)obj->rx_buff.length; i++) { ((uint8_t *)obj->rx_buff.buffer)[i] = SPI_FILL_WORD; } diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/us_ticker.c b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/us_ticker.c similarity index 98% rename from targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/us_ticker.c rename to targets/TARGET_RENESAS/TARGET_RZ_A1XX/us_ticker.c index 83e58dbe43..e6951fb7c9 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/us_ticker.c +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/us_ticker.c @@ -16,10 +16,10 @@ #include #include "us_ticker_api.h" #include "PeripheralNames.h" -#include "ostm_iodefine.h" +#include "iodefine.h" +#include "cmsis.h" #include "RZ_A1_Init.h" -#include "MBRZA1H.h" #include "vfp_neon_push_pop.h" #include "mbed_critical.h" From 5a08da08070a13d0a7f49c873d65aa2b9ea3a9af Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 9 Jan 2018 18:25:12 +0900 Subject: [PATCH 128/133] Change the values of RZ_A1 related "extra_labels" in targets.json As a result of revision of folder structure, I changed the values of "extra_labels" of RZ_A1-related in targets.json. --- targets/targets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 8dfeb0f2f7..5196f652b7 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -2551,7 +2551,7 @@ "supported_form_factors": ["ARDUINO"], "core": "Cortex-A9", "program_cycle_s": 2, - "extra_labels": ["RENESAS", "MBRZA1H"], + "extra_labels": ["RENESAS", "RZ_A1XX", "RZA1H", "MBRZA1H"], "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "inherits": ["Target"], "device_has": ["ANALOGIN", "CAN", "ETHERNET", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], @@ -2561,7 +2561,7 @@ "VK_RZ_A1H": { "inherits": ["Target"], "core": "Cortex-A9", - "extra_labels": ["RENESAS", "VKRZA1H"], + "extra_labels": ["RENESAS", "RZ_A1XX", "RZA1H", "VKRZA1H"], "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", "program_cycle_s": 2, From 78bd1e3e4b4cc1f82790f4621fcd067453f3082b Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 9 Jan 2018 18:28:39 +0900 Subject: [PATCH 129/133] Performance improvement of LWIP communication in RZ_A1 related For LWIP communication speedup in RZ_A1 related, I changed the below macro value and added the definition processing in RZ/A1 related header file(lwipopts_conf.h). For this reason, those macros are overrode by RZ/A1 related values, not default values. --- .../lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h index 1ad186c7a1..0e272a25fc 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/lwipopts_conf.h @@ -23,4 +23,11 @@ #define MEM_SIZE (1600 * 16) +#define MEMP_NUM_TCP_SEG 32 +#define TCP_MSS 1460 +#define PBUF_POOL_SIZE 16 +#define TCP_SND_BUF (8 * TCP_MSS) +#define TCP_WND (TCP_MSS * 8) +#define PBUF_POOL_BUFSIZE 1600 + #endif From 70f017cdaabc92ccca68b330b48b7ba02f74b2e2 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Tue, 9 Jan 2018 18:30:07 +0900 Subject: [PATCH 130/133] Modify the TYPO of debug info when using LWIP in RZ/A1 related I modified the debug message when using LWIP in RZ/A1 related mbed boards. In eth_arch_enetif_init(), sys_thread_new() was called and task name is appeared as debug information, but task name for debug was a mistake. --- .../lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c index 65515507a0..0953de1da4 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c @@ -195,8 +195,8 @@ err_t eth_arch_enetif_init(struct netif *netif) sys_sem_new(&recv_ready_sem, 0); /* task */ - sys_thread_new("rza1_emac_rx_thread", rza1_recv_task, netif, DEFAULT_THREAD_STACKSIZE, RECV_TASK_PRI); - sys_thread_new("rza1_emac_phy_thread", rza1_phy_task, netif, DEFAULT_THREAD_STACKSIZE, PHY_TASK_PRI); + sys_thread_new("rza1_recv_task", rza1_recv_task, netif, DEFAULT_THREAD_STACKSIZE, RECV_TASK_PRI); + sys_thread_new("rza1_phy_task", rza1_phy_task, netif, DEFAULT_THREAD_STACKSIZE, PHY_TASK_PRI); return ERR_OK; } From d1c21109fff6be2c5d6fd9b96dda47d298b187c4 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Thu, 11 Jan 2018 17:39:24 +0900 Subject: [PATCH 131/133] Add the function declarations of WEAK attribute to use LWIP on GR-LYCHEE I added the function declarations of Ethernet functions that have a WEAK attribute. Although several Ethernet functions was called in rza1_emac.c, GR-LYCHEE don't have Ethernert feature. But there may be case that GR-LYCHEE uses LWIP feature. In this case, since GR-LYCHEE will occur the build error, I addressed the error by defining the functions with a WEAK attribute. For reason of WEAK attribute, there is no influence in GR-PEACH and VK_RZ_A1H that have Ethernet feature. --- .../lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c index 0953de1da4..1d033e12da 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_RZ_A1XX/rza1_emac.c @@ -5,11 +5,73 @@ #include "mbed_interface.h" #include "ethernet_api.h" #include "ethernetext_api.h" +#include "platform/mbed_toolchain.h" #define RECV_TASK_PRI (osPriorityNormal) #define PHY_TASK_PRI (osPriorityNormal) #define PHY_TASK_WAIT (200) +WEAK int ethernetext_init(ethernet_cfg_t *p_ethcfg) +{ + return -1; +} + +WEAK void ethernetext_start_stop(int32_t mode) +{ +} + +WEAK int ethernetext_chk_link_mode(void) +{ + return NEGO_FAIL; +} + +WEAK void ethernetext_set_link_mode(int32_t link) +{ +} + +WEAK int ethernet_init(void) +{ + return -1; +} + +WEAK void ethernet_free(void) +{ +} + +WEAK int ethernet_write(const char *data, int size) +{ + return 0; +} + +WEAK int ethernet_send(void) +{ + return 0; +} + +WEAK int ethernet_receive(void) +{ + return 0; +} + +WEAK int ethernet_read(char *data, int size) +{ + return 0; +} + +WEAK void ethernet_address(char *mac) +{ +} + +WEAK int ethernet_link(void) +{ + return 0; +} + +WEAK void ethernet_set_link(int speed, int duplex) +{ +} + + /* memory */ static sys_sem_t recv_ready_sem; /* receive ready semaphore */ From da01e544c92c1e93d610e595e209eaffca9cfda8 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Fri, 12 Jan 2018 14:18:54 +0900 Subject: [PATCH 132/133] Modify the lack of copyright to header files I modified the lack of copyright in the below header files that I added for commonizing the RZ_A1 related files. - targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h - targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h --- .../TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h | 16 ++++++++++++++++ .../TARGET_VK_RZ_A1H/mbed_drv_cfg.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h index 1ee094dce6..827ad7fce3 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_RZ_A1H/mbed_drv_cfg.h @@ -1,3 +1,19 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2017 ARM Limited + * + * 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. + */ + #ifndef MBED_DRV_CFG_H #define MBED_DRV_CFG_H diff --git a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h index 578173c473..9b3c35d31f 100644 --- a/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h +++ b/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_VK_RZ_A1H/mbed_drv_cfg.h @@ -1,3 +1,19 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2017 ARM Limited + * + * 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. + */ + #ifndef MBED_DRV_CFG_H #define MBED_DRV_CFG_H From 0c344ffd58425bb26afc7f87a427d8c37a7ac011 Mon Sep 17 00:00:00 2001 From: TomoYamanaka Date: Fri, 12 Jan 2018 15:01:52 +0900 Subject: [PATCH 133/133] Add "RZ_A1XX" label for commonizing in targets.json I added the "RZ_A1XX" label for commonizing the setting in targets.json, and inherited in both RZ_A1H and VK_RZ_A1H. --- targets/targets.json | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 5196f652b7..599d3d467f 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -2547,27 +2547,24 @@ "features": ["BLE"], "release_versions": ["2", "5"] }, - "RZ_A1H": { - "supported_form_factors": ["ARDUINO"], - "core": "Cortex-A9", - "program_cycle_s": 2, - "extra_labels": ["RENESAS", "RZ_A1XX", "RZA1H", "MBRZA1H"], - "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], + "RZ_A1XX": { "inherits": ["Target"], + "core": "Cortex-A9", + "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], + "extra_labels": ["RENESAS", "RZ_A1XX"], "device_has": ["ANALOGIN", "CAN", "ETHERNET", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "features": ["LWIP"], + "program_cycle_s": 2 + }, + "RZ_A1H": { + "inherits": ["RZ_A1XX"], + "supported_form_factors": ["ARDUINO"], + "extra_labels_add": ["RZA1H", "MBRZA1H"], "release_versions": ["2", "5"] }, "VK_RZ_A1H": { - "inherits": ["Target"], - "core": "Cortex-A9", - "extra_labels": ["RENESAS", "RZ_A1XX", "RZA1H", "VKRZA1H"], - "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], - "default_toolchain": "ARM", - "program_cycle_s": 2, - "device_has": ["ANALOGIN", "CAN", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "STDIO_MESSAGES"], - "features": ["LWIP"], - "default_lib": "std", + "inherits": ["RZ_A1XX"], + "extra_labels": ["RZA1H", "VKRZA1H"], "release_versions": [] }, "MAXWSNENV": {